summaryrefslogtreecommitdiffstats
path: root/sys/net/if_vlan.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2009-12-29 13:35:18 +0000
committerjhb <jhb@FreeBSD.org>2009-12-29 13:35:18 +0000
commit3ce93dcb7c6607b76d019f9acff610d5389f2b5a (patch)
treefffe65b8e28fab3d296215d907de7cf2e4433879 /sys/net/if_vlan.c
parentaa28c3213861962a9da4732d118054f285c25df9 (diff)
downloadFreeBSD-src-3ce93dcb7c6607b76d019f9acff610d5389f2b5a.zip
FreeBSD-src-3ce93dcb7c6607b76d019f9acff610d5389f2b5a.tar.gz
Change vlan interfaces to cope more usefully with the parent interface being
renamed. Previously the vlan interfaces would lose their configuration as if the parent interface had been physically removed. Now vlan interfaces ignore rename events. - Add a new ifnet flag (IFF_RENAMING) that is set while an ifnet is being renamed. This flag can be checked in ifnet departure/arrival event handlers to treat rename events differently. - Change the ifnet departure event handler in the if_vlan(4) driver to ignore departure events due to a trunk interface being renamed. Reviewed by: brooks, rwatson MFC after: 1 week
Diffstat (limited to 'sys/net/if_vlan.c')
-rw-r--r--sys/net/if_vlan.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index bb906828..99f714e 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -466,7 +466,8 @@ vlan_setmulti(struct ifnet *ifp)
* A handler for network interface departure events.
* Track departure of trunks here so that we don't access invalid
* pointers or whatever if a trunk is ripped from under us, e.g.,
- * by ejecting its hot-plug card.
+ * by ejecting its hot-plug card. However, if an ifnet is simply
+ * being renamed, then there's no need to tear down the state.
*/
static void
vlan_ifdetach(void *arg __unused, struct ifnet *ifp)
@@ -481,6 +482,10 @@ vlan_ifdetach(void *arg __unused, struct ifnet *ifp)
if (ifp->if_vlantrunk == NULL)
return;
+ /* If the ifnet is just being renamed, don't do anything. */
+ if (ifp->if_flags & IFF_RENAMING)
+ return;
+
VLAN_LOCK();
/*
* OK, it's a trunk. Loop over and detach all vlan's on it.
OpenPOWER on IntegriCloud