[PATCH] Fix for e1000 (em/igb) NOARP issue [Was Re: em(4): sending ARP regardless of NOARP flag]

Xin LI delphij at delphij.net
Tue Aug 18 21:05:25 UTC 2009


-----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 at 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-----
-------------- next part --------------
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);


More information about the freebsd-net mailing list