Hi Christian,
> As far as I have found out till now, ARP-Reply will not help :(
>
> Bintec know of the Problem and are solving it, but it will take 4 months :(
> This is what it does : so long the Router can reach the IP-Address it does
> not update its ARP Cache :(
Please, give it a shot :
diff -urN keepalived-0.7.6/keepalived/vrrp/vrrp_arp.c
keepalived-0.7.7/keepalived/vrrp/vrrp_arp.c
--- keepalived-0.7.6/keepalived/vrrp/vrrp_arp.c Wed Nov 20 16:41:20 2002
+++ keepalived-0.7.7/keepalived/vrrp/vrrp_arp.c Thu Nov 21 12:44:53 2002
@@ -53,7 +53,7 @@
}
/* Build a gratuitous ARP message over a specific interface */
-int send_gratuitous_arp(vrrp_rt * vrrp, int addr)
+static int send_arp_type(vrrp_rt * vrrp, int addr, int type)
{
char buflen = sizeof(m_arphdr) + ETHER_HDR_LEN;
char *buf = (char *)MALLOC(buflen);
@@ -72,7 +72,7 @@
arph->ar_pro = htons(ETHERTYPE_IP);
arph->ar_hln = ETHERNET_HW_LEN;
arph->ar_pln = IPPROTO_ADDR_LEN;
- arph->ar_op = htons(ARPOP_REQUEST);
+ arph->ar_op = htons(type);
memcpy(arph->__ar_sha, hwaddr, ETH_ALEN);
memcpy(arph->__ar_sip, &addr, sizeof (addr));
memcpy(arph->__ar_tip, &addr, sizeof (addr));
@@ -83,3 +83,11 @@
FREE(buf);
return len;
}
+
+int send_gratuitous_arp(vrrp_rt * vrrp, int addr)
+{
+ send_arp_type(vrrp, addr, ARPOP_REQUEST);
+ send_arp_type(vrrp, addr, ARPOP_REPLY);
+
+ return 0;
+}
> Solutions :
>
> 1. take down the VIP (and mybee the Card on the failed LB) for 90-100 Sec.
> so that the cache in the Bintec timouts. Then start it again. Could that be
> done with notify_failure/notify_master ?
You can use notify_* for this but still hacky :)
> 2. Somehow use a VMAC. I have found an "ip arp" patch here
> http://www.linuxvirtualserver.org/~julian/#iparp - could that possibly solve
> my Problem ?
> I would then use the notify_master to set a Private MAC and notify_failure
> to remove it again. send_arp of the piranha package could be used to do the
> Gratious ARP :)
VMAC would be nice but there is current trouble with Linux Kernel that doesn t
allow to add this VMAC support in a simple way.
Hey, Julian, you will say, "Alexandre : AGAIN YOU VRRP VMAC !!!!" :) The fact
is that we spend some time on this problem and Julian produced a nice netlink
patch that handle ARP reply filtering.
There is other solution using bridge and/or 802.1Q Kernel code :
http://www.math.leidenuniv.nl/pipermail/bridge/2002-June/002021.html
But this still hacky. And it can introduce ugly thinks into the current VRRP
code. The fact is that I really want to keep the code as simple as possible
to keep readability.
Since gratuitous ARP are working quite nicely (for non bintec switch :)) I
have not considered spending time on this VMAC part. And I don t want to
polute Julian time with that :).
I think I will put an email into the LKML when the 1.0.0 code will be release,
and I will let an open discussion on this VMAC. But currently it is not my
area, so I must delay this part.
Best regards,
Alexandre
|