Changeset View
Changeset View
Standalone View
Standalone View
sys/net/if_bridge.c
Show First 20 Lines • Show All 919 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
static void | static void | ||||
bridge_set_ifcap(struct bridge_softc *sc, struct bridge_iflist *bif, int set) | bridge_set_ifcap(struct bridge_softc *sc, struct bridge_iflist *bif, int set) | ||||
{ | { | ||||
struct ifnet *ifp = bif->bif_ifp; | struct ifnet *ifp = bif->bif_ifp; | ||||
struct ifreq ifr; | struct ifreq ifr; | ||||
int error; | int error, mask, stuck; | ||||
BRIDGE_UNLOCK_ASSERT(sc); | BRIDGE_UNLOCK_ASSERT(sc); | ||||
bzero(&ifr, sizeof(ifr)); | bzero(&ifr, sizeof(ifr)); | ||||
ifr.ifr_reqcap = set; | ifr.ifr_reqcap = set; | ||||
if (ifp->if_capenable != set) { | if (ifp->if_capenable != set) { | ||||
error = (*ifp->if_ioctl)(ifp, SIOCSIFCAP, (caddr_t)&ifr); | error = (*ifp->if_ioctl)(ifp, SIOCSIFCAP, (caddr_t)&ifr); | ||||
if (error) | if (error) | ||||
if_printf(sc->sc_ifp, | if_printf(sc->sc_ifp, | ||||
"error setting capabilities on %s: %d\n", | "error setting capabilities on %s: %d\n", | ||||
ifp->if_xname, error); | ifp->if_xname, error); | ||||
if ((ifp->if_capenable & ~set) != 0) | mask = BRIDGE_IFCAPS_MASK | BRIDGE_IFCAPS_STRIP; | ||||
stuck = ifp->if_capenable & mask & ~set; | |||||
if (stuck != 0) | |||||
if_printf(sc->sc_ifp, | if_printf(sc->sc_ifp, | ||||
"can't disable some capabilities on %s: 0x%x\n", | "can't disable some capabilities on %s: 0x%x\n", | ||||
ifp->if_xname, ifp->if_capenable & ~set); | ifp->if_xname, stuck); | ||||
} | } | ||||
} | } | ||||
/* | /* | ||||
* bridge_lookup_member: | * bridge_lookup_member: | ||||
* | * | ||||
* Lookup a bridge member interface. | * Lookup a bridge member interface. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 2,658 Lines • Show Last 20 Lines |