diff options
author | Moni Shoua <monis@voltaire.com> | 2009-09-15 02:37:40 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-15 02:37:40 -0700 |
commit | 75c78500ddad74b229cd0691496b8549490496a2 (patch) | |
tree | 5249219d68627421e4717c4e8f03f8b4bbad2e92 /include/linux/igmp.h | |
parent | 481a8199142c050b72bff8a1956a49fd0a75bbe0 (diff) | |
download | kernel_samsung_espresso10-75c78500ddad74b229cd0691496b8549490496a2.zip kernel_samsung_espresso10-75c78500ddad74b229cd0691496b8549490496a2.tar.gz kernel_samsung_espresso10-75c78500ddad74b229cd0691496b8549490496a2.tar.bz2 |
bonding: remap muticast addresses without using dev_close() and dev_open()
This patch fixes commit e36b9d16c6a6d0f59803b3ef04ff3c22c3844c10. The approach
there is to call dev_close()/dev_open() whenever the device type is changed in
order to remap the device IP multicast addresses to HW multicast addresses.
This approach suffers from 2 drawbacks:
*. It assumes tha the device is UP when calling dev_close(), or otherwise
dev_close() has no affect. It is worth to mention that initscripts (Redhat)
and sysconfig (Suse) doesn't act the same in this matter.
*. dev_close() has other side affects, like deleting entries from the routing
table, which might be unnecessary.
The fix here is to directly remap the IP multicast addresses to HW multicast
addresses for a bonding device that changes its type, and nothing else.
Reported-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Signed-off-by: Moni Shoua <monis@voltaire.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/igmp.h')
-rw-r--r-- | include/linux/igmp.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index 92fbd8c..fe158e0 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h @@ -233,6 +233,8 @@ extern void ip_mc_init_dev(struct in_device *); extern void ip_mc_destroy_dev(struct in_device *); extern void ip_mc_up(struct in_device *); extern void ip_mc_down(struct in_device *); +extern void ip_mc_unmap(struct in_device *); +extern void ip_mc_remap(struct in_device *); extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); extern void ip_mc_rejoin_group(struct ip_mc_list *im); |