Message ID | 1297446256-23917-1-git-send-email-ian.campbell@citrix.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Ian Campbell <ian.campbell@citrix.com> Date: Fri, 11 Feb 2011 17:44:16 +0000 > NETDEV_NOTIFY_PEER is an explicit request by the driver to send a link > notification while NETDEV_UP/NETDEV_CHANGEADDR generate link > notifications as a sort of side effect. > > In the later cases the sysctl option is present because link > notification events can have undesired effects e.g. if the link is > flapping. I don't think this applies in the case of an explicit > request from a driver. > > This patch makes NETDEV_NOTIFY_PEER unconditional, if preferred we > could add a new sysctl for this case which defaults to on. > > This change causes Xen post-migration ARP notifications (which cause > switches to relearn their MAC tables etc) to be sent by default. > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Ok, applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 2011-02-15 at 01:46 +0000, David Miller wrote: > From: Ian Campbell <ian.campbell@citrix.com> > Date: Fri, 11 Feb 2011 17:44:16 +0000 > > > NETDEV_NOTIFY_PEER is an explicit request by the driver to send a link > > notification while NETDEV_UP/NETDEV_CHANGEADDR generate link > > notifications as a sort of side effect. > > > > In the later cases the sysctl option is present because link > > notification events can have undesired effects e.g. if the link is > > flapping. I don't think this applies in the case of an explicit > > request from a driver. > > > > This patch makes NETDEV_NOTIFY_PEER unconditional, if preferred we > > could add a new sysctl for this case which defaults to on. > > > > This change causes Xen post-migration ARP notifications (which cause > > switches to relearn their MAC tables etc) to be sent by default. > > > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> > > Ok, applied, thanks. Thanks. I nearly forgot -- the NETDEV_NOTIFY_PEER stuff was tagged for stable/longterm backport (it appeared in 2.6.32.19 or so). I think this change should likewise go back, what do you think? Ian. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Ian Campbell <Ian.Campbell@eu.citrix.com> Date: Tue, 15 Feb 2011 09:13:45 +0000 > On Tue, 2011-02-15 at 01:46 +0000, David Miller wrote: >> From: Ian Campbell <ian.campbell@citrix.com> >> Date: Fri, 11 Feb 2011 17:44:16 +0000 >> >> > NETDEV_NOTIFY_PEER is an explicit request by the driver to send a link >> > notification while NETDEV_UP/NETDEV_CHANGEADDR generate link >> > notifications as a sort of side effect. ... > I nearly forgot -- the NETDEV_NOTIFY_PEER stuff was tagged for > stable/longterm backport (it appeared in 2.6.32.19 or so). I think this > change should likewise go back, what do you think? Sure, I've queued it up for -stable. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Nice, so this is a generic way of getting out gratuitous arps. Can it be used by drivers (macvlan) on top of bonding. Bonding is sending the BOND_FAILOVER event that could be mapped to NOTIFY_PEERS in the higher level devices. And bonding is implementing its own grat arps functions, maybe it could be broken out to use the NOTIFY_PEERS instead. And what about IPv6, would it be ok to implement an unsolicited NA on the event? I will happily implement the above, if anyone thinks it's worth it? BR Anders On Tue, 2011-02-15 at 19:51 +0100, David Miller wrote: > From: Ian Campbell <Ian.Campbell@eu.citrix.com> > Date: Tue, 15 Feb 2011 09:13:45 +0000 > > > On Tue, 2011-02-15 at 01:46 +0000, David Miller wrote: > >> From: Ian Campbell <ian.campbell@citrix.com> > >> Date: Fri, 11 Feb 2011 17:44:16 +0000 > >> > >> > NETDEV_NOTIFY_PEER is an explicit request by the driver to send a link > >> > notification while NETDEV_UP/NETDEV_CHANGEADDR generate link > >> > notifications as a sort of side effect. > ... > > I nearly forgot -- the NETDEV_NOTIFY_PEER stuff was tagged for > > stable/longterm backport (it appeared in 2.6.32.19 or so). I think this > > change should likewise go back, what do you think? > > Sure, I've queued it up for -stable. > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 748cb5b..df4616f 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -1030,6 +1030,21 @@ static inline bool inetdev_valid_mtu(unsigned mtu) return mtu >= 68; } +static void inetdev_send_gratuitous_arp(struct net_device *dev, + struct in_device *in_dev) + +{ + struct in_ifaddr *ifa = in_dev->ifa_list; + + if (!ifa) + return; + + arp_send(ARPOP_REQUEST, ETH_P_ARP, + ifa->ifa_address, dev, + ifa->ifa_address, NULL, + dev->dev_addr, NULL); +} + /* Called only under RTNL semaphore */ static int inetdev_event(struct notifier_block *this, unsigned long event, @@ -1082,18 +1097,13 @@ static int inetdev_event(struct notifier_block *this, unsigned long event, } ip_mc_up(in_dev); /* fall through */ - case NETDEV_NOTIFY_PEERS: case NETDEV_CHANGEADDR: + if (!IN_DEV_ARP_NOTIFY(in_dev)) + break; + /* fall through */ + case NETDEV_NOTIFY_PEERS: /* Send gratuitous ARP to notify of link change */ - if (IN_DEV_ARP_NOTIFY(in_dev)) { - struct in_ifaddr *ifa = in_dev->ifa_list; - - if (ifa) - arp_send(ARPOP_REQUEST, ETH_P_ARP, - ifa->ifa_address, dev, - ifa->ifa_address, NULL, - dev->dev_addr, NULL); - } + inetdev_send_gratuitous_arp(dev, in_dev); break; case NETDEV_DOWN: ip_mc_down(in_dev);
NETDEV_NOTIFY_PEER is an explicit request by the driver to send a link notification while NETDEV_UP/NETDEV_CHANGEADDR generate link notifications as a sort of side effect. In the later cases the sysctl option is present because link notification events can have undesired effects e.g. if the link is flapping. I don't think this applies in the case of an explicit request from a driver. This patch makes NETDEV_NOTIFY_PEER unconditional, if preferred we could add a new sysctl for this case which defaults to on. This change causes Xen post-migration ARP notifications (which cause switches to relearn their MAC tables etc) to be sent by default. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> --- net/ipv4/devinet.c | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-)