The AP MLD may require the "link_id" to properly handle unexpected frames. For instance, if the AP MLD receives a data frame from a non-associated STA, it must send deauthentication to the link on which the STA is operating. Signed-off-by: Michael-CY Lee <michael-cy.lee@xxxxxxxxxxxx> Reviewed-by: Money Wang <money.wang@xxxxxxxxxxxx> --- src/ap/drv_callbacks.c | 1 + src/drivers/driver.h | 1 + src/drivers/driver_nl80211_event.c | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c index aebd52c0c..ab539765b 100644 --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c @@ -2654,6 +2654,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, hostapd_client_poll_ok(hapd, data->client_poll.addr); break; case EVENT_RX_FROM_UNKNOWN: + hapd = switch_link_hapd(hapd, data->rx_from_unknown.link_id); hostapd_rx_from_unknown_sta(hapd, data->rx_from_unknown.bssid, data->rx_from_unknown.addr, data->rx_from_unknown.wds); diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 0a0532353..afa5b50cd 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -6655,6 +6655,7 @@ union wpa_event_data { const u8 *bssid; const u8 *addr; int wds; + int link_id; } rx_from_unknown; /** diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c index bcf6ff895..a1bbc82e5 100644 --- a/src/drivers/driver_nl80211_event.c +++ b/src/drivers/driver_nl80211_event.c @@ -2788,6 +2788,8 @@ static void nl80211_spurious_frame(struct i802_bss *bss, struct nlattr **tb, event.rx_from_unknown.bssid = bss->addr; event.rx_from_unknown.addr = nla_data(tb[NL80211_ATTR_MAC]); event.rx_from_unknown.wds = wds; + event.rx_from_unknown.link_id = tb[NL80211_ATTR_MLO_LINK_ID] ? + nla_get_u8(tb[NL80211_ATTR_MLO_LINK_ID]) : -1; wpa_supplicant_event(drv->ctx, EVENT_RX_FROM_UNKNOWN, &event); } -- 2.25.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap