From 6487a9b62e31c253392f5fe2985da11b8225f99e Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 21 Jul 2023 18:33:34 +0200 Subject: [PATCH] Interfaces: Other Types: VLAN - allow manual proto selection, closes https://github.com/opnsense/core/issues/6679 --- src/etc/inc/interfaces.inc | 4 +++- .../controllers/OPNsense/Interfaces/forms/dialogVlan.xml | 9 +++++++++ src/opnsense/mvc/app/models/OPNsense/Interfaces/Vlan.xml | 8 ++++++++ src/opnsense/scripts/interfaces/reconfigure_vlans.php | 4 +++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 9a12ba7a4..3c7fd884d 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -161,7 +161,9 @@ function interfaces_vlan_configure($verbose = false) } } foreach ($config['vlans']['vlan'] as $vlan) { - $vlan['proto'] = empty($all_parents[$vlan['vlanif']]) ? '802.1q' : '802.1ad'; + if (empty($vlan['proto'])) { + $vlan['proto'] = empty($all_parents[$vlan['vlanif']]) ? '802.1q' : '802.1ad'; + } _interfaces_vlan_configure($vlan); } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms/dialogVlan.xml b/src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms/dialogVlan.xml index 9ca7965cd..a7a0ac2cf 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms/dialogVlan.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms/dialogVlan.xml @@ -27,6 +27,15 @@ dropdown 802.1Q VLAN PCP (priority code point) + + vlan.proto + dropdown + true + + Enforce protocol selection, 802.1Qis the default for vlan interfaces, + 802.1ad is used when the parent is a vlan (QinQ) + + vlan.descr diff --git a/src/opnsense/mvc/app/models/OPNsense/Interfaces/Vlan.xml b/src/opnsense/mvc/app/models/OPNsense/Interfaces/Vlan.xml index 28661af88..f4716a13c 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Interfaces/Vlan.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Interfaces/Vlan.xml @@ -42,6 +42,14 @@ Network Control (7, highest) + + N + Auto + + 802.1Q + 802.1ad + + N diff --git a/src/opnsense/scripts/interfaces/reconfigure_vlans.php b/src/opnsense/scripts/interfaces/reconfigure_vlans.php index 8af4efffc..6b50fb2c3 100755 --- a/src/opnsense/scripts/interfaces/reconfigure_vlans.php +++ b/src/opnsense/scripts/interfaces/reconfigure_vlans.php @@ -74,7 +74,9 @@ foreach (legacy_interfaces_details() as $ifname => $ifdetails) { legacy_interface_destroy($ifname); } else { $vlan = $all_vlans[$ifname]; - $vlan['proto'] = empty($all_parents[$vlan['vlanif']]) ? '802.1q' : '802.1ad'; + if (empty($vlan['proto'])) { + $vlan['proto'] = empty($all_parents[$vlan['vlanif']]) ? '802.1q' : '802.1ad'; + } $cvlan = $ifdetails['vlan']; if ($vlan['tag'] != $cvlan['tag'] || $vlan['if'] != $cvlan['parent']) { /* option 2: changed vlan, unlink and relink */