mirror of
https://github.com/openwrt/openwrt.git
synced 2025-12-21 19:14:28 +04:00
wifi-scripts: fix broken match all case for wifi-vlan
When iface is omitted, wifi-vlan will apply to all interfaces.
However, netifd.set_vlan call is not successful as it assumes
that every wifi-vlan section corresponds to one VIF.
For this reason in the wifi-vlan case (cur_type == "vlan")
we create a composite key in the form `${vif.name}/${vlan.name}`
allowing the same vlan section to correspond to multiple VAPs.
`/` was decided as a delimiter as it is an invalid character
for a network interface name and UCI identifier; so it is
impossible for it to cause conflicts.
It was verified that the `ubus call network.wireless status`
works as expected with this change. Moreover, wifi-station
is not susceptible to this problem.
This also means that it is now possible for wifi-vlan
to support `list` iface similar to old shell-based wifi-scripts.
This will be done in a follow-up commit.
Fixes: 98435a37a7 ("wifi-scripts: iface should be optional in wifi-vlan definition")
Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/20977
Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
@@ -488,7 +488,11 @@ function wdev_set_data(wdev, vif, vlan, data)
|
|||||||
cur_type = "vlan";
|
cur_type = "vlan";
|
||||||
}
|
}
|
||||||
|
|
||||||
wdev.handler_data[cur.name] = {
|
let key = cur.name;
|
||||||
|
if (cur_type == "vlan")
|
||||||
|
key = vif.name + "/" + vlan.name;
|
||||||
|
|
||||||
|
wdev.handler_data[key] = {
|
||||||
...cur,
|
...cur,
|
||||||
...data,
|
...data,
|
||||||
type: cur_type,
|
type: cur_type,
|
||||||
@@ -545,9 +549,13 @@ function hotplug(name, add)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_status_data(wdev, vif)
|
function get_status_data(wdev, vif, parent_vif)
|
||||||
{
|
{
|
||||||
let hdata = wdev.handler_data[vif.name];
|
let key = vif.name;
|
||||||
|
if (parent_vif)
|
||||||
|
key = parent_vif.name + "/" + vif.name;
|
||||||
|
|
||||||
|
let hdata = wdev.handler_data[key];
|
||||||
let data = {
|
let data = {
|
||||||
section: vif.name,
|
section: vif.name,
|
||||||
config: vif.config
|
config: vif.config
|
||||||
@@ -561,7 +569,7 @@ function get_status_vlans(wdev, vif)
|
|||||||
{
|
{
|
||||||
let vlans = [];
|
let vlans = [];
|
||||||
for (let vlan in vif.vlan)
|
for (let vlan in vif.vlan)
|
||||||
push(vlans, get_status_data(wdev, vlan));
|
push(vlans, get_status_data(wdev, vlan, vif));
|
||||||
return vlans;
|
return vlans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user