public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Matt Mackall <mpm@selenic.com>
To: Andrew Morton <akpm@osdl.org>,
	linux-kernel <linux-kernel@vger.kernel.org>
Cc: Stelian Pop <stelian@popies.net>, Jeff Garzik <jgarzik@pobox.com>
Subject: [PATCH] netpoll early ARP handling
Date: Sat, 10 Apr 2004 15:33:02 -0500	[thread overview]
Message-ID: <20040410203302.GR6248@waste.org> (raw)

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

             reply	other threads:[~2004-04-10 20:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-10 20:33 Matt Mackall [this message]
2004-04-13 18:08 ` [PATCH] netpoll early ARP handling Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040410203302.GR6248@waste.org \
    --to=mpm@selenic.com \
    --cc=akpm@osdl.org \
    --cc=jgarzik@pobox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stelian@popies.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox