patch-2.1.25 linux/net/ipv4/arp.c

Next file: linux/net/ipv4/fib.c
Previous file: linux/net/ipv4/af_inet.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.24/linux/net/ipv4/arp.c linux/net/ipv4/arp.c
@@ -1552,7 +1552,7 @@
 	}
 
 	start_bh_atomic();
-	arp_update(sip, sha, dev, 0, !RT_LOCALADDR(rt->rt_flags));
+	arp_update(sip, sha, dev, 0, !RT_LOCALADDR(rt->rt_flags) && dev->type != ARPHRD_METRICOM);
 	end_bh_atomic();
 	kfree_skb(skb, FREE_READ);
 	return 0;
@@ -1617,6 +1617,13 @@
 		if (!dev)
 			dev = rt->u.dst.dev;
 		if (rt->rt_flags&(RTF_LOCAL|RTF_BROADCAST|RTF_MULTICAST|RTCF_NAT)) {
+			if (rt->rt_flags&RTF_BROADCAST &&
+			    dev->type == ARPHRD_METRICOM &&
+			    r->arp_ha.sa_family == ARPHRD_METRICOM) {
+				memcpy(dev->broadcast, r->arp_ha.sa_data, dev->addr_len);
+				ip_rt_put(rt);
+				return 0;
+			}
 			ip_rt_put(rt);
 			return -EINVAL;
 		}

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov