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 <delp...@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 <delp...@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);
>
>
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to