diff options
author | Eric Joyner <erj@FreeBSD.org> | 2020-04-27 22:02:44 +0000 |
---|---|---|
committer | Eric Joyner <erj@FreeBSD.org> | 2020-04-27 22:02:44 +0000 |
commit | 45818bf1a0fae8b5b13def517953d4a3d9d19257 (patch) | |
tree | ca53cb84e479ce96d354ec032c672143b320160f /sys/net/iflib.c | |
parent | 02343a67c22dff0d190d34004d71570352b53e76 (diff) | |
download | src-45818bf1a0fae8b5b13def517953d4a3d9d19257.tar.gz src-45818bf1a0fae8b5b13def517953d4a3d9d19257.zip |
Notes
Diffstat (limited to 'sys/net/iflib.c')
-rw-r--r-- | sys/net/iflib.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c index 41f5a97eeeae..1c8c2f6e1521 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -4308,10 +4308,13 @@ iflib_vlan_register(void *arg, if_t ifp, uint16_t vtag) return; CTX_LOCK(ctx); + /* Driver may need all untagged packets to be flushed */ + if (IFDI_NEEDS_RESTART(ctx, IFLIB_RESTART_VLAN_CONFIG)) + iflib_stop(ctx); IFDI_VLAN_REGISTER(ctx, vtag); - /* Re-init to load the changes */ - if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER) - iflib_if_init_locked(ctx); + /* Re-init to load the changes, if required */ + if (IFDI_NEEDS_RESTART(ctx, IFLIB_RESTART_VLAN_CONFIG)) + iflib_init_locked(ctx); CTX_UNLOCK(ctx); } @@ -4327,10 +4330,13 @@ iflib_vlan_unregister(void *arg, if_t ifp, uint16_t vtag) return; CTX_LOCK(ctx); + /* Driver may need all tagged packets to be flushed */ + if (IFDI_NEEDS_RESTART(ctx, IFLIB_RESTART_VLAN_CONFIG)) + iflib_stop(ctx); IFDI_VLAN_UNREGISTER(ctx, vtag); - /* Re-init to load the changes */ - if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER) - iflib_if_init_locked(ctx); + /* Re-init to load the changes, if required */ + if (IFDI_NEEDS_RESTART(ctx, IFLIB_RESTART_VLAN_CONFIG)) + iflib_init_locked(ctx); CTX_UNLOCK(ctx); } |