* [PATCH 0/4] mac80211/cfg80211/hwsim: Basic rate and TXQ params
@ 2008-10-29 17:49 Jouni Malinen
2008-10-29 17:49 ` [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes Jouni Malinen
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Jouni Malinen @ 2008-10-29 17:49 UTC (permalink / raw)
To: John W. Linville; +Cc: Johannes Berg, linux-wireless
These patches add cfg80211/nl80211 attributes for configuring basic
rate set and TX queue parameters for AP mode. The current hostapd
development has matching userspace code for using the new attributes. In
addition, mac80211_hwsim is extended to show more detailed debug
information on BSS and TXQ changes.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes 2008-10-29 17:49 [PATCH 0/4] mac80211/cfg80211/hwsim: Basic rate and TXQ params Jouni Malinen @ 2008-10-29 17:49 ` Jouni Malinen 2008-10-30 10:42 ` Johannes Berg 2008-10-29 17:49 ` [PATCH 2/4] nl80211: Add basic rate configuration for AP mode Jouni Malinen ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Jouni Malinen @ 2008-10-29 17:49 UTC (permalink / raw) To: John W. Linville; +Cc: Johannes Berg, linux-wireless Provide detailed information on BSS configuration changes to make it easier to debug mac80211 functionality. Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Index: wireless-testing/drivers/net/wireless/mac80211_hwsim.c =================================================================== --- wireless-testing.orig/drivers/net/wireless/mac80211_hwsim.c +++ wireless-testing/drivers/net/wireless/mac80211_hwsim.c @@ -415,6 +415,37 @@ static void mac80211_hwsim_bss_info_chan u32 changed) { hwsim_check_magic(vif); + printk(KERN_DEBUG "%s:%s(changed=0x%x)\n", + wiphy_name(hw->wiphy), __func__, changed); + + if (changed & BSS_CHANGED_ASSOC) { + printk(KERN_DEBUG " ASSOC: assoc=%d aid=%d\n", + info->assoc, info->aid); + } + + if (changed & BSS_CHANGED_ERP_CTS_PROT) { + printk(KERN_DEBUG " ERP_CTS_PROT: %d\n", info->use_cts_prot); + } + + if (changed & BSS_CHANGED_ERP_PREAMBLE) { + printk(KERN_DEBUG " ERP_PREAMBLE: %d\n", + info->use_short_preamble); + } + + if (changed & BSS_CHANGED_ERP_SLOT) { + printk(KERN_DEBUG " ERP_SLOT: %d\n", info->use_short_slot); + } + + if (changed & BSS_CHANGED_HT) { + printk(KERN_DEBUG " HT: sec_ch_offs=%d width_40_ok=%d " + "op_mode=%d\n", info->ht.secondary_channel_offset, + info->ht.width_40_ok, info->ht.operation_mode); + } + + if (changed & BSS_CHANGED_BASIC_RATES) { + printk(KERN_DEBUG " BASIC_RATES: 0x%llx\n", + info->basic_rates); + } } static void mac80211_hwsim_sta_notify(struct ieee80211_hw *hw, -- -- Jouni Malinen PGP id EFC895FA ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes 2008-10-29 17:49 ` [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes Jouni Malinen @ 2008-10-30 10:42 ` Johannes Berg 0 siblings, 0 replies; 9+ messages in thread From: Johannes Berg @ 2008-10-30 10:42 UTC (permalink / raw) To: Jouni Malinen; +Cc: John W. Linville, linux-wireless [-- Attachment #1: Type: text/plain, Size: 417 bytes --] > + printk(KERN_DEBUG "%s:%s(changed=0x%x)\n", > + wiphy_name(hw->wiphy), __func__, changed); Should we print the wiphy name for each line below too so we can parse this more easily with some validation tools? > + if (changed & BSS_CHANGED_BASIC_RATES) { > + printk(KERN_DEBUG " BASIC_RATES: 0x%llx\n", > + info->basic_rates); That'll need an (unsigned long long) cast. johannes [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] nl80211: Add basic rate configuration for AP mode 2008-10-29 17:49 [PATCH 0/4] mac80211/cfg80211/hwsim: Basic rate and TXQ params Jouni Malinen 2008-10-29 17:49 ` [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes Jouni Malinen @ 2008-10-29 17:49 ` Jouni Malinen 2008-10-30 10:44 ` Johannes Berg 2008-10-29 17:49 ` [PATCH 3/4] mac80211_hwsim: Debug info for TX queue parameters Jouni Malinen 2008-10-29 17:49 ` [PATCH 4/4] nl80211: Add TX queue parameter configuration Jouni Malinen 3 siblings, 1 reply; 9+ messages in thread From: Jouni Malinen @ 2008-10-29 17:49 UTC (permalink / raw) To: John W. Linville; +Cc: Johannes Berg, linux-wireless Add a new attribute, NL80211_ATTR_BSS_BASIC_RATES, that can be used with NL80211_CMD_SET_BSS for userspace (e.g., hostapd) to set which rates are in the basic rate set. Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Index: wireless-testing/include/linux/nl80211.h =================================================================== --- wireless-testing.orig/include/linux/nl80211.h +++ wireless-testing/include/linux/nl80211.h @@ -243,6 +243,9 @@ enum nl80211_commands { * (u8, 0 or 1) * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled * (u8, 0 or 1) + * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic + * rates in format defined by IEEE 802.11 7.3.2.2 but without the length + * restriction (at most %NL80211_MAX_SUPP_RATES). * * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from * association request when used with NL80211_CMD_NEW_STATION) @@ -307,6 +310,8 @@ enum nl80211_attrs { NL80211_ATTR_MESH_PARAMS, + NL80211_ATTR_BSS_BASIC_RATES, + /* add attributes here, update the policy in nl80211.c */ __NL80211_ATTR_AFTER_LAST, @@ -318,6 +323,7 @@ enum nl80211_attrs { * here */ #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY +#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES #define NL80211_MAX_SUPP_RATES 32 #define NL80211_MAX_SUPP_REG_RULES 32 Index: wireless-testing/include/net/cfg80211.h =================================================================== --- wireless-testing.orig/include/net/cfg80211.h +++ wireless-testing/include/net/cfg80211.h @@ -280,11 +280,16 @@ struct mpath_info { * (0 = no, 1 = yes, -1 = do not change) * @use_short_slot_time: Whether the use of short slot time is allowed * (0 = no, 1 = yes, -1 = do not change) + * @basic_rates: basic rates in IEEE 802.11 format + * (or NULL for no change) + * @basic_rates_len: number of basic rates */ struct bss_parameters { int use_cts_prot; int use_short_preamble; int use_short_slot_time; + u8 *basic_rates; + u8 basic_rates_len; }; /** Index: wireless-testing/net/mac80211/cfg.c =================================================================== --- wireless-testing.orig/net/mac80211/cfg.c +++ wireless-testing/net/mac80211/cfg.c @@ -1046,6 +1046,24 @@ static int ieee80211_change_bss(struct w changed |= BSS_CHANGED_ERP_SLOT; } + if (params->basic_rates) { + int i, j; + u32 rates = 0; + struct ieee80211_local *local = wiphy_priv(wiphy); + struct ieee80211_supported_band *sband = + wiphy->bands[local->oper_channel->band]; + + for (i = 0; i < params->basic_rates_len; i++) { + int rate = (params->basic_rates[i] & 0x7f) * 5; + for (j = 0; j < sband->n_bitrates; j++) { + if (sband->bitrates[j].bitrate == rate) + rates |= BIT(j); + } + } + sdata->vif.bss_conf.basic_rates = rates; + changed |= BSS_CHANGED_BASIC_RATES; + } + ieee80211_bss_info_change_notify(sdata, changed); return 0; Index: wireless-testing/net/wireless/nl80211.c =================================================================== --- wireless-testing.orig/net/wireless/nl80211.c +++ wireless-testing/net/wireless/nl80211.c @@ -95,6 +95,8 @@ static struct nla_policy nl80211_policy[ [NL80211_ATTR_BSS_CTS_PROT] = { .type = NLA_U8 }, [NL80211_ATTR_BSS_SHORT_PREAMBLE] = { .type = NLA_U8 }, [NL80211_ATTR_BSS_SHORT_SLOT_TIME] = { .type = NLA_U8 }, + [NL80211_ATTR_BSS_BASIC_RATES] = { .type = NLA_BINARY, + .len = NL80211_MAX_SUPP_RATES }, [NL80211_ATTR_MESH_PARAMS] = { .type = NLA_NESTED }, @@ -1613,6 +1615,12 @@ static int nl80211_set_bss(struct sk_buf if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]) params.use_short_slot_time = nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]); + if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { + params.basic_rates = + nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); + params.basic_rates_len = + nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); + } err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev); if (err) -- -- Jouni Malinen PGP id EFC895FA ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/4] nl80211: Add basic rate configuration for AP mode 2008-10-29 17:49 ` [PATCH 2/4] nl80211: Add basic rate configuration for AP mode Jouni Malinen @ 2008-10-30 10:44 ` Johannes Berg 0 siblings, 0 replies; 9+ messages in thread From: Johannes Berg @ 2008-10-30 10:44 UTC (permalink / raw) To: Jouni Malinen; +Cc: John W. Linville, linux-wireless [-- Attachment #1: Type: text/plain, Size: 4695 bytes --] On Wed, 2008-10-29 at 19:49 +0200, Jouni Malinen wrote: > plain text document attachment (basic_rate_config.patch) > Add a new attribute, NL80211_ATTR_BSS_BASIC_RATES, that can be used with > NL80211_CMD_SET_BSS for userspace (e.g., hostapd) to set which rates are > in the basic rate set. Looks good to me, thanks. > Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> > Index: wireless-testing/include/linux/nl80211.h > =================================================================== > --- wireless-testing.orig/include/linux/nl80211.h > +++ wireless-testing/include/linux/nl80211.h > @@ -243,6 +243,9 @@ enum nl80211_commands { > * (u8, 0 or 1) > * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled > * (u8, 0 or 1) > + * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic > + * rates in format defined by IEEE 802.11 7.3.2.2 but without the length > + * restriction (at most %NL80211_MAX_SUPP_RATES). > * > * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from > * association request when used with NL80211_CMD_NEW_STATION) > @@ -307,6 +310,8 @@ enum nl80211_attrs { > > NL80211_ATTR_MESH_PARAMS, > > + NL80211_ATTR_BSS_BASIC_RATES, > + > /* add attributes here, update the policy in nl80211.c */ > > __NL80211_ATTR_AFTER_LAST, > @@ -318,6 +323,7 @@ enum nl80211_attrs { > * here > */ > #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY > +#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES > > #define NL80211_MAX_SUPP_RATES 32 > #define NL80211_MAX_SUPP_REG_RULES 32 > Index: wireless-testing/include/net/cfg80211.h > =================================================================== > --- wireless-testing.orig/include/net/cfg80211.h > +++ wireless-testing/include/net/cfg80211.h > @@ -280,11 +280,16 @@ struct mpath_info { > * (0 = no, 1 = yes, -1 = do not change) > * @use_short_slot_time: Whether the use of short slot time is allowed > * (0 = no, 1 = yes, -1 = do not change) > + * @basic_rates: basic rates in IEEE 802.11 format > + * (or NULL for no change) > + * @basic_rates_len: number of basic rates > */ > struct bss_parameters { > int use_cts_prot; > int use_short_preamble; > int use_short_slot_time; > + u8 *basic_rates; > + u8 basic_rates_len; > }; > > /** > Index: wireless-testing/net/mac80211/cfg.c > =================================================================== > --- wireless-testing.orig/net/mac80211/cfg.c > +++ wireless-testing/net/mac80211/cfg.c > @@ -1046,6 +1046,24 @@ static int ieee80211_change_bss(struct w > changed |= BSS_CHANGED_ERP_SLOT; > } > > + if (params->basic_rates) { > + int i, j; > + u32 rates = 0; > + struct ieee80211_local *local = wiphy_priv(wiphy); > + struct ieee80211_supported_band *sband = > + wiphy->bands[local->oper_channel->band]; > + > + for (i = 0; i < params->basic_rates_len; i++) { > + int rate = (params->basic_rates[i] & 0x7f) * 5; > + for (j = 0; j < sband->n_bitrates; j++) { > + if (sband->bitrates[j].bitrate == rate) > + rates |= BIT(j); > + } > + } > + sdata->vif.bss_conf.basic_rates = rates; > + changed |= BSS_CHANGED_BASIC_RATES; > + } > + > ieee80211_bss_info_change_notify(sdata, changed); > > return 0; > Index: wireless-testing/net/wireless/nl80211.c > =================================================================== > --- wireless-testing.orig/net/wireless/nl80211.c > +++ wireless-testing/net/wireless/nl80211.c > @@ -95,6 +95,8 @@ static struct nla_policy nl80211_policy[ > [NL80211_ATTR_BSS_CTS_PROT] = { .type = NLA_U8 }, > [NL80211_ATTR_BSS_SHORT_PREAMBLE] = { .type = NLA_U8 }, > [NL80211_ATTR_BSS_SHORT_SLOT_TIME] = { .type = NLA_U8 }, > + [NL80211_ATTR_BSS_BASIC_RATES] = { .type = NLA_BINARY, > + .len = NL80211_MAX_SUPP_RATES }, > > [NL80211_ATTR_MESH_PARAMS] = { .type = NLA_NESTED }, > > @@ -1613,6 +1615,12 @@ static int nl80211_set_bss(struct sk_buf > if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]) > params.use_short_slot_time = > nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]); > + if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { > + params.basic_rates = > + nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); > + params.basic_rates_len = > + nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); > + } > > err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev); > if (err) > > -- > > -- > Jouni Malinen PGP id EFC895FA > [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/4] mac80211_hwsim: Debug info for TX queue parameters 2008-10-29 17:49 [PATCH 0/4] mac80211/cfg80211/hwsim: Basic rate and TXQ params Jouni Malinen 2008-10-29 17:49 ` [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes Jouni Malinen 2008-10-29 17:49 ` [PATCH 2/4] nl80211: Add basic rate configuration for AP mode Jouni Malinen @ 2008-10-29 17:49 ` Jouni Malinen 2008-10-30 10:44 ` Johannes Berg 2008-10-29 17:49 ` [PATCH 4/4] nl80211: Add TX queue parameter configuration Jouni Malinen 3 siblings, 1 reply; 9+ messages in thread From: Jouni Malinen @ 2008-10-29 17:49 UTC (permalink / raw) To: John W. Linville; +Cc: Johannes Berg, linux-wireless Provide detailed information on TX queue parameter changes to make it easier to debug mac80211 functionality. Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Index: wireless-testing/drivers/net/wireless/mac80211_hwsim.c =================================================================== --- wireless-testing.orig/drivers/net/wireless/mac80211_hwsim.c 2008-10-29 13:27:50.000000000 +0200 +++ wireless-testing/drivers/net/wireless/mac80211_hwsim.c 2008-10-29 13:36:20.000000000 +0200 @@ -468,6 +468,17 @@ return 0; } +static int mac80211_hwsim_conf_tx( + struct ieee80211_hw *hw, u16 queue, + const struct ieee80211_tx_queue_params *params) +{ + printk(KERN_DEBUG "%s:%s (queue=%d txop=%d cw_min=%d cw_max=%d " + "aifs=%d)\n", + wiphy_name(hw->wiphy), __func__, queue, + params->txop, params->cw_min, params->cw_max, params->aifs); + return 0; +} + static const struct ieee80211_ops mac80211_hwsim_ops = { .tx = mac80211_hwsim_tx, @@ -481,6 +492,7 @@ .bss_info_changed = mac80211_hwsim_bss_info_changed, .sta_notify = mac80211_hwsim_sta_notify, .set_tim = mac80211_hwsim_set_tim, + .conf_tx = mac80211_hwsim_conf_tx, }; -- -- Jouni Malinen PGP id EFC895FA ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] mac80211_hwsim: Debug info for TX queue parameters 2008-10-29 17:49 ` [PATCH 3/4] mac80211_hwsim: Debug info for TX queue parameters Jouni Malinen @ 2008-10-30 10:44 ` Johannes Berg 0 siblings, 0 replies; 9+ messages in thread From: Johannes Berg @ 2008-10-30 10:44 UTC (permalink / raw) To: Jouni Malinen; +Cc: John W. Linville, linux-wireless [-- Attachment #1: Type: text/plain, Size: 1455 bytes --] On Wed, 2008-10-29 at 19:49 +0200, Jouni Malinen wrote: > plain text document attachment (hwsim_tx_conf.patch) > Provide detailed information on TX queue parameter changes to make it > easier to debug mac80211 functionality. > > Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> > Index: wireless-testing/drivers/net/wireless/mac80211_hwsim.c > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/mac80211_hwsim.c 2008-10-29 13:27:50.000000000 +0200 > +++ wireless-testing/drivers/net/wireless/mac80211_hwsim.c 2008-10-29 13:36:20.000000000 +0200 > @@ -468,6 +468,17 @@ > return 0; > } > > +static int mac80211_hwsim_conf_tx( > + struct ieee80211_hw *hw, u16 queue, > + const struct ieee80211_tx_queue_params *params) > +{ > + printk(KERN_DEBUG "%s:%s (queue=%d txop=%d cw_min=%d cw_max=%d " > + "aifs=%d)\n", > + wiphy_name(hw->wiphy), __func__, queue, > + params->txop, params->cw_min, params->cw_max, params->aifs); > + return 0; > +} > + > static const struct ieee80211_ops mac80211_hwsim_ops = > { > .tx = mac80211_hwsim_tx, > @@ -481,6 +492,7 @@ > .bss_info_changed = mac80211_hwsim_bss_info_changed, > .sta_notify = mac80211_hwsim_sta_notify, > .set_tim = mac80211_hwsim_set_tim, > + .conf_tx = mac80211_hwsim_conf_tx, > }; > > > > -- > [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/4] nl80211: Add TX queue parameter configuration 2008-10-29 17:49 [PATCH 0/4] mac80211/cfg80211/hwsim: Basic rate and TXQ params Jouni Malinen ` (2 preceding siblings ...) 2008-10-29 17:49 ` [PATCH 3/4] mac80211_hwsim: Debug info for TX queue parameters Jouni Malinen @ 2008-10-29 17:49 ` Jouni Malinen 2008-10-30 10:49 ` Johannes Berg 3 siblings, 1 reply; 9+ messages in thread From: Jouni Malinen @ 2008-10-29 17:49 UTC (permalink / raw) To: John W. Linville; +Cc: Johannes Berg, linux-wireless Add a new attribute, NL80211_ATTR_WIPHY_TXQ_PARAMS, that can be used with NL80211_CMD_SET_WIPHY for userspace (e.g., hostapd) to set TX queue parameters (txop, cwmin, cwmax, aifs). Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Index: wireless-testing/include/linux/nl80211.h =================================================================== --- wireless-testing.orig/include/linux/nl80211.h +++ wireless-testing/include/linux/nl80211.h @@ -25,8 +25,9 @@ * * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request * to get a list of all present wiphys. - * @NL80211_CMD_SET_WIPHY: set wiphy name, needs %NL80211_ATTR_WIPHY and - * %NL80211_ATTR_WIPHY_NAME. + * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or + * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME + * and/or %NL80211_ATTR_WIPHY_TXQ_PARAMS. * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request * or rename notification. Has attributes %NL80211_ATTR_WIPHY and * %NL80211_ATTR_WIPHY_NAME. @@ -178,6 +179,7 @@ enum nl80211_commands { * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf. * /sys/class/ieee80211/<phyname>/index * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming) + * @NL80211_ATTR_WIPHY_TXQ_PARAMS: a nested array of TX queue parameters * * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on * @NL80211_ATTR_IFNAME: network interface name @@ -312,6 +314,8 @@ enum nl80211_attrs { NL80211_ATTR_BSS_BASIC_RATES, + NL80211_ATTR_WIPHY_TXQ_PARAMS, + /* add attributes here, update the policy in nl80211.c */ __NL80211_ATTR_AFTER_LAST, @@ -324,6 +328,7 @@ enum nl80211_attrs { */ #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES +#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS #define NL80211_MAX_SUPP_RATES 32 #define NL80211_MAX_SUPP_REG_RULES 32 @@ -698,4 +703,35 @@ enum nl80211_meshconf_params { NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1 }; +/** + * enum nl80211_txq_attr - TX queue parameter attributes + * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*) + * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning + * disabled + * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form + * 2^n-1 in the range 1..32767] + * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form + * 2^n-1 in the range 1..32767] + * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255] + */ +enum nl80211_txq_attr { + __NL80211_TXQ_ATTR_INVALID, + NL80211_TXQ_ATTR_QUEUE, + NL80211_TXQ_ATTR_TXOP, + NL80211_TXQ_ATTR_CWMIN, + NL80211_TXQ_ATTR_CWMAX, + NL80211_TXQ_ATTR_AIFS, + + /* keep last */ + __NL80211_TXQ_ATTR_AFTER_LAST, + NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1 +}; + +enum nl80211_txq_q { + NL80211_TXQ_Q_VO, + NL80211_TXQ_Q_VI, + NL80211_TXQ_Q_BE, + NL80211_TXQ_Q_BK +}; + #endif /* __LINUX_NL80211_H */ Index: wireless-testing/include/net/cfg80211.h =================================================================== --- wireless-testing.orig/include/net/cfg80211.h +++ wireless-testing/include/net/cfg80211.h @@ -371,6 +371,14 @@ struct mesh_config { u16 dot11MeshHWMPnetDiameterTraversalTime; }; +struct ieee80211_txq_params { + u8 queue; + u16 txop; + u16 cwmin; + u16 cwmax; + u8 aifs; +}; + /* from net/wireless.h */ struct wiphy; @@ -430,6 +438,8 @@ struct wiphy; * @set_mesh_cfg: set mesh parameters (by now, just mesh id) * * @change_bss: Modify parameters for a given BSS. + * + * @set_txq_params: Set TX queue parameters */ struct cfg80211_ops { int (*add_virtual_intf)(struct wiphy *wiphy, char *name, @@ -490,6 +500,9 @@ struct cfg80211_ops { const struct mesh_config *nconf, u32 mask); int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params); + + int (*set_txq_params)(struct wiphy *wiphy, + struct ieee80211_txq_params *params); }; #endif /* __NET_CFG80211_H */ Index: wireless-testing/net/mac80211/cfg.c =================================================================== --- wireless-testing.orig/net/mac80211/cfg.c +++ wireless-testing/net/mac80211/cfg.c @@ -1069,6 +1069,30 @@ static int ieee80211_change_bss(struct w return 0; } +static int ieee80211_set_txq_params(struct wiphy *wiphy, + struct ieee80211_txq_params *params) +{ + struct ieee80211_local *local = wiphy_priv(wiphy); + struct ieee80211_tx_queue_params p; + + if (!local->ops->conf_tx) + return -EOPNOTSUPP; + + memset(&p, 0, sizeof(p)); + p.aifs = params->aifs; + p.cw_max = params->cwmax; + p.cw_min = params->cwmin; + p.txop = params->txop; + if (local->ops->conf_tx(local_to_hw(local), params->queue, &p)) { + printk(KERN_DEBUG "%s: failed to set TX queue " + "parameters for queue %d\n", local->mdev->name, + params->queue); + return -EINVAL; + } + + return 0; +} + struct cfg80211_ops mac80211_config_ops = { .add_virtual_intf = ieee80211_add_iface, .del_virtual_intf = ieee80211_del_iface, @@ -1095,4 +1119,5 @@ struct cfg80211_ops mac80211_config_ops .get_mesh_params = ieee80211_get_mesh_params, #endif .change_bss = ieee80211_change_bss, + .set_txq_params = ieee80211_set_txq_params, }; Index: wireless-testing/net/wireless/nl80211.c =================================================================== --- wireless-testing.orig/net/wireless/nl80211.c +++ wireless-testing/net/wireless/nl80211.c @@ -58,6 +58,7 @@ static struct nla_policy nl80211_policy[ [NL80211_ATTR_WIPHY] = { .type = NLA_U32 }, [NL80211_ATTR_WIPHY_NAME] = { .type = NLA_NUL_STRING, .len = BUS_ID_SIZE-1 }, + [NL80211_ATTR_WIPHY_TXQ_PARAMS] = { .type = NLA_NESTED }, [NL80211_ATTR_IFTYPE] = { .type = NLA_U32 }, [NL80211_ATTR_IFINDEX] = { .type = NLA_U32 }, @@ -286,20 +287,76 @@ static int nl80211_get_wiphy(struct sk_b return -ENOBUFS; } +static const struct nla_policy txq_params_policy[NL80211_TXQ_ATTR_MAX + 1] = { + [NL80211_TXQ_ATTR_QUEUE] = { .type = NLA_U8 }, + [NL80211_TXQ_ATTR_TXOP] = { .type = NLA_U16 }, + [NL80211_TXQ_ATTR_CWMIN] = { .type = NLA_U16 }, + [NL80211_TXQ_ATTR_CWMAX] = { .type = NLA_U16 }, + [NL80211_TXQ_ATTR_AIFS] = { .type = NLA_U8 }, +}; + +static int parse_txq_params(struct nlattr *tb[], + struct ieee80211_txq_params *txq_params) +{ + if (!tb[NL80211_TXQ_ATTR_QUEUE] || !tb[NL80211_TXQ_ATTR_TXOP] || + !tb[NL80211_TXQ_ATTR_CWMIN] || !tb[NL80211_TXQ_ATTR_CWMAX] || + !tb[NL80211_TXQ_ATTR_AIFS]) + return -EINVAL; + + txq_params->queue = nla_get_u8(tb[NL80211_TXQ_ATTR_QUEUE]); + txq_params->txop = nla_get_u16(tb[NL80211_TXQ_ATTR_TXOP]); + txq_params->cwmin = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMIN]); + txq_params->cwmax = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMAX]); + txq_params->aifs = nla_get_u8(tb[NL80211_TXQ_ATTR_AIFS]); + + return 0; +} + static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev; - int result; - - if (!info->attrs[NL80211_ATTR_WIPHY_NAME]) - return -EINVAL; + int result = 0, rem_txq_params = 0; + struct nlattr *nl_txq_params; rdev = cfg80211_get_dev_from_info(info); if (IS_ERR(rdev)) return PTR_ERR(rdev); - result = cfg80211_dev_rename(rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME])); + if (info->attrs[NL80211_ATTR_WIPHY_NAME]) { + result = cfg80211_dev_rename( + rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME])); + if (result) + goto bad_res; + } + + if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) { + struct ieee80211_txq_params txq_params; + struct nlattr *tb[NL80211_TXQ_ATTR_MAX + 1]; + + nla_for_each_nested(nl_txq_params, + info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS], + rem_txq_params) { + nla_parse(tb, NL80211_TXQ_ATTR_MAX, + nla_data(nl_txq_params), + nla_len(nl_txq_params), + txq_params_policy); + result = parse_txq_params(tb, &txq_params); + if (result) + goto bad_res; + + if (!rdev->ops->set_txq_params) { + result = -EOPNOTSUPP; + goto bad_res; + } + + result = rdev->ops->set_txq_params(&rdev->wiphy, + &txq_params); + if (result) + goto bad_res; + } + } +bad_res: cfg80211_put_dev(rdev); return result; } -- -- Jouni Malinen PGP id EFC895FA ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 4/4] nl80211: Add TX queue parameter configuration 2008-10-29 17:49 ` [PATCH 4/4] nl80211: Add TX queue parameter configuration Jouni Malinen @ 2008-10-30 10:49 ` Johannes Berg 0 siblings, 0 replies; 9+ messages in thread From: Johannes Berg @ 2008-10-30 10:49 UTC (permalink / raw) To: Jouni Malinen; +Cc: John W. Linville, linux-wireless [-- Attachment #1: Type: text/plain, Size: 1694 bytes --] On Wed, 2008-10-29 at 19:49 +0200, Jouni Malinen wrote: > + * enum nl80211_txq_attr - TX queue parameter attributes > + * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*) > + * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning > + * disabled > + * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form > + * 2^n-1 in the range 1..32767] > + * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form > + * 2^n-1 in the range 1..32767] > + * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255] You have to add the invalid, after_last and max to the kernel-doc too otherwise it'll warn about it. > > +struct ieee80211_txq_params { > + u8 queue; > + u16 txop; > + u16 cwmin; > + u16 cwmax; > + u8 aifs; > +}; Maybe add some kernel-doc describing the units etc.? And describing which values are valid for 'queue' (or should that use the enum VO/VI/...?) > + if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) { > + struct ieee80211_txq_params txq_params; > + struct nlattr *tb[NL80211_TXQ_ATTR_MAX + 1]; > + > + nla_for_each_nested(nl_txq_params, > + info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS], > + rem_txq_params) { > + nla_parse(tb, NL80211_TXQ_ATTR_MAX, > + nla_data(nl_txq_params), > + nla_len(nl_txq_params), > + txq_params_policy); > + result = parse_txq_params(tb, &txq_params); > + if (result) > + goto bad_res; > + > + if (!rdev->ops->set_txq_params) { > + result = -EOPNOTSUPP; > + goto bad_res; > + } Seems you could do that check outside the loop? Otherwise looks good to me, thanks. johannes [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-10-30 10:49 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-10-29 17:49 [PATCH 0/4] mac80211/cfg80211/hwsim: Basic rate and TXQ params Jouni Malinen 2008-10-29 17:49 ` [PATCH 1/4] mac80211_hwsim: Debug info for BSS config changes Jouni Malinen 2008-10-30 10:42 ` Johannes Berg 2008-10-29 17:49 ` [PATCH 2/4] nl80211: Add basic rate configuration for AP mode Jouni Malinen 2008-10-30 10:44 ` Johannes Berg 2008-10-29 17:49 ` [PATCH 3/4] mac80211_hwsim: Debug info for TX queue parameters Jouni Malinen 2008-10-30 10:44 ` Johannes Berg 2008-10-29 17:49 ` [PATCH 4/4] nl80211: Add TX queue parameter configuration Jouni Malinen 2008-10-30 10:49 ` Johannes Berg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).