Module Name: src Committed By: christos Date: Tue Nov 24 20:13:12 UTC 2015
Modified Files: src/sys/dev/pci: if_alc.c Log Message: kern/50456: Freddy DISSAUX: Fix packets lost with tcpdump. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/if_alc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_alc.c diff -u src/sys/dev/pci/if_alc.c:1.15 src/sys/dev/pci/if_alc.c:1.16 --- src/sys/dev/pci/if_alc.c:1.15 Tue Sep 8 04:24:42 2015 +++ src/sys/dev/pci/if_alc.c Tue Nov 24 15:13:12 2015 @@ -2034,11 +2034,42 @@ static int alc_ioctl(struct ifnet *ifp, u_long cmd, void *data) { struct alc_softc *sc = ifp->if_softc; + struct mii_data *mii = &sc->sc_miibus; + struct ifreq *ifr = (struct ifreq *)data; int s, error = 0; s = splnet(); error = ether_ioctl(ifp, cmd, data); + switch (cmd) { + case SIOCSIFADDR: + ifp->if_flags |= IFF_UP; + if (!(ifp->if_flags & IFF_RUNNING)) + alc_init(ifp); + break; + + case SIOCSIFFLAGS: + if (ifp->if_flags & IFF_UP) { + if (ifp->if_flags & IFF_RUNNING) + error = ENETRESET; + else + alc_init(ifp); + } else { + if (ifp->if_flags & IFF_RUNNING) + alc_stop(ifp, 0); + } + break; + + case SIOCSIFMEDIA: + case SIOCGIFMEDIA: + error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, cmd); + break; + + default: + error = ether_ioctl(ifp, cmd, data); + break; + } + if (error == ENETRESET) { if (ifp->if_flags & IFF_RUNNING) alc_iff(sc);