Search Linux Wireless

Re: [PATCHv9 5/6] nl80211: Add support to configure TID specific txrate configuration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> This patch adds support to configure per TID txrate configuration
> configuration through the NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE
> and NL80211_TID_CONFIG_ATTR_TX_RATE
> attribute. TX bitrate mask values passed
> in NL80211_ATTR_TX_RATES attribute and NL80211_TID_CONFIG_ATTR_TX_RATES
> attribute will have types of the TX rate should be applied. This uses
> nl80211_parse_tx_bitrate_mask to validate and calculate the bitrate
> mask.
> 
> Signed-off-by: Tamizh chelvam <tamizhr@xxxxxxxxxxxxxx>
> ---
>  include/net/cfg80211.h       |    5 +++
>  include/uapi/linux/nl80211.h |   24 +++++++++++++
>  net/wireless/nl80211.c       |   76 ++++++++++++++++++++++++++++++++----------
>  3 files changed, 88 insertions(+), 17 deletions(-)

...

> @@ -13936,6 +13947,37 @@ static int parse_tid_conf(struct cfg80211_registered_device *rdev,
>  			nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL]);
>  	}
>  
> +	if (attrs[NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE]) {
> +		int idx;
> +		enum nl80211_attrs attr;
> +
> +		err = nl80211_check_tid_config_support(rdev, extack, peer,
> +						       attrs, tid_conf,
> +						       TX_RATE);
> +		if (err)
> +			return err;
> +		idx = NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE;
> +		tid_conf->txrate_type = nla_get_u8(attrs[idx]);
> +		if (tid_conf->txrate_type != NL80211_TX_RATE_AUTOMATIC) {
> +			tid_conf->mask =
> +				kzalloc(sizeof(struct cfg80211_bitrate_mask),
> +					GFP_KERNEL);
> +			if (!tid_conf->mask)
> +				return -ENOMEM;
> +
> +			attr =
> +			(enum nl80211_attrs)NL80211_TID_CONFIG_ATTR_TX_RATE;
> +			err = nl80211_parse_tx_bitrate_mask(info, attrs, attr,
> +							    tid_conf->mask);
> +			if (err) {
> +				kfree(tid_conf->mask);
> +				return err;
> +			}

IIUC we have to free all the allocated tid_conf->mask entries in the end of
nl80211_set_tid_config, right before tid_config is freed. Alternatively,
struct ieee80211_tid_cfg can be modified to keep cfg80211_bitrate_mask
value rather than pointer.

> +		} else {
> +			tid_conf->mask = NULL;
> +		}
> +	}
> +
>  	return 0;
>  }

Regards,
Sergey



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux