@@ -657,10 +657,19 @@ 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 cw_min, int cw_max, int burst_time)
{
+ int link_id = -1;
+
if (hapd->driver == NULL || hapd->driver->set_tx_queue_params == NULL)
return 0;
+
+#ifdef CONFIG_IEEE80211BE
+ if (hapd->conf->mld_ap)
+ link_id = hapd->conf->mld_link_id;
+#endif /* CONFIG_IEEE80211BE */
+
return hapd->driver->set_tx_queue_params(hapd->drv_priv, queue, aifs,
- cw_min, cw_max, burst_time);
+ cw_min, cw_max, burst_time,
+ link_id);
}
@@ -3674,9 +3674,11 @@ struct wpa_driver_ops {
* @cw_min: cwMin
* @cw_max: cwMax
* @burst_time: Maximum length for bursting in 0.1 msec units
+ * @link_id: Link ID to use, or -1 for non MLD.
*/
int (*set_tx_queue_params)(void *priv, int queue, int aifs, int cw_min,
- int cw_max, int burst_time);
+ int cw_max, int burst_time,
+ int link_id);
/**
* if_add - Add a virtual interface
@@ -7806,7 +7806,8 @@ static int i802_read_sta_data(struct i802_bss *bss,
static int i802_set_tx_queue_params(void *priv, int queue, int aifs,
- int cw_min, int cw_max, int burst_time)
+ int cw_min, int cw_max, int burst_time,
+ int link_id)
{
struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -7858,6 +7859,10 @@ static int i802_set_tx_queue_params(void *priv, int queue, int aifs,
nla_nest_end(msg, txq);
+ if (link_id >= 0 &&
+ nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id))
+ goto fail;
+
res = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
wpa_printf(MSG_DEBUG,
"nl80211: TX queue param set: queue=%d aifs=%d cw_min=%d cw_max=%d burst_time=%d --> res=%d",