--- linux-2.4.6.orig/net/ipv4/arp.c Wed May 16 19:21:45 2001 +++ linux-2.4.6/net/ipv4/arp.c Thu Jul 26 02:00:35 2001 @@ -111,6 +111,7 @@ #include #include +#include @@ -767,8 +768,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) && + (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); if (n)