public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] netpoll early ARP handling
@ 2004-04-10 20:33 Matt Mackall
  2004-04-13 18:08 ` Jeff Garzik
  0 siblings, 1 reply; 2+ messages in thread
From: Matt Mackall @ 2004-04-10 20:33 UTC (permalink / raw)
  To: Andrew Morton, linux-kernel; +Cc: Stelian Pop, Jeff Garzik

Handle ARP requests while device is trapped before in_dev is
initialized using netpoll config. Allows early kgdboe usage.

>From Stelian Pop <stelian@popies.net>

%patch
Index: mm/net/core/netpoll.c
===================================================================
--- mm.orig/net/core/netpoll.c	2004-04-10 15:06:57.000000000 -0500
+++ mm/net/core/netpoll.c	2004-04-10 15:15:25.000000000 -0500
@@ -231,9 +231,8 @@
 
 static void arp_reply(struct sk_buff *skb)
 {
-	struct in_device *in_dev = (struct in_device *) skb->dev->ip_ptr;
 	struct arphdr *arp;
-	unsigned char *arp_ptr, *sha, *tha;
+	unsigned char *arp_ptr;
 	int size, type = ARPOP_REPLY, ptype = ETH_P_ARP;
 	u32 sip, tip;
 	struct sk_buff *send_skb;
@@ -253,7 +252,7 @@
 	if (!np) return;
 
 	/* No arp on this interface */
-	if (!in_dev || skb->dev->flags & IFF_NOARP)
+	if (skb->dev->flags & IFF_NOARP)
 		return;
 
 	if (!pskb_may_pull(skb, (sizeof(struct arphdr) +
@@ -270,21 +269,15 @@
 	    arp->ar_op != htons(ARPOP_REQUEST))
 		return;
 
-	arp_ptr= (unsigned char *)(arp+1);
-	sha = arp_ptr;
-	arp_ptr += skb->dev->addr_len;
+	arp_ptr = (unsigned char *)(arp+1) + skb->dev->addr_len;
 	memcpy(&sip, arp_ptr, 4);
-	arp_ptr += 4;
-	tha = arp_ptr;
-	arp_ptr += skb->dev->addr_len;
+	arp_ptr += 4 + skb->dev->addr_len;
 	memcpy(&tip, arp_ptr, 4);
 
 	/* Should we ignore arp? */
-	if (tip != in_dev->ifa_list->ifa_address ||
-	    LOOPBACK(tip) || MULTICAST(tip))
+	if (tip != htonl(np->local_ip) || LOOPBACK(tip) || MULTICAST(tip))
 		return;
 
-
 	size = sizeof(struct arphdr) + 2 * (skb->dev->addr_len + 4);
 	send_skb = find_skb(np, size + LL_RESERVED_SPACE(np->dev),
 			    LL_RESERVED_SPACE(np->dev));
@@ -325,7 +318,7 @@
 	arp_ptr += np->dev->addr_len;
 	memcpy(arp_ptr, &tip, 4);
 	arp_ptr += 4;
-	memcpy(arp_ptr, np->local_mac, np->dev->addr_len);
+	memcpy(arp_ptr, np->remote_mac, np->dev->addr_len);
 	arp_ptr += np->dev->addr_len;
 	memcpy(arp_ptr, &sip, 4);
 

%diffstat
 netpoll.c |   19 ++++++-------------
 1 files changed, 6 insertions(+), 13 deletions(-)



-- 
Matt Mackall : http://www.selenic.com : Linux development and consulting

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] netpoll early ARP handling
  2004-04-10 20:33 [PATCH] netpoll early ARP handling Matt Mackall
@ 2004-04-13 18:08 ` Jeff Garzik
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2004-04-13 18:08 UTC (permalink / raw)
  To: Matt Mackall; +Cc: Andrew Morton, linux-kernel, Stelian Pop

applied



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-04-13 18:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-04-10 20:33 [PATCH] netpoll early ARP handling Matt Mackall
2004-04-13 18:08 ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox