mbssid: Retrieve driver capabilities
Retrieve driver capabilities for the maximum number of interfaces for MBSSID and the maximum allowed profile periodicity for enhanced MBSSID advertisement. Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
This commit is contained in:
parent
7452e54477
commit
78d0b98995
5 changed files with 46 additions and 2 deletions
|
@ -241,6 +241,9 @@ static int hostapd_driver_init(struct hostapd_iface *iface)
|
||||||
wpa_printf(MSG_ERROR, "set_wowlan failed");
|
wpa_printf(MSG_ERROR, "set_wowlan failed");
|
||||||
}
|
}
|
||||||
os_free(triggs);
|
os_free(triggs);
|
||||||
|
|
||||||
|
iface->mbssid_max_interfaces = capa.mbssid_max_interfaces;
|
||||||
|
iface->ema_max_periodicity = capa.ema_max_periodicity;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -643,6 +643,11 @@ struct hostapd_iface {
|
||||||
/* Previous WMM element information */
|
/* Previous WMM element information */
|
||||||
struct hostapd_wmm_ac_params prev_wmm[WMM_AC_NUM];
|
struct hostapd_wmm_ac_params prev_wmm[WMM_AC_NUM];
|
||||||
|
|
||||||
|
/* Maximum number of interfaces supported for MBSSID advertisement */
|
||||||
|
unsigned int mbssid_max_interfaces;
|
||||||
|
/* Maximum profile periodicity for enhanced MBSSID advertisement */
|
||||||
|
unsigned int ema_max_periodicity;
|
||||||
|
|
||||||
int (*enable_iface_cb)(struct hostapd_iface *iface);
|
int (*enable_iface_cb)(struct hostapd_iface *iface);
|
||||||
int (*disable_iface_cb)(struct hostapd_iface *iface);
|
int (*disable_iface_cb)(struct hostapd_iface *iface);
|
||||||
};
|
};
|
||||||
|
|
|
@ -2216,6 +2216,11 @@ struct wpa_driver_capa {
|
||||||
|
|
||||||
/* Maximum number of supported AKM suites in commands */
|
/* Maximum number of supported AKM suites in commands */
|
||||||
unsigned int max_num_akms;
|
unsigned int max_num_akms;
|
||||||
|
|
||||||
|
/* Maximum number of interfaces supported for MBSSID advertisement */
|
||||||
|
unsigned int mbssid_max_interfaces;
|
||||||
|
/* Maximum profile periodicity for enhanced MBSSID advertisement */
|
||||||
|
unsigned int ema_max_periodicity;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10110,7 +10110,9 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
|
||||||
"capa.max_conc_chan_5_0=%u\n"
|
"capa.max_conc_chan_5_0=%u\n"
|
||||||
"capa.max_sched_scan_plans=%u\n"
|
"capa.max_sched_scan_plans=%u\n"
|
||||||
"capa.max_sched_scan_plan_interval=%u\n"
|
"capa.max_sched_scan_plan_interval=%u\n"
|
||||||
"capa.max_sched_scan_plan_iterations=%u\n",
|
"capa.max_sched_scan_plan_iterations=%u\n"
|
||||||
|
"capa.mbssid_max_interfaces=%u\n"
|
||||||
|
"capa.ema_max_periodicity=%u\n",
|
||||||
drv->capa.key_mgmt,
|
drv->capa.key_mgmt,
|
||||||
drv->capa.enc,
|
drv->capa.enc,
|
||||||
drv->capa.auth,
|
drv->capa.auth,
|
||||||
|
@ -10132,7 +10134,9 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
|
||||||
drv->capa.max_conc_chan_5_0,
|
drv->capa.max_conc_chan_5_0,
|
||||||
drv->capa.max_sched_scan_plans,
|
drv->capa.max_sched_scan_plans,
|
||||||
drv->capa.max_sched_scan_plan_interval,
|
drv->capa.max_sched_scan_plan_interval,
|
||||||
drv->capa.max_sched_scan_plan_iterations);
|
drv->capa.max_sched_scan_plan_iterations,
|
||||||
|
drv->capa.mbssid_max_interfaces,
|
||||||
|
drv->capa.ema_max_periodicity);
|
||||||
if (os_snprintf_error(end - pos, res))
|
if (os_snprintf_error(end - pos, res))
|
||||||
return pos - buf;
|
return pos - buf;
|
||||||
pos += res;
|
pos += res;
|
||||||
|
|
|
@ -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,
|
||||||
|
"mbssid: max interfaces %u, max profile periodicity %u",
|
||||||
|
cap->mbssid_max_interfaces, cap->ema_max_periodicity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int wiphy_info_handler(struct nl_msg *msg, void *arg)
|
static int wiphy_info_handler(struct nl_msg *msg, void *arg)
|
||||||
{
|
{
|
||||||
struct nlattr *tb[NL80211_ATTR_MAX + 1];
|
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 =
|
capa->max_num_akms =
|
||||||
nla_get_u16(tb[NL80211_ATTR_MAX_NUM_AKM_SUITES]);
|
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;
|
return NL_SKIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue