diff mbox series

[PATCH-22.03] netifd: bridge: add support option for untagged

Message ID 1662690013-72816-1-git-send-email-lxliu@ikuai8.com
State New
Headers show
Series [PATCH-22.03] netifd: bridge: add support option for untagged | expand

Commit Message

LiXiong Liu Sept. 9, 2022, 2:20 a.m. UTC
Signed-off-by: LiXiong Liu <lxliu@ikuai8.com>
---
 .../patches/100-bridge-vlan-support-untagged.patch | 58 ++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 package/network/config/netifd/patches/100-bridge-vlan-support-untagged.patch
diff mbox series

Patch

diff --git a/package/network/config/netifd/patches/100-bridge-vlan-support-untagged.patch b/package/network/config/netifd/patches/100-bridge-vlan-support-untagged.patch
new file mode 100644
index 0000000..02485c0
--- /dev/null
+++ b/package/network/config/netifd/patches/100-bridge-vlan-support-untagged.patch
@@ -0,0 +1,58 @@ 
+Support setting untagged at br-lan
+
+--- a/bridge.c	2022-09-08 21:03:06.401331415 +0800
++++ b/bridge.c	2022-09-08 21:13:19.261304451 +0800
+@@ -230,10 +230,15 @@ bridge_set_member_vlan(struct bridge_mem
+ static void
+ bridge_set_local_vlan(struct bridge_state *bst, struct bridge_vlan *vlan, bool add)
+ {
++	unsigned int vflags = BRVLAN_F_SELF;
++
+ 	if (!vlan->local && add)
+ 		return;
+ 
+-	system_bridge_vlan(bst->dev.ifname, vlan->vid, add, BRVLAN_F_SELF);
++	if (vlan->untagged)
++		vflags |= (BRVLAN_F_PVID|BRVLAN_F_UNTAGGED);
++
++	system_bridge_vlan(bst->dev.ifname, vlan->vid, add, vflags);
+ }
+ 
+ static void
+--- a/config.c	2022-09-08 21:03:06.541331409 +0800
++++ b/config.c	2022-09-08 21:05:26.007372217 +0800
+@@ -311,6 +311,7 @@ config_parse_vlan(struct device *dev, st
+ 		BRVLAN_ATTR_LOCAL,
+ 		BRVLAN_ATTR_PORTS,
+ 		BRVLAN_ATTR_ALIAS,
++		BRVLAN_ATTR_UNTAG,
+ 		__BRVLAN_ATTR_MAX,
+ 	};
+ 	static const struct blobmsg_policy vlan_attrs[__BRVLAN_ATTR_MAX] = {
+@@ -318,6 +319,7 @@ config_parse_vlan(struct device *dev, st
+ 		[BRVLAN_ATTR_LOCAL] = { "local", BLOBMSG_TYPE_BOOL },
+ 		[BRVLAN_ATTR_PORTS] = { "ports", BLOBMSG_TYPE_ARRAY },
+ 		[BRVLAN_ATTR_ALIAS] = { "alias", BLOBMSG_TYPE_ARRAY },
++		[BRVLAN_ATTR_UNTAG] = { "untagged", BLOBMSG_TYPE_BOOL },
+ 	};
+ 	static const struct uci_blob_param_info vlan_attr_info[__BRVLAN_ATTR_MAX] = {
+ 		[BRVLAN_ATTR_PORTS] = { .type = BLOBMSG_TYPE_STRING },
+@@ -367,6 +369,8 @@ config_parse_vlan(struct device *dev, st
+ 	vlan->local = true;
+ 	if (tb[BRVLAN_ATTR_LOCAL])
+ 		vlan->local = blobmsg_get_bool(tb[BRVLAN_ATTR_LOCAL]);
++	if (tb[BRVLAN_ATTR_UNTAG])
++		vlan->untagged = blobmsg_get_bool(tb[BRVLAN_ATTR_UNTAG]);
+ 
+ 	vlan->n_ports = n_ports;
+ 	vlan->ports = port = (struct bridge_vlan_port *)&vlan[1];
+--- a/device.h	2022-09-08 21:03:06.401331415 +0800
++++ b/device.h	2022-09-08 21:03:14.833887415 +0800
+@@ -294,6 +294,7 @@ struct bridge_vlan {
+ 	uint16_t vid;
+ 	bool local;
+ 	bool pending;
++	bool untagged;
+ };
+ 
+ extern const struct uci_blob_param_list device_attr_list;