diff mbox series

[PATCH-22.03] netifd: fix bridge setting vlan bug for wireless devices

Message ID 1663042521-122457-1-git-send-email-lxliu@ikuai8.com
State New
Headers show
Series [PATCH-22.03] netifd: fix bridge setting vlan bug for wireless devices | expand

Commit Message

LiXiong Liu Sept. 13, 2022, 4:15 a.m. UTC
When netifd processes device wlanX,
device wlanX may not exist,
or device wlanX has been in bridge BR-LAN in advance,
which will result in bridge addition failure.

A way to reproduce the problem:

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'
	list ports 'lan4'
	list ports 'lan5'
	list ports 'wlan0'
	list ports 'wlan0-1'
	list ports 'wlan1'
	list ports 'wlan1-1'

config bridge-vlan
	option device 'br-lan'
	option untagged '1'
	option local '1'
	option vlan '4094'
	list ports 'lan4'
	list ports 'lan5'

config bridge-vlan
	option device 'br-lan'
	option vlan '10'
	list ports 'lan1:u*'
	list ports 'lan2:u*'
	list ports 'wlan1:u*'
	list ports 'wlan1-1:u*'
	list ports 'lan5:t'

config bridge-vlan
	option device 'br-lan'
	option vlan '200'
	list ports 'wlan0:u*'
	list ports 'wlan0-1:u*'
	list ports 'lan3:u*'
	list ports 'lan5:t'

root@OpenWrt:/# bridge vlan
port		vlan-id
lan1		10 PVID Egress Untagged
......
wlan0		200 PVID Egress Untagged
wlan1		10 PVID Egress Untagged
wlan0-1		200 PVID Egress Untagged
wlan1-1		10 PVID Egress Untagged

root@OpenWrt:/# wifi down ; sleep 10 ; wifi
root@OpenWrt:/# bridge vlan
port		vlan-id
lan1		10 PVID Egress Untagged
......
wlan0		1 PVID Egress Untagged
wlan1		1 PVID Egress Untagged
wlan0-1		200 PVID Egress Untagged

Signed-off-by: LiXiong Liu <lxliu@ikuai8.com>
---
 bridge.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/bridge.c b/bridge.c
index 7e61b9d..9f769ef 100644
--- a/bridge.c
+++ b/bridge.c
@@ -415,9 +415,7 @@  bridge_enable_member(struct bridge_member *bm)
 		bm->dev.dev->settings.flags |= DEV_OPT_IPV6;
 	}
 
-	ret = device_claim(&bm->dev);
-	if (ret < 0)
-		goto error;
+	device_claim(&bm->dev);
 
 	dev = bm->dev.dev;
 	if (dev->settings.auth && !dev->auth_status)
@@ -429,7 +427,6 @@  bridge_enable_member(struct bridge_member *bm)
 	ret = system_bridge_addif(&bst->dev, bm->dev.dev);
 	if (ret < 0) {
 		D(DEVICE, "Bridge device %s could not be added\n", bm->dev.dev->ifname);
-		goto error;
 	}
 
 	bm->active = true;