From 938e3a16508dc944effdbccdc439c505620358bb Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Wed, 26 May 2010 00:09:42 +0000 Subject: [PATCH] --- yaml --- r: 202588 b: refs/heads/master c: 06c4648d46d1b757d6b9591a86810be79818b60c h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/netdevice.h | 2 ++ trunk/include/linux/notifier.h | 1 + trunk/net/ipv4/devinet.c | 1 + trunk/net/sched/sch_generic.c | 18 ++++++++++++++++++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 9fb2341a60ce..be2d3cffd68a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3f8dc2362fd43a0adee2f6f05bf1ac4d619675b6 +refs/heads/master: 06c4648d46d1b757d6b9591a86810be79818b60c diff --git a/trunk/include/linux/netdevice.h b/trunk/include/linux/netdevice.h index 40291f375024..a24916156f4e 100644 --- a/trunk/include/linux/netdevice.h +++ b/trunk/include/linux/netdevice.h @@ -1772,6 +1772,8 @@ extern void netif_carrier_on(struct net_device *dev); extern void netif_carrier_off(struct net_device *dev); +extern void netif_notify_peers(struct net_device *dev); + /** * netif_dormant_on - mark device as dormant. * @dev: network device diff --git a/trunk/include/linux/notifier.h b/trunk/include/linux/notifier.h index 540703b555cb..22c2abb61974 100644 --- a/trunk/include/linux/notifier.h +++ b/trunk/include/linux/notifier.h @@ -210,6 +210,7 @@ static inline int notifier_to_errno(int ret) #define NETDEV_POST_INIT 0x0010 #define NETDEV_UNREGISTER_BATCH 0x0011 #define NETDEV_BONDING_DESLAVE 0x0012 +#define NETDEV_NOTIFY_PEERS 0x0012 #define SYS_DOWN 0x0001 /* Notify of system down */ #define SYS_RESTART SYS_DOWN diff --git a/trunk/net/ipv4/devinet.c b/trunk/net/ipv4/devinet.c index 382bc768ed56..da14c49284f4 100644 --- a/trunk/net/ipv4/devinet.c +++ b/trunk/net/ipv4/devinet.c @@ -1081,6 +1081,7 @@ 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: /* Send gratuitous ARP to notify of link change */ if (IN_DEV_ARP_NOTIFY(in_dev)) { diff --git a/trunk/net/sched/sch_generic.c b/trunk/net/sched/sch_generic.c index a63029ef3edd..bd1892fe4b21 100644 --- a/trunk/net/sched/sch_generic.c +++ b/trunk/net/sched/sch_generic.c @@ -327,6 +327,24 @@ void netif_carrier_off(struct net_device *dev) } EXPORT_SYMBOL(netif_carrier_off); +/** + * netif_notify_peers - notify network peers about existence of @dev + * @dev: network device + * + * Generate traffic such that interested network peers are aware of + * @dev, such as by generating a gratuitous ARP. This may be used when + * a device wants to inform the rest of the network about some sort of + * reconfiguration such as a failover event or virtual machine + * migration. + */ +void netif_notify_peers(struct net_device *dev) +{ + rtnl_lock(); + call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, dev); + rtnl_unlock(); +} +EXPORT_SYMBOL(netif_notify_peers); + /* "NOOP" scheduler: the best scheduler, recommended for all interfaces under all circumstances. It is difficult to invent anything faster or cheaper.