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

Reply via email to