Retrieve driver capabilities for maximum number of interfaces for MBSSID and maximum allowed profile periodicity for enhanced MBSSID advertisements. Signed-off-by: Aloka Dixit <quic_alokad@xxxxxxxxxxx> --- hostapd/main.c | 3 +++ src/ap/hostapd.h | 5 +++++ src/drivers/driver.h | 5 +++++ src/drivers/driver_nl80211_capa.c | 27 +++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/hostapd/main.c b/hostapd/main.c index a6268ad37afb..ce2df81c4a86 100644 --- a/hostapd/main.c +++ b/hostapd/main.c @@ -241,6 +241,9 @@ static int hostapd_driver_init(struct hostapd_iface *iface) wpa_printf(MSG_ERROR, "set_wowlan failed"); } os_free(triggs); + + iface->mbssid_max_interfaces = capa.mbssid_max_interfaces; + iface->ema_max_periodicity = capa.ema_max_periodicity; } return 0; diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index 2a2533ff647f..49036b0f56a6 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -643,6 +643,11 @@ struct hostapd_iface { /* Previous WMM element information */ struct hostapd_wmm_ac_params prev_wmm[WMM_AC_NUM]; + /* Maximum number of interfaces supported for MBSSID advertisements */ + u8 mbssid_max_interfaces; + /* Maximum profile periodicity for enhanced MBSSID advertisements */ + u8 ema_max_periodicity; + int (*enable_iface_cb)(struct hostapd_iface *iface); int (*disable_iface_cb)(struct hostapd_iface *iface); }; diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 1c5b2f896c43..e1e17b64ef0d 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -2216,6 +2216,11 @@ struct wpa_driver_capa { /* Maximum number of supported AKM suites in commands */ unsigned int max_num_akms; + + /* Maximum number of interfaces supported for MBSSID advertisements */ + u8 mbssid_max_interfaces; + /* Maximum profile periodicity for enhanced MBSSID advertisements */ + u8 ema_max_periodicity; }; diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c index 512bbb6de291..7dc90ba17513 100644 --- a/src/drivers/driver_nl80211_capa.c +++ b/src/drivers/driver_nl80211_capa.c @@ -875,6 +875,30 @@ err: } +static void wiphy_info_mbssid(struct wpa_driver_capa *cap, struct nlattr *attr) +{ + struct nlattr *config[NL80211_MBSSID_CONFIG_ATTR_MAX + 1]; + + if (nla_parse_nested(config, NL80211_MBSSID_CONFIG_ATTR_MAX, attr, + NULL)) + return; + + if (!config[NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES]) + return; + + cap->mbssid_max_interfaces = + nla_get_u8(config[NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES]); + + if (config[NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY]) + cap->ema_max_periodicity = + nla_get_u8(config[NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY]); + + wpa_printf(MSG_DEBUG, + "multiple_bssid: max interfaces %u, max profile periodicity %u\n", + cap->mbssid_max_interfaces, cap->ema_max_periodicity); +} + + static int wiphy_info_handler(struct nl_msg *msg, void *arg) { struct nlattr *tb[NL80211_ATTR_MAX + 1]; @@ -1113,6 +1137,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg) capa->max_num_akms = nla_get_u16(tb[NL80211_ATTR_MAX_NUM_AKM_SUITES]); + if (tb[NL80211_ATTR_MBSSID_CONFIG]) + wiphy_info_mbssid(capa, tb[NL80211_ATTR_MBSSID_CONFIG]); + return NL_SKIP; } -- 2.25.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap