From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeremy Fitzhardinge Subject: Re: Stimulating domains to send gratuitous ARPs Date: Fri, 06 Jul 2007 11:51:23 -0700 Message-ID: <468E8F2B.9050701@goop.org> References: <342BAC0A5467384983B586A6B0B3767105FCE6BF@EXNA.corp.stratus.com><1183664755.6902.10.camel@localhost.localdomain> <342BAC0A5467384983B586A6B0B3767105FCE6DF@EXNA.corp.stratus.com> <8A87A9A84C201449A0C56B728ACF491E25FD87@liverpoolst.ad.cl.cam.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010305000901050501060300" Return-path: In-Reply-To: <8A87A9A84C201449A0C56B728ACF491E25FD87@liverpoolst.ad.cl.cam.ac.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Pratt Cc: "Graham, Simon" , xen-devel@lists.xensource.com, Ian Campbell List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------010305000901050501060300 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Ian Pratt wrote: >> Whilst I might agree that from a purist point of view having netfront do >> this is a violation of layering, it's already accepted in some other >> upstream drivers >> > > It's pretty clear it's not going to be accepted in the netfront that goes into upstream Linux, at least not without sedating various LKML folk first :) > Stephen Hemminger posted a patch to add this capability generically so it wouldn't be a netfront-specific piece of behaviour. I have not submitted it for upstream yet, mainly because nobody has confirmed/tested that it really does what we need. But it looks reasonable, and it should be accepted once we confirm its correct. J --------------010305000901050501060300 Content-Type: text/x-patch; name="ARP-notify-option.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ARP-notify-option.patch" Subject: ARP notify option This adds another inet device option to enable gratuitous ARP when device is brought up or address change. This is handy for clusters or virtualization. Tested on a normal device (not Xen). Signed-off-by: Stephen Hemminger --- Documentation/networking/ip-sysctl.txt | 6 ++++++ include/linux/inetdevice.h | 2 ++ include/linux/sysctl.h | 1 + net/ipv4/devinet.c | 16 ++++++++++++++++ 4 files changed, 25 insertions(+) =================================================================== --- net-2.6.22.orig/Documentation/networking/ip-sysctl.txt +++ net-2.6.22/Documentation/networking/ip-sysctl.txt @@ -732,6 +732,12 @@ The max value from conf/{all,interface}/arp_ignore is used when ARP request is received on the {interface} +arp_notify - BOOLEAN + Define mode for notification of address and device changes. + 0 - (default): do nothing + 1 - Generate gratuitous arp replies when device is brought up + or hardware address changes. + arp_accept - BOOLEAN Define behavior when gratuitous arp replies are received: 0 - drop gratuitous arp frames =================================================================== --- net-2.6.22.orig/include/linux/inetdevice.h +++ net-2.6.22/include/linux/inetdevice.h @@ -26,6 +26,7 @@ int arp_announce; int arp_ignore; int arp_accept; + int arp_notify; int medium_id; int no_xfrm; int no_policy; @@ -84,6 +85,7 @@ #define IN_DEV_ARPFILTER(in_dev) (ipv4_devconf.arp_filter || (in_dev)->cnf.arp_filter) #define IN_DEV_ARP_ANNOUNCE(in_dev) (max(ipv4_devconf.arp_announce, (in_dev)->cnf.arp_announce)) #define IN_DEV_ARP_IGNORE(in_dev) (max(ipv4_devconf.arp_ignore, (in_dev)->cnf.arp_ignore)) +#define IN_DEV_ARP_NOTIFY(in_dev) (ipv4_devconf.arp_notify || (in_dev)->cnf.arp_notify) struct in_ifaddr { =================================================================== --- net-2.6.22.orig/include/linux/sysctl.h +++ net-2.6.22/include/linux/sysctl.h @@ -495,6 +495,7 @@ NET_IPV4_CONF_ARP_IGNORE=19, NET_IPV4_CONF_PROMOTE_SECONDARIES=20, NET_IPV4_CONF_ARP_ACCEPT=21, + NET_IPV4_CONF_ARP_NOTIFY=22, __NET_IPV4_CONF_MAX }; =================================================================== --- net-2.6.22.orig/net/ipv4/devinet.c +++ net-2.6.22/net/ipv4/devinet.c @@ -1089,6 +1089,14 @@ } } ip_mc_up(in_dev); + /* fall through */ + case NETDEV_CHANGEADDR: + if (IN_DEV_ARP_NOTIFY(in_dev)) + arp_send(ARPOP_REQUEST, ETH_P_ARP, + in_dev->ifa_list->ifa_address, + dev, + in_dev->ifa_list->ifa_address, + NULL, dev->dev_addr, NULL); break; case NETDEV_DOWN: ip_mc_down(in_dev); @@ -1495,6 +1503,14 @@ .proc_handler = &proc_dointvec, }, { + .ctl_name = NET_IPV4_CONF_ARP_NOTIFY, + .procname = "arp_notify", + .data = &ipv4_devconf.arp_notify, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, + { .ctl_name = NET_IPV4_CONF_NOXFRM, .procname = "disable_xfrm", .data = &ipv4_devconf.no_xfrm, --------------010305000901050501060300 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------010305000901050501060300--