Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Aug 2009 14:03:37 -0700
From:      Xin LI <delphij@delphij.net>
To:        Jack Vogel <jfvogel@gmail.com>
Cc:        Barney Cordoba <barney_cordoba@yahoo.com>, David Christensen <davidch@broadcom.com>, "d@delphij.net" <d@delphij.net>, "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, Julian Elischer <julian@elischer.org>, Jack F Vogel <jfv@freebsd.org>, yongari@FreeBSD.org
Subject:   [PATCH] Fix for e1000 (em/igb) NOARP issue [Was Re: em(4): sending ARP regardless of NOARP flag]
Message-ID:  <4A8B1729.8070503@delphij.net>
In-Reply-To: <2a41acea0908060905n69edf1dfkbf993d9f8a4edf37@mail.gmail.com>
References:  <5D267A3F22FD854F8F48B3D2B523819339EC3813D2@IRVEXCHCCR01.corp.ad.broadcom.com>	<692150.91493.qm@web63906.mail.re1.yahoo.com> <2a41acea0908060905n69edf1dfkbf993d9f8a4edf37@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------050902070402030906080103
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi, Jack,

I have looked into the code history and found that sys/dev/em/if_em.c,v
1.119 has introduced the arp_ifinit() call in order to fix the problem
that if_em won't send ARP when IP address is changed.

I think we can further improve it as attached, say, only do it when
IFF_NOARP is not set.  This should have no effect for usual
configuration but fix the problem when NOARP is the desired behavior.

Cheers,
- --
Xin LI <delphij@delphij.net>	http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkqLFykACgkQi+vbBBjt66CMFQCeOkESwsgDAbqe5PCtiMulaU1E
lIAAoIm0LDJ6qHuR8jyo7dXFi/9iYA22
=9E54
-----END PGP SIGNATURE-----

--------------050902070402030906080103
Content-Type: text/plain;
 name="e1000-noarp-fix.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="e1000-noarp-fix.diff"

Index: if_igb.c
===================================================================
--- if_igb.c	(revision 196363)
+++ if_igb.c	(working copy)
@@ -952,7 +952,8 @@ igb_ioctl(struct ifnet *ifp, u_long command, caddr
 				igb_init_locked(adapter);
 				IGB_CORE_UNLOCK(adapter);
 			}
-			arp_ifinit(ifp, ifa);
+			if (!(ifp->if_flags & IFF_NOARP))
+				arp_ifinit(ifp, ifa);
 		} else
 #endif
 			error = ether_ioctl(ifp, command, data);
Index: if_em.c
===================================================================
--- if_em.c	(revision 196363)
+++ if_em.c	(working copy)
@@ -1204,7 +1204,8 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_
 				em_init_locked(adapter);
 				EM_CORE_UNLOCK(adapter);
 			}
-			arp_ifinit(ifp, ifa);
+			if (!(ifp->if_flags & IFF_NOARP))
+				arp_ifinit(ifp, ifa);
 		} else
 #endif
 			error = ether_ioctl(ifp, command, data);

--------------050902070402030906080103--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A8B1729.8070503>