diff options
author | Felix Fietkau <nbd@nbd.name> | 2021-10-21 11:28:35 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2021-10-21 11:28:38 +0200 |
commit | f78bdec2ed5f4c83d2c93f422c8bd21b68b02517 (patch) | |
tree | a7d5bd087671a11fad80f18a80337305ef5de292 /wireless.c | |
parent | c61a1d432b34babe230e49a82712608b07410fc3 (diff) | |
download | netifd-f78bdec2ed5f4c83d2c93f422c8bd21b68b02517.tar.gz |
wireless: fix handling vif attributes on reload with mode change
When switching from AP to station mode, some AP specific flags such as proxyarp
could become sticky and lead to hairpin being enabled on the sta interface.
Fix this by ensuring that vif fields are always properly rewritten
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'wireless.c')
-rw-r--r-- | wireless.c | 15 |
1 files changed, 3 insertions, 12 deletions
@@ -804,20 +804,13 @@ wireless_interface_init_config(struct wireless_interface *vif) vif->network = cur; cur = tb[VIF_ATTR_MODE]; - if (cur) - vif->ap_mode = !strcmp(blobmsg_get_string(cur), "ap"); - - if (!vif->ap_mode) - return; + vif->ap_mode = cur && !strcmp(blobmsg_get_string(cur), "ap"); cur = tb[VIF_ATTR_ISOLATE]; - if (cur) - vif->isolate = blobmsg_get_bool(cur); + vif->isolate = vif->ap_mode && cur && blobmsg_get_bool(cur); cur = tb[VIF_ATTR_PROXYARP]; - if (cur) - vif->proxyarp = blobmsg_get_bool(cur); - + vif->proxyarp = vif->ap_mode && cur && blobmsg_get_bool(cur); } /* vlist update call for wireless interface list */ @@ -846,8 +839,6 @@ vif_update(struct vlist_tree *tree, struct vlist_node *node_new, wireless_interface_handle_link(vif_old, NULL, false); free(vif_old->config); vif_old->config = blob_memdup(vif_new->config); - vif_old->isolate = vif_new->isolate; - vif_old->ap_mode = vif_new->ap_mode; wireless_interface_init_config(vif_old); free(vif_new); } else if (vif_new) { |