hostapd: let netifd set bridge port attributes for snooping
authorFelix Fietkau <nbd@nbd.name>
Wed, 1 Sep 2021 17:12:27 +0000 (19:12 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 23 Nov 2021 17:30:04 +0000 (18:30 +0100)
Avoids race conditions on bridge member add/remove

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry-picked from commit 17d19a7d4398789ae8da3daf8e0db167d58b0782)

package/network/services/hostapd/patches/740-snoop_iface.patch

index 722d1e713ab2b00876144e22a00800ca9cbde1f3..8d928f8505594309adad476ba7814f88610778b0 100644 (file)
  
 --- a/src/ap/x_snoop.c
 +++ b/src/ap/x_snoop.c
-@@ -71,8 +71,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
+@@ -31,14 +31,16 @@ int x_snoop_init(struct hostapd_data *ha
+               return -1;
+       }
+-      if (hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_HAIRPIN_MODE,
++      if (!conf->snoop_iface[0] &&
++          hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_HAIRPIN_MODE,
+                                        1)) {
+               wpa_printf(MSG_DEBUG,
+                          "x_snoop: Failed to enable hairpin_mode on the bridge port");
+               return -1;
+       }
+-      if (hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_PROXYARP, 1)) {
++      if (!conf->snoop_iface[0] &&
++          hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_PROXYARP, 1)) {
+               wpa_printf(MSG_DEBUG,
+                          "x_snoop: Failed to enable proxyarp on the bridge port");
+               return -1;
+@@ -52,7 +54,8 @@ int x_snoop_init(struct hostapd_data *ha
+       }
+ #ifdef CONFIG_IPV6
+-      if (hostapd_drv_br_set_net_param(hapd, DRV_BR_MULTICAST_SNOOPING, 1)) {
++      if (!conf->snoop_iface[0] &&
++          hostapd_drv_br_set_net_param(hapd, DRV_BR_MULTICAST_SNOOPING, 1)) {
+               wpa_printf(MSG_DEBUG,
+                          "x_snoop: Failed to enable multicast snooping on the bridge");
+               return -1;
+@@ -71,8 +74,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
  {
        struct hostapd_bss_config *conf = hapd->conf;
        struct l2_packet_data *l2;