[Xorp-users] Assert in OSPF when adding interface with mcast-addr already assigned.

Ben Greear greearb at candelatech.com
Wed Sep 26 11:49:42 PDT 2007


I coded up the method of storing a vifname in the route instead
of the vif pointer, and that seems to have fixed the rib crash.

Now, I am getting an assert in OSPF because it cannot add the
multicast address.  However, this is because the mcast addr is
already on that interface, probably because the code that removes
an interface does not clean it up properly.

My current plan is to just ignore the error if it is 'address in use'.
I think this will be fine, but I am not the best at understanding
multicast...

Here's the stack trace for reference:

#0  0xffffe410 in __kernel_vsyscall ()
#1  0x46fc1069 in raise () from /lib/libc.so.6
#2  0x46fc2671 in abort () from /lib/libc.so.6
#3  0x08278b65 in xlog_fatal (module_name=Could not find the frame base for "xlog_fatal".
) at xlog.c:435
#4  0x080ed502 in XrlIO<IPv4>::join_multicast_group_cb (this=0xbf9ec96c, xrl_error=@0xbf9e8540,
     interface=@0xbf9e4580, vif=@0xbf9e457c) at xrl_io.cc:637
#5  0x080ec418 in XorpMemberCallback1B2<void, XrlIO<IPv4>, XrlError const&, std::string, std::string>::dispatch (this=0x8386f28, a1=@0xbf9e8540) at ../libxorp/callback_nodebug.hh:3060
#6  0x082093b7 in XrlRawPacket4V0p1Client::unmarshall_join_multicast_group (this=0xbf9dc468, e=@0xbf9e8540,
     a=0xbf9e8530, cb=@0xbf9e652c) at fea_rawpkt4_xif.cc:172
#7  0x0820a841 in XorpMemberCallback2B1<void, XrlRawPacket4V0p1Client, XrlError const&, XrlArgs*, ref_ptr<XorpCallback1<void, XrlError const&> > >::dispatch (this=0x8383e68, a1=@0xbf9e8540, a2=0xbf9e8530)
     at ../../libxorp/callback_nodebug.hh:4927
#8  0x08231fa3 in XrlRouter::send_callback (this=0xbf9eca94, e=@0xbf9e8540, reply=0xbf9e8530,
     user_callback=@0xbf9e658c) at xrl_router.cc:365
#9  0x08237823 in XorpMemberCallback2B2<void, XrlRouter, XrlError const&, XrlArgs*, XrlPFSender*, ref_ptr<XorpCallback2<void, XrlError const&, XrlArgs*> > >::dispatch (this=0x8388550, a1=@0xbf9e8540, a2=0xbf9e8530)
     at ../libxorp/callback_nodebug.hh:5225
#10 0x082540f9 in XrlPFSTCPSender::read_event (this=0x8386428, ev=BufferedAsyncReader::DATA,
     buffer=0xb7e69cfe "STCP\001\001", buffer_bytes=140) at xrl_pf_stcp.cc:878
#11 0x08258b24 in XorpMemberCallback4B0<void, XrlPFSTCPSender, BufferedAsyncReader*, BufferedAsyncReader::Event, unsigned char*, unsigned int>::dispatch (this=0x83853a8, a1=0x8385360, a2=BufferedAsyncReader::DATA,
     a3=0xb7e69cfe "STCP\001\001", a4=140) at ../libxorp/callback_nodebug.hh:8965
#12 0x0827d5bb in BufferedAsyncReader::announce_event (this=0x8385360, ev=BufferedAsyncReader::DATA)
     at buffered_asyncio.cc:248
#13 0x0827e0d7 in XorpMemberCallback0B1<void, BufferedAsyncReader, BufferedAsyncReader::Event>::dispatch (
     this=0x83898e0) at ../libxorp/callback_nodebug.hh:597
#14 0x0829495c in OneoffTimerNode2::expire (this=0x8381f48) at timer.cc:184
#15 0x08293892 in TimerList::expire_one (this=0xbf9ec5f4, worst_priority=4) at timer.cc:481
#16 0x082939f6 in TimerList::run (this=0xbf9ec5f4) at timer.cc:428
#17 0x08280044 in EventLoop::run (this=0xbf9ec5f0) at eventloop.cc:114
#18 0x0804c016 in main (argv=0xbf9ecbb4) at xorp_ospfv2.cc:72
(gdb) frame 4
#4  0x080ed502 in XrlIO<IPv4>::join_multicast_group_cb (this=0xbf9ec96c, xrl_error=@0xbf9e8540,
     interface=@0xbf9e4580, vif=@0xbf9e457c) at xrl_io.cc:637
637     xrl_io.cc: No such file or directory.
         in xrl_io.cc
(gdb) print xrl_error
$1 = (const XrlError &) @0xbf9e8540: {_errlet = 0x8364bf8, _note = {static npos = 4294967295,
     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
       _M_p = 0x8388d6c "Cannot join group 224.0.0.5 on interface rddVR44 vif rddVR44: Address already in use"}}}


Thanks,
Ben


-- 
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



More information about the Xorp-users mailing list