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>