hostapd: reload bss if a relevant ifindex changes
This can happen if the bridge or a stacked vlan device gets recreated. Ensure that hostapd sees the change and handles it gracefully. Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
cffc52bb9a
commit
12c1a56ec0
1 changed files with 24 additions and 1 deletions
|
@ -22,6 +22,14 @@ hostapd.data.file_fields = {
|
||||||
eap_sim_db: true,
|
eap_sim_db: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
hostapd.data.iface_fields = {
|
||||||
|
ft_iface: true,
|
||||||
|
upnp_iface: true,
|
||||||
|
snoop_iface: true,
|
||||||
|
bridge: true,
|
||||||
|
iapp_interface: true,
|
||||||
|
};
|
||||||
|
|
||||||
function iface_remove(cfg)
|
function iface_remove(cfg)
|
||||||
{
|
{
|
||||||
if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
|
if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
|
||||||
|
@ -324,9 +332,24 @@ function bss_remove_file_fields(config)
|
||||||
return new_cfg;
|
return new_cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bss_ifindex_list(config)
|
||||||
|
{
|
||||||
|
config = filter(config, (line) => !!hostapd.data.iface_fields[split(line, "=")[0]]);
|
||||||
|
|
||||||
|
return join(",", map(config, (line) => {
|
||||||
|
try {
|
||||||
|
let file = "/sys/class/net/" + split(line, "=")[1] + "/ifindex";
|
||||||
|
let val = trim(readfile(file));
|
||||||
|
return val;
|
||||||
|
} catch (e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
function bss_config_hash(config)
|
function bss_config_hash(config)
|
||||||
{
|
{
|
||||||
return hostapd.sha1(remove_file_fields(config) + "");
|
return hostapd.sha1(remove_file_fields(config) + bss_ifindex_list(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
function bss_find_existing(config, prev_config, prev_hash)
|
function bss_find_existing(config, prev_config, prev_hash)
|
||||||
|
|
Loading…
Reference in a new issue