Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys bridge: Register bridge_ifdetach to ether_ifdetach hook



details:   https://anonhg.NetBSD.org/src/rev/ec476a0c619e
branches:  trunk
changeset: 1023874:ec476a0c619e
user:      yamaguchi <yamaguchi%NetBSD.org@localhost>
date:      Thu Sep 30 03:57:48 2021 +0000

description:
bridge: Register bridge_ifdetach to ether_ifdetach hook

diffstat:

 sys/net/if_bridge.c                 |  22 ++++++++++++++++------
 sys/net/if_bridgevar.h              |   5 ++---
 sys/net/if_ethersubr.c              |   8 ++------
 sys/rump/librump/rumpnet/net_stub.c |   5 ++---
 4 files changed, 22 insertions(+), 18 deletions(-)

diffs (152 lines):

diff -r 3088c3b88fc4 -r ec476a0c619e sys/net/if_bridge.c
--- a/sys/net/if_bridge.c       Thu Sep 30 03:54:04 2021 +0000
+++ b/sys/net/if_bridge.c       Thu Sep 30 03:57:48 2021 +0000
@@ -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_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 @@
 
        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_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 @@
  *     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);
 }
diff -r 3088c3b88fc4 -r ec476a0c619e sys/net/if_bridgevar.h
--- a/sys/net/if_bridgevar.h    Thu Sep 30 03:54:04 2021 +0000
+++ b/sys/net/if_bridgevar.h    Thu Sep 30 03:57:48 2021 +0000
@@ -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 @@
        uint32_t                bif_flags;      /* member if flags */
        struct psref_target     bif_psref;
        void *                  *bif_linkstate_hook;
+       void *                  *bif_ifdetach_hook;
 };
 
 /*
@@ -334,8 +335,6 @@
 
 extern const uint8_t bstp_etheraddr[];
 
-void   bridge_ifdetach(struct ifnet *);
-
 int    bridge_output(struct ifnet *, struct mbuf *, const struct sockaddr *,
            const struct rtentry *);
 
diff -r 3088c3b88fc4 -r ec476a0c619e sys/net/if_ethersubr.c
--- a/sys/net/if_ethersubr.c    Thu Sep 30 03:54:04 2021 +0000
+++ b/sys/net/if_ethersubr.c    Thu Sep 30 03:57:48 2021 +0000
@@ -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 @@
        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)
diff -r 3088c3b88fc4 -r ec476a0c619e sys/rump/librump/rumpnet/net_stub.c
--- a/sys/rump/librump/rumpnet/net_stub.c       Thu Sep 30 03:54:04 2021 +0000
+++ b/sys/rump/librump/rumpnet/net_stub.c       Thu Sep 30 03:57:48 2021 +0000
@@ -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 @@
  */
 
 /* bridge */
-__weak_alias(bridge_ifdetach,rumpnet_stub);
 __weak_alias(bridge_output,rumpnet_stub);
 __weak_alias(bridge_calc_csum_flags,rumpnet_stub);
 



Home | Main Index | Thread Index | Old Index