Patch suggestion for proxy arp on shaper interface

From: Roberto Arcomano (berto@fatamorgana.com)
Date: Sun Jul 22 2001 - 15:31:40 EST


Hi all,
Recently I have had a problem with Linux proxy arp feature (using with shaper
interface): when I machine starts up it was receiving a "IP conflits".
The problem is that Linux proxy_arp routine doesn't make difference between
real interface (i.e. eth0) and shaper interface (i.e. shaper0 which has been
attached to eth0).
I attach a first beta solution to the problem, which could be far from
optimal! (I use a "strncmp", cause I didn't found another method to know if
the device is a "shaper" device).

--- arp.c.orig Wed May 16 19:21:45 2001
+++ arp.c Sun Jul 22 19:31:20 2001
@@ -111,7 +111,7 @@
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
-
+#include <linux/if_shaper.h>
 
 
 /*
@@ -767,10 +767,17 @@
                        }
                        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) &&
+ (strncmp(rt->u.dst.dev->name,"shaper",6)==0) )
+ 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);
+ n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
                                if (n)

The patch declare a variable (flag to know if the interface is shaper-like),
investigate on private data of shaper device (where we can know what is the
attached interface) and set the flag. After we consider the "attached"
interface if flag is set.

I tested it under 2.4.6 on RedHat 7.1 with success (there is no more IP
conflit).
Hope it'll useful.

Best Regards
Roberto Arcomano


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Jul 23 2001 - 21:00:16 EST