When using FT wildcard feature, the inter-AP protocol will send broadcast messages to discovery related AP. e.g. 12/6 16:24:43 FT: Send PMK-R1 pull request to remote R0KH address ff:ff:ff:ff:ff:ff 12/6 16:24:43 FT: Send out sequence number request to ff:ff:ff:ff:ff:ff If you have multiple interfaces/bss in a single hostapd instance, hostapd_wpa_auth_oui_iter() returns 1 after first interface was processed. Iteration in for_each_interface() will be stopped, since it gets a non-zero return value from hostapd_wpa_auth_oui_iter(). Even worse, the packet will not be sent to ethernet because for_each_interface() returns non-zero value. hostapd_wpa_auth_send_oui() will then return data_len immediately. To prevent this, hostapd_wpa_auth_oui_iter() should not return 1 after any successful transmission to other interfaces, if the dst_addr of packet is multicast. Signed-off-by: Jinglin Wang <bryanwang@xxxxxxxxxxxx> Signed-off-by: MinHong Wang <minhongw@xxxxxxxxxxxx> --- src/ap/wpa_auth_glue.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ap/wpa_auth_glue.c b/src/ap/wpa_auth_glue.c index 9d05c78f9..7061c2155 100644 --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c @@ -746,7 +746,11 @@ static int hostapd_wpa_auth_oui_iter(struct hostapd_iface *iface, void *ctx) hostapd_oui_deliver_later, hapd, NULL); - return 1; + /* If dst_addr is a multicast address, then we should not return + * any non-zero value here. Otherwise, the iteration of + * for_each_interface() will be stopped. */ + if (!is_multicast_ether_addr(idata->dst_addr)) + return 1; } return 0; -- 2.17.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap