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

Jack Vogel jfvogel at gmail.com
Tue Aug 18 21:34:12 UTC 2009


Yes, this would work, although talking to Sam about this, he said the whole
reason for this hack in the driver was some other brokenness in the if code,
and he said he was going to fix that, just not before 8 RELEASE.

So, I would rather fix it upstream as it where, and then take this hack
out of the code altogether instead of refining the hack :)

Just my .02

Jack


On Tue, Aug 18, 2009 at 2:03 PM, Xin LI <delphij at delphij.net> wrote:

> -----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-----
>
> 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