> -----Original Message----- > From: Hostap <hostap-bounces@xxxxxxxxxxxxxxxxxxx> On Behalf Of Andrei > Otcheretianski > Sent: Thursday, February 16, 2023 4:38 AM > To: hostap@xxxxxxxxxxxxxxxxxxx > Cc: Andrei Otcheretianski <andrei.otcheretianski@xxxxxxxxx> > Subject: [PATCH 05/50] driver_nl80211: Provide link_id in EAPOL_RX and > RX_MGMT events > > Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@xxxxxxxxx> > --- > src/drivers/driver.h | 14 ++++++++++-- > src/drivers/driver_nl80211_event.c | 34 +++++++++++++++++++++++------- > 2 files changed, 38 insertions(+), 10 deletions(-) > > diff --git a/src/drivers/driver.h b/src/drivers/driver.h index > f2595b02a6..0f225929ab 100644 > --- a/src/drivers/driver.h > +++ b/src/drivers/driver.h > @@ -6111,6 +6111,12 @@ union wpa_event_data { > * ssi_signal - Signal strength in dBm (or 0 if not available) > */ > int ssi_signal; > + > + /** > + * link_id - MLO link on which the frame was received or -1 > for > + * non MLD. > + */ > + int link_id; > } rx_mgmt; > > /** > @@ -6211,6 +6217,7 @@ union wpa_event_data { > const u8 *data; > size_t data_len; > enum frame_encryption encrypted; > + int link_id; > } eapol_rx; > > /** > @@ -6565,12 +6572,14 @@ static inline void drv_event_eapol_rx(void *ctx, > const u8 *src, const u8 *data, > event.eapol_rx.data = data; > event.eapol_rx.data_len = data_len; > event.eapol_rx.encrypted = FRAME_ENCRYPTION_UNKNOWN; > + event.eapol_rx.link_id = -1; > wpa_supplicant_event(ctx, EVENT_EAPOL_RX, &event); } > > static inline void drv_event_eapol_rx2(void *ctx, const u8 *src, const u8 > *data, > - size_t data_len, > - enum frame_encryption encrypted) > + size_t data_len, > + enum frame_encryption encrypted, > + int link_id) > { > union wpa_event_data event; > os_memset(&event, 0, sizeof(event)); > @@ -6578,6 +6587,7 @@ static inline void drv_event_eapol_rx2(void *ctx, > const u8 *src, const u8 *data, > event.eapol_rx.data = data; > event.eapol_rx.data_len = data_len; > event.eapol_rx.encrypted = encrypted; > + event.eapol_rx.link_id = link_id; > wpa_supplicant_event(ctx, EVENT_EAPOL_RX, &event); } > > diff --git a/src/drivers/driver_nl80211_event.c > b/src/drivers/driver_nl80211_event.c > index 3469db1c7e..4b70c3fcb6 100644 > --- a/src/drivers/driver_nl80211_event.c > +++ b/src/drivers/driver_nl80211_event.c > @@ -1111,7 +1111,8 @@ static void mlme_timeout_event(struct > wpa_driver_nl80211_data *drv, > > static void mlme_event_mgmt(struct i802_bss *bss, > struct nlattr *freq, struct nlattr *sig, > - const u8 *frame, size_t len) > + const u8 *frame, size_t len, > + int link_id) > { > struct wpa_driver_nl80211_data *drv = bss->drv; > const struct ieee80211_mgmt *mgmt; > @@ -1149,6 +1150,8 @@ static void mlme_event_mgmt(struct i802_bss > *bss, > event.rx_mgmt.frame_len = len; > event.rx_mgmt.ssi_signal = ssi_signal; > event.rx_mgmt.drv_priv = bss; > + event.rx_mgmt.link_id = link_id; > + > wpa_supplicant_event(drv->ctx, EVENT_RX_MGMT, &event); } > > @@ -1403,12 +1406,14 @@ static void mlme_event(struct i802_bss *bss, > struct nlattr *addr, struct nlattr *timed_out, > struct nlattr *freq, struct nlattr *ack, > struct nlattr *cookie, struct nlattr *sig, > - struct nlattr *wmm, struct nlattr *req_ie) > + struct nlattr *wmm, struct nlattr *req_ie, > + struct nlattr *link) > { > struct wpa_driver_nl80211_data *drv = bss->drv; > u16 stype = 0, auth_type = 0; > const u8 *data; > size_t len; > + int link_id; > > if (timed_out && addr) { > mlme_timeout_event(drv, cmd, addr); > @@ -1422,6 +1427,11 @@ static void mlme_event(struct i802_bss *bss, > return; > } > > + if (link) > + link_id = nla_get_u8(link); > + else > + link_id = -1; > + > data = nla_data(frame); > len = nla_len(frame); > if (len < 4 + 2 * ETH_ALEN) { > @@ -1432,10 +1442,10 @@ static void mlme_event(struct i802_bss *bss, > return; > } > wpa_printf(MSG_MSGDUMP, "nl80211: MLME event %d (%s) on %s(" > MACSTR > - ") A1=" MACSTR " A2=" MACSTR, cmd, > + ") A1=" MACSTR " A2=" MACSTR " on link_id=%d", cmd, > nl80211_command_to_string(cmd), bss->ifname, > MAC2STR(bss->addr), MAC2STR(data + 4), > - MAC2STR(data + 4 + ETH_ALEN)); > + MAC2STR(data + 4 + ETH_ALEN), link_id); > > /* PASN Authentication frame can be received with a different source > MAC > * address. Allow NL80211_CMD_FRAME event with foreign > addresses also. > @@ -1489,7 +1499,7 @@ static void mlme_event(struct i802_bss *bss, > break; > case NL80211_CMD_FRAME: > mlme_event_mgmt(bss, freq, sig, nla_data(frame), > - nla_len(frame)); > + nla_len(frame), link_id); > break; > case NL80211_CMD_FRAME_TX_STATUS: > mlme_event_mgmt_tx_status(drv, cookie, nla_data(frame), > @@ -3269,6 +3279,7 @@ static void nl80211_control_port_frame(struct > wpa_driver_nl80211_data *drv, > u8 *src_addr; > u16 ethertype; > enum frame_encryption encrypted; > + int link_id; > > if (!tb[NL80211_ATTR_MAC] || > !tb[NL80211_ATTR_FRAME] || > @@ -3280,6 +3291,11 @@ static void nl80211_control_port_frame(struct > wpa_driver_nl80211_data *drv, > encrypted = > nla_get_flag(tb[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT]) ? > FRAME_NOT_ENCRYPTED : FRAME_ENCRYPTED; > > + if (tb[NL80211_ATTR_MLO_LINK_ID]) Is there any non upstreamed kernel change that sends link id in NL80211_CMD_CONTROL_PORT_FRAME? > + link_id = nla_get_u8(tb[NL80211_ATTR_MLO_LINK_ID]); _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap