Module Name: src Committed By: yamaguchi Date: Thu Sep 30 03:57:48 UTC 2021
Modified Files: src/sys/net: if_bridge.c if_bridgevar.h if_ethersubr.c src/sys/rump/librump/rumpnet: net_stub.c Log Message: bridge: Register bridge_ifdetach to ether_ifdetach hook To generate a diff of this commit: cvs rdiff -u -r1.182 -r1.183 src/sys/net/if_bridge.c cvs rdiff -u -r1.36 -r1.37 src/sys/net/if_bridgevar.h cvs rdiff -u -r1.297 -r1.298 src/sys/net/if_ethersubr.c cvs rdiff -u -r1.46 -r1.47 src/sys/rump/librump/rumpnet/net_stub.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/net/if_bridge.c diff -u src/sys/net/if_bridge.c:1.182 src/sys/net/if_bridge.c:1.183 --- src/sys/net/if_bridge.c:1.182 Thu Sep 30 03:35:55 2021 +++ src/sys/net/if_bridge.c Thu Sep 30 03:57:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bridge.c,v 1.182 2021/09/30 03:35:55 yamaguchi Exp $ */ +/* $NetBSD: if_bridge.c,v 1.183 2021/09/30 03:57:48 yamaguchi Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -80,7 +80,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_bridge.c,v 1.182 2021/09/30 03:35:55 yamaguchi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bridge.c,v 1.183 2021/09/30 03:57:48 yamaguchi Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -243,6 +243,7 @@ static int bridge_ioctl(struct ifnet *, static int bridge_init(struct ifnet *); static void bridge_stop(struct ifnet *, int); static void bridge_start(struct ifnet *); +static void bridge_ifdetach(void *); static void bridge_input(struct ifnet *, struct mbuf *); static void bridge_forward(struct bridge_softc *, struct mbuf *); @@ -741,6 +742,8 @@ bridge_delete_member(struct bridge_softc if_linkstate_change_disestablish(ifs, bif->bif_linkstate_hook, BRIDGE_LOCK_OBJ(sc)); + ether_ifdetachhook_disestablish(ifs, + bif->bif_ifdetach_hook, BRIDGE_LOCK_OBJ(sc)); BRIDGE_UNLOCK(sc); @@ -908,6 +911,9 @@ bridge_ioctl_add(struct bridge_softc *sc BRIDGE_UNLOCK(sc); + bif->bif_ifdetach_hook = ether_ifdetachhook_establish(ifs, + bridge_ifdetach, (void *)ifs); + bridge_calc_csum_flags(sc); bridge_calc_link_state(sc); @@ -1400,17 +1406,21 @@ bridge_ioctl_sifcost(struct bridge_softc * Detach an interface from a bridge. Called when a member * interface is detaching. */ -void -bridge_ifdetach(struct ifnet *ifp) +static void +bridge_ifdetach(void *xifs) { - struct bridge_softc *sc = ifp->if_bridge; + struct ifnet *ifs; + struct bridge_softc *sc; struct ifbreq breq; + ifs = (struct ifnet *)xifs; + sc = ifs->if_bridge; + /* ioctl_lock should prevent this from happening */ KASSERT(sc != NULL); memset(&breq, 0, sizeof(breq)); - strlcpy(breq.ifbr_ifsname, ifp->if_xname, sizeof(breq.ifbr_ifsname)); + strlcpy(breq.ifbr_ifsname, ifs->if_xname, sizeof(breq.ifbr_ifsname)); (void) bridge_ioctl_del(sc, &breq); } Index: src/sys/net/if_bridgevar.h diff -u src/sys/net/if_bridgevar.h:1.36 src/sys/net/if_bridgevar.h:1.37 --- src/sys/net/if_bridgevar.h:1.36 Thu Sep 30 03:35:55 2021 +++ src/sys/net/if_bridgevar.h Thu Sep 30 03:57:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bridgevar.h,v 1.36 2021/09/30 03:35:55 yamaguchi Exp $ */ +/* $NetBSD: if_bridgevar.h,v 1.37 2021/09/30 03:57:48 yamaguchi Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -270,6 +270,7 @@ struct bridge_iflist { uint32_t bif_flags; /* member if flags */ struct psref_target bif_psref; void * *bif_linkstate_hook; + void * *bif_ifdetach_hook; }; /* @@ -334,8 +335,6 @@ struct bridge_softc { extern const uint8_t bstp_etheraddr[]; -void bridge_ifdetach(struct ifnet *); - int bridge_output(struct ifnet *, struct mbuf *, const struct sockaddr *, const struct rtentry *); Index: src/sys/net/if_ethersubr.c diff -u src/sys/net/if_ethersubr.c:1.297 src/sys/net/if_ethersubr.c:1.298 --- src/sys/net/if_ethersubr.c:1.297 Thu Sep 30 03:54:04 2021 +++ src/sys/net/if_ethersubr.c Thu Sep 30 03:57:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ethersubr.c,v 1.297 2021/09/30 03:54:04 yamaguchi Exp $ */ +/* $NetBSD: if_ethersubr.c,v 1.298 2021/09/30 03:57:48 yamaguchi Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.297 2021/09/30 03:54:04 yamaguchi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.298 2021/09/30 03:57:48 yamaguchi Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1066,10 +1066,6 @@ ether_ifdetach(struct ifnet *ifp) KASSERT(!simplehook_has_hooks(ec->ec_ifdetach_hooks)); simplehook_destroy(ec->ec_ifdetach_hooks); -#if NBRIDGE > 0 - if (ifp->if_bridge) - bridge_ifdetach(ifp); -#endif bpf_detach(ifp); #if NVLAN > 0 if (ec->ec_nvlans) Index: src/sys/rump/librump/rumpnet/net_stub.c diff -u src/sys/rump/librump/rumpnet/net_stub.c:1.46 src/sys/rump/librump/rumpnet/net_stub.c:1.47 --- src/sys/rump/librump/rumpnet/net_stub.c:1.46 Thu Sep 30 03:47:28 2021 +++ src/sys/rump/librump/rumpnet/net_stub.c Thu Sep 30 03:57:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: net_stub.c,v 1.46 2021/09/30 03:47:28 yamaguchi Exp $ */ +/* $NetBSD: net_stub.c,v 1.47 2021/09/30 03:57:48 yamaguchi Exp $ */ /* * Copyright (c) 2008 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: net_stub.c,v 1.46 2021/09/30 03:47:28 yamaguchi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: net_stub.c,v 1.47 2021/09/30 03:57:48 yamaguchi Exp $"); #include <sys/mutex.h> #include <sys/param.h> @@ -59,7 +59,6 @@ rumpnet_stub(void) */ /* bridge */ -__weak_alias(bridge_ifdetach,rumpnet_stub); __weak_alias(bridge_output,rumpnet_stub); __weak_alias(bridge_calc_csum_flags,rumpnet_stub);