Thread (18 messages) 18 messages, 9 authors, 2008-10-01

Re: [RFC] bonding: add better ipv6 failover support

From: Vlad Yasevich <hidden>
Date: 2008-09-26 19:46:40

David Stevens wrote:
1) You're calling mld_send_report() directly, which will send the MLD
        report synchronously. It should use the randomized timer (see 
igmp6_join_group).
        A mass failover (e.g., a power event in a cluster) would blast all 
of these at once,
        which is why the randomized timer is required for gratuitous 
reports. This
        should use a randomized timer, like mld_ifc_start_timer(), but 
joining the
        group all by itself will do that.
To add to what David said, looks like mld_send_report will always send a
Version 2 report.  This should honor correctly V1 or v2 configuration.

However, to address the random delay, this would have to be static delay
of at most 1 sec.  Otherwise any NUD probes would be lost.

3) MLD has a lot of state and it's all associated with the device. 
Changing the sending device out from under it seems risky to me. I don't know enough 
about bonding, but I think you really just want all the group 
memberships and MLD state to be with the master device and the master should just 
go through the multicast list for the master and join those groups on 
the new slave. The MLD code will already resolve the filters 
appropriately for joins and filters already done directly on the new slave that 
way.  Actually, I thought that's what Jay's prior patch was all 
about, and those joins should trigger MLD reports where needed, so I'm 
definitely confused on what the problem with multicasts is beyond the 
solicited-node addresses (which just needs to mimic the address add code, or use 
it directly).
Yes, I think this needs a little more thought.  The multicast addresses are
already on the master and also on the active slave.  However, at failover time,
I think those memberships needs to be removed from the old slave, and added
to the new slave.  Alex mentioned that there were some refcounts that didn't
allow for this to happen, but I don't see any.

The trouble I see is that the MLD/IGMPv6 is only sent when an IPv6 multicast
address is added.  In the failover scenario, since IPv6 address is joined on
the bond, we only move the link multicast address from one interface to
another.  This doesn't normally trigger and new report, but this is just what
we want.

Additionally, I think the code should be using an unsolicited NA instead of the
NS, since we do really want to trigger a rediscovery the address and
the associated MAC to make sure that all forwarding state is updated on link.

-vlad
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help