if_vlan: allow vlan and vlanproto to be changed
It's currently not possible to change the vlan ID or vlan protocol (i.e. 802.1q vs. 802.1ad) without de-configuring the interface (i.e. ifconfig vlanX -vlandev). Add a specific flow for this, allowing both the protocol and id (but not parent interface) to be changed without going through the '-vlandev' step. Reviewed by: glebius Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D35846
This commit is contained in:
parent
000321bab7
commit
663f556b03
@ -1538,8 +1538,24 @@ vlan_config(struct ifvlan *ifv, struct ifnet *p, uint16_t vid,
|
||||
*/
|
||||
if (vid == 0 || vid == 0xFFF || (vid & ~EVL_VLID_MASK))
|
||||
return (EINVAL);
|
||||
if (ifv->ifv_trunk)
|
||||
return (EBUSY);
|
||||
if (ifv->ifv_trunk) {
|
||||
trunk = ifv->ifv_trunk;
|
||||
if (trunk->parent != p)
|
||||
return (EBUSY);
|
||||
|
||||
VLAN_XLOCK();
|
||||
|
||||
ifv->ifv_proto = proto;
|
||||
|
||||
if (ifv->ifv_vid != vid) {
|
||||
/* Re-hash */
|
||||
vlan_remhash(trunk, ifv);
|
||||
ifv->ifv_vid = vid;
|
||||
error = vlan_inshash(trunk, ifv);
|
||||
}
|
||||
/* Will unlock */
|
||||
goto done;
|
||||
}
|
||||
|
||||
VLAN_XLOCK();
|
||||
if (p->if_vlantrunk == NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user