[Xorp-hackers] linux VRRP svn xorp
Eric S. Johnson
esj at cs.fiu.edu
Thu Mar 11 08:13:18 PST 2010
So I am kind feeling silly this morning. Ive been chasing a bug
that nearly does not exist.
On and off for the last two weeks I have been trying to debug
why xorp svn (checked out 20100217, i dont think much has changed
since then) VRRP didn't work.
The behavior I saw was that when xorp became master for a router
it would correctly change the mac address on the interface, but
yet pinging the virtual IP would not work. I thought VRRP was
broken and spent some time tracing through the code to figure
out what was going on and going wrong.
It was not until I was deep in the depths of vrrp/arpd.cc
that I realized that the code was *mostly* working. Well,
all the code I could find was working, but there is one
behavior that is far from what I expected.
I found that indeed I could ping THROUGH the xorp VRRP master
router, just not ping the virtual address it self.
And that seems to be the way the code is designed to work?!?
Vrrp::become_master()
{
_state = MASTER;
// my comments
_vif.add_mac(_source_mac); // this changes the mac on the interface
send_advertisement(); // start sending vrrp master announcements
send_arps(); // send gratuitous arps
setup_timers(); // start timers
_arpd.start(); // start an pseudo arp deamon
// that responds to arp requests for the virtual
// IP address with the virtual mac
}
but no where does it seem to add the virtual IP as a IP on the interface/vif..
So a station sending a packet to the an address that is not the
virtual IP but that has a next hop of the virtual IP will make a
arp request for the Virtual IP, and get back (from the pseudo arp
deamon) the virtual MAC and when that IP packet arrives at the xorp
router, it is processed normally and forwarded.
But an IP packet with a DESTINATION of the virtual IP address will get
to the xorp router too. But the virtual router does not recognize the
virtual IP as being one of it's IP address and doesn't accept it.
soooo
Is/was this just unfinished code?
Am I missing somewhere the Virtual address would be added to the
VIF and something is broken in the code I can't find?
Or am I miss-understanding how VRRP should work (though EVERY other
implementation I have seen (vendor C, J, and open source vrrpd) all
accept IP packets destined for the virtual IP address?)
Would a correct solution be to have xorp set the virtual IP
as a secondary IP on that VIF? If so, what would be the correct
way to do this.. IfTreeVif::add_addr method?
Thoughts?
linux centos 5 kernel 2.6.18-164.6.1.el5
E
More information about the Xorp-hackers
mailing list