From 8dffa0ccb1fd13260401c0cfc5d11b640c838f5b Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Mon, 22 May 2023 22:33:31 +0300 Subject: [PATCH] AP: MLO: Retrieve EML and MLD capabilities from driver Add a new driver API get_mld_capab() and and use it to fetch MLD and EML capabilities. Signed-off-by: Benjamin Berg --- hostapd/main.c | 2 ++ src/ap/ap_drv_ops.c | 13 +++++++++++++ src/ap/ap_drv_ops.h | 1 + src/ap/hostapd.h | 2 ++ src/drivers/driver.h | 11 +++++++++++ 5 files changed, 29 insertions(+) diff --git a/hostapd/main.c b/hostapd/main.c index ce2df81c4..fc5b51a17 100644 --- a/hostapd/main.c +++ b/hostapd/main.c @@ -235,6 +235,8 @@ static int hostapd_driver_init(struct hostapd_iface *iface) */ hostapd_get_ext_capa(iface); + hostapd_get_mld_capa(iface); + triggs = wpa_get_wowlan_triggers(conf->wowlan_triggers, &capa); if (triggs && hapd->driver->set_wowlan) { if (hapd->driver->set_wowlan(hapd->drv_priv, triggs)) diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c index 844896e8b..46c989a85 100644 --- a/src/ap/ap_drv_ops.c +++ b/src/ap/ap_drv_ops.c @@ -941,6 +941,19 @@ void hostapd_get_ext_capa(struct hostapd_iface *iface) } +void hostapd_get_mld_capa(struct hostapd_iface *iface) +{ + struct hostapd_data *hapd = iface->bss[0]; + + if (!hapd->driver || !hapd->driver->get_mld_capab) + return; + + hapd->driver->get_mld_capab(hapd->drv_priv, WPA_IF_AP_BSS, + &iface->mld_eml_capa, + &iface->mld_mld_capa); +} + + /** * hostapd_drv_do_acs - Start automatic channel selection * @hapd: BSS data for the device initiating ACS diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h index 023cbf1f8..866440027 100644 --- a/src/ap/ap_drv_ops.h +++ b/src/ap/ap_drv_ops.h @@ -155,6 +155,7 @@ int hostapd_drv_set_qos_map(struct hostapd_data *hapd, const u8 *qos_map_set, u8 qos_map_set_len); void hostapd_get_ext_capa(struct hostapd_iface *iface); +void hostapd_get_mld_capa(struct hostapd_iface *iface); void hostapd_get_hw_mode_any_channels(struct hostapd_data *hapd, struct hostapd_hw_modes *mode, diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index 0dd043da8..bcb78aff3 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -542,6 +542,8 @@ struct hostapd_iface { const u8 *extended_capa, *extended_capa_mask; unsigned int extended_capa_len; + u16 mld_eml_capa, mld_mld_capa; + unsigned int drv_max_acl_mac_addrs; struct hostapd_hw_modes *hw_features; diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 12371a7d8..529826b16 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -4854,6 +4854,17 @@ struct wpa_driver_ops { const u8 **ext_capab, const u8 **ext_capab_mask, unsigned int *ext_capab_len); + /** + * get_mld_capab - Get MLD capabilities for the specified interface + * @priv: Private driver interface data + * @type: Interface type for which to get MLD capabilities + * @eml_capa: EML capabilities + * @mld_capa_and_ops: MLD Capabilities and Operations + * Returns: 0 on success or -1 on failure + */ + int (*get_mld_capab)(void *priv, enum wpa_driver_if_type type, + u16 *eml_capa, u16 *mld_capa_and_ops); + /** * p2p_lo_start - Start offloading P2P listen to device * @priv: Private driver interface data