linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] solving proxy arp bug on shaper devices
@ 2001-09-14  9:23 Roberto Arcomano
  0 siblings, 0 replies; only message in thread
From: Roberto Arcomano @ 2001-09-14  9:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: torvalds

[-- Attachment #1: Type: text/plain, Size: 615 bytes --]

Hi,
This patch should corrects proxy arp feature in shaper devices forcing kernel 
checking (before sending ARP REPLY) for "physical" device (i.e. eth0) instead 
of "shaper" device (i.e. shaper0): in this way we avoid useless ARP REPLY and 
"IP CONFLICT" messages on client hosts.
More details in "readme.txt" file attached.

I already tested it for many days and it has been worked well.

Noticed that this discussion has done in July: now I optimized patch 
introducing a flag (to determine if the device is shaper) instead of 
comparing dev name.

Thank you for your great support.
Best Regards
Roberto arcomano

[-- Attachment #2: patch-proxyarp-2.4.9 --]
[-- Type: text/x-c, Size: 2448 bytes --]

diff -ur linux-2.4.9.orig/drivers/net/shaper.c linux-2.4.9/drivers/net/shaper.c
--- linux-2.4.9.orig/drivers/net/shaper.c	Thu Jun 28 02:10:55 2001
+++ linux-2.4.9/drivers/net/shaper.c	Tue Sep 11 13:20:09 2001
@@ -670,6 +670,7 @@
 	dev->addr_len		= 0;
 	dev->tx_queue_len	= 10;
 	dev->flags		= 0;
+	dev->features		|= NETIF_F_SHAPER;
 		
 	/*
 	 *	Shaper is ok
diff -ur linux-2.4.9.orig/include/linux/if_shaper.h linux-2.4.9/include/linux/if_shaper.h
--- linux-2.4.9.orig/include/linux/if_shaper.h	Wed Aug 18 20:38:47 1999
+++ linux-2.4.9/include/linux/if_shaper.h	Tue Sep 11 13:20:00 2001
@@ -14,6 +14,8 @@
 #define SHAPER_MAXSLIP	2
 #define SHAPER_BURST	(HZ/50)		/* Good for >128K then */
 
+#define IS_SHAPERDEVICE(dev) ((dev)->features & NETIF_F_SHAPER)
+
 struct shaper
 {
 	struct sk_buff_head sendq;
diff -ur linux-2.4.9.orig/include/linux/netdevice.h linux-2.4.9/include/linux/netdevice.h
--- linux-2.4.9.orig/include/linux/netdevice.h	Sun Sep  9 16:15:40 2001
+++ linux-2.4.9/include/linux/netdevice.h	Tue Sep 11 13:20:04 2001
@@ -345,6 +345,7 @@
 #define NETIF_F_DYNALLOC	16	/* Self-dectructable device. */
 #define NETIF_F_HIGHDMA		32	/* Can DMA to high memory. */
 #define NETIF_F_FRAGLIST	64	/* Scatter/gather IO. */
+#define NETIF_F_SHAPER  	128	/* Shaper device. */
 
 	/* Called after device is detached from network. */
 	void			(*uninit)(struct net_device *dev);
diff -ur linux-2.4.9.orig/net/ipv4/arp.c linux-2.4.9/net/ipv4/arp.c
--- linux-2.4.9.orig/net/ipv4/arp.c	Wed May 16 19:21:45 2001
+++ linux-2.4.9/net/ipv4/arp.c	Tue Sep 11 13:19:51 2001
@@ -111,8 +111,7 @@
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
-
-
+#include <linux/if_shaper.h>
 
 /*
  *	Interface to generic neighbour cache.
@@ -767,8 +766,15 @@
 			}
 			goto out;
 		} else if (IN_DEV_FORWARD(in_dev)) {
+                        char shflag=0;
+                        if ( (rt->u.dst.dev) &&
+			     (rt->u.dst.dev->priv) &&
+			     (((struct shaper *) rt->u.dst.dev->priv)->dev) &&
+			     (IS_SHAPERDEVICE(rt->u.dst.dev)) )
+			  shflag=1;
 			if ((rt->rt_flags&RTCF_DNAT) ||
-			    (addr_type == RTN_UNICAST  && rt->u.dst.dev != dev &&
+			    (addr_type == RTN_UNICAST  && 
+			    ( ((shflag) && ( ((struct shaper *) rt->u.dst.dev->priv)->dev != dev)) || ((!shflag) && (rt->u.dst.dev != dev)) ) &&
 			     (IN_DEV_PROXY_ARP(in_dev) || pneigh_lookup(&arp_tbl, &tip, dev, 0)))) {
 				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
 				if (n)

[-- Attachment #3: readme.txt --]
[-- Type: text/plain, Size: 2610 bytes --]

Subject: PATCH to update proxy arp feature on shaper device

Author: Roberto Arcomano, berto@fatamorgana.com,
        http://www.fatamorgana.com/bertolinux

Date: 9/9/2001

Description: Shaper device is seen by the kernel like a 
             different device (i.e. shaper0) than the 
	     physical one (i.e. eth0)  to which is attached:
	     so kernel always issues an "ARP REPLY" 
	     (if proxy arp is active on shaper physical 
	     interface): this prevent us from use proxy arp on 
	     a shaper device cause, during turning on client
	     machine, we would receive an "IP conflit" message.
	     
Solution: Patch consists in 4 files:
	  a-) "include/linux/netdevice.h", where we add a new
	      net feature, NETIF_F_SHAPER which will help
	      us to understand if a device is a shaper one.
	      
	  b-) "drivers/net/shaper.c", in "shaper_probe" function
	      we set NETIF_F_SHAPER flag for a new shaper
	      device.
	  
	  c-) "include/linux/if_shaper.h" where we add the macro
	      IS_SHAPERDEVICE, used to know if the device is a 
	      shaper one (it checks NETIF_F_SHAPER flag in 
	      features field, under "netdevice" struct).
	
	  d-) "net/ipv4/arp.c" where finally we modify proxy arp;
	      We use shflag to determine if we are managing a
	      shaper device (with IS_SHAPERDEVICE macro): in 
	      this case we check 
	      "rt->u.dst.dev->priv->dev" (physical device) 
	      instead of 
	      "rt->u.dst.dev" (shaper device)
	      while if the device is a non shaper one, we check 
	      rt->u.dst.dev (anded with !shflag)
	      
TODO:	I used "features" field in netdevice struct: maybe it could
        be choosen another place where to put the shaper flag.	      
	      
Tests: I tested new feature using 3 PCs like that:

           CLIENT1  ------------- LINUX ------------- CLIENT2 
     	                   shaper0      ppp0
	                    [eth0]
	   
       LINUX host has proxy arp and shaper enabled, with CLIENT1
       reachable via shaper0.
       With classic proxy arp, when I turn on CLIENT machine I 
       receive an "IP conflit" from OS, while using patched version 
       there are no problems.
       Proxy arp still does its work cause, if I give CLIENT2 IP
       address to CLIENT1 machine, I receive (from CLIENT1 OS) a
       IP busy message.

       Also tests on commercial server have been done with good
       results.

       Kernel version tested is 2.4.9
       

Final notes: It should be very simple to port patch to older
             kernel version (2.0.xx, 2.1.xx, 2.2.xx, 2.3.xx)
	    
	             
	     
	     

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-09-14  9:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-09-14  9:23 [PATCH] solving proxy arp bug on shaper devices Roberto Arcomano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).