nl80211: Station airtime weight configuration
This provides a mechanism for configuring per-STA airtime weight for airtime policy configuration. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
This commit is contained in:
parent
58d4c23615
commit
6720b9482f
4 changed files with 44 additions and 0 deletions
|
@ -583,6 +583,16 @@ int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int hostapd_sta_set_airtime_weight(struct hostapd_data *hapd, const u8 *addr,
|
||||||
|
unsigned int weight)
|
||||||
|
{
|
||||||
|
if (!hapd->driver || !hapd->driver->sta_set_airtime_weight)
|
||||||
|
return 0;
|
||||||
|
return hapd->driver->sta_set_airtime_weight(hapd->drv_priv, addr,
|
||||||
|
weight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int hostapd_set_country(struct hostapd_data *hapd, const char *country)
|
int hostapd_set_country(struct hostapd_data *hapd, const char *country)
|
||||||
{
|
{
|
||||||
if (hapd->driver == NULL ||
|
if (hapd->driver == NULL ||
|
||||||
|
|
|
@ -67,6 +67,8 @@ int hostapd_set_rts(struct hostapd_data *hapd, int rts);
|
||||||
int hostapd_set_frag(struct hostapd_data *hapd, int frag);
|
int hostapd_set_frag(struct hostapd_data *hapd, int frag);
|
||||||
int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr,
|
int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr,
|
||||||
int total_flags, int flags_or, int flags_and);
|
int total_flags, int flags_or, int flags_and);
|
||||||
|
int hostapd_sta_set_airtime_weight(struct hostapd_data *hapd, const u8 *addr,
|
||||||
|
unsigned int weight);
|
||||||
int hostapd_set_country(struct hostapd_data *hapd, const char *country);
|
int hostapd_set_country(struct hostapd_data *hapd, const char *country);
|
||||||
int hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs,
|
int hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs,
|
||||||
int cw_min, int cw_max, int burst_time);
|
int cw_min, int cw_max, int burst_time);
|
||||||
|
|
|
@ -2947,6 +2947,16 @@ struct wpa_driver_ops {
|
||||||
unsigned int total_flags, unsigned int flags_or,
|
unsigned int total_flags, unsigned int flags_or,
|
||||||
unsigned int flags_and);
|
unsigned int flags_and);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sta_set_airtime_weight - Set station airtime weight (AP only)
|
||||||
|
* @priv: Private driver interface data
|
||||||
|
* @addr: Station address
|
||||||
|
* @weight: New weight for station airtime assignment
|
||||||
|
* Returns: 0 on success, -1 on failure
|
||||||
|
*/
|
||||||
|
int (*sta_set_airtime_weight)(void *priv, const u8 *addr,
|
||||||
|
unsigned int weight);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set_tx_queue_params - Set TX queue parameters
|
* set_tx_queue_params - Set TX queue parameters
|
||||||
* @priv: Private driver interface data
|
* @priv: Private driver interface data
|
||||||
|
|
|
@ -5183,6 +5183,28 @@ fail:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int driver_nl80211_sta_set_airtime_weight(void *priv, const u8 *addr,
|
||||||
|
unsigned int weight)
|
||||||
|
{
|
||||||
|
struct i802_bss *bss = priv;
|
||||||
|
struct nl_msg *msg;
|
||||||
|
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"nl80211: Set STA airtime weight - ifname=%s addr=" MACSTR
|
||||||
|
" weight=%u", bss->ifname, MAC2STR(addr), weight);
|
||||||
|
|
||||||
|
if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) ||
|
||||||
|
nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
|
||||||
|
nla_put_u16(msg, NL80211_ATTR_AIRTIME_WEIGHT, weight))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
return send_and_recv_msgs(bss->drv, msg, NULL, NULL);
|
||||||
|
fail:
|
||||||
|
nlmsg_free(msg);
|
||||||
|
return -ENOBUFS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv,
|
static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv,
|
||||||
struct wpa_driver_associate_params *params)
|
struct wpa_driver_associate_params *params)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue