Commit 723e73ac authored by Johannes Berg's avatar Johannes Berg

cfg80211: make WMM TSPEC support flag an nl80211 feature flag

During the review of the corresponding wpa_supplicant patches we
noticed that the only way for it to detect that this functionality
is supported currently is to check for the command support. This
can be misleading though, as the command was also designed to, in
the future, support pure 802.11 TSPECs.

Expose the WMM-TSPEC feature flag to nl80211 so later we can also
expose an 802.11-TSPEC feature flag (if needed) to differentiate
the two cases.

Note: this change isn't needed in 3.18 as there's no driver there
yet that supports the functionality at all.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 5c6761ad
...@@ -2646,13 +2646,9 @@ struct cfg80211_ops { ...@@ -2646,13 +2646,9 @@ struct cfg80211_ops {
* @WIPHY_FLAG_SUPPORTS_5_10_MHZ: Device supports 5 MHz and 10 MHz channels. * @WIPHY_FLAG_SUPPORTS_5_10_MHZ: Device supports 5 MHz and 10 MHz channels.
* @WIPHY_FLAG_HAS_CHANNEL_SWITCH: Device supports channel switch in * @WIPHY_FLAG_HAS_CHANNEL_SWITCH: Device supports channel switch in
* beaconing mode (AP, IBSS, Mesh, ...). * beaconing mode (AP, IBSS, Mesh, ...).
* @WIPHY_FLAG_SUPPORTS_WMM_ADMISSION: the device supports setting up WMM
* TSPEC sessions (TID aka TSID 0-7) with the NL80211_CMD_ADD_TX_TS
* command. Standard IEEE 802.11 TSPEC setup is not yet supported, it
* needs to be able to handle Block-Ack agreements and other things.
*/ */
enum wiphy_flags { enum wiphy_flags {
WIPHY_FLAG_SUPPORTS_WMM_ADMISSION = BIT(0), /* use hole at 0 */
/* use hole at 1 */ /* use hole at 1 */
/* use hole at 2 */ /* use hole at 2 */
WIPHY_FLAG_NETNS_OK = BIT(3), WIPHY_FLAG_NETNS_OK = BIT(3),
......
...@@ -4052,6 +4052,10 @@ enum nl80211_ap_sme_features { ...@@ -4052,6 +4052,10 @@ enum nl80211_ap_sme_features {
* multiplexing powersave, ie. can turn off all but one chain * multiplexing powersave, ie. can turn off all but one chain
* and then wake the rest up as required after, for example, * and then wake the rest up as required after, for example,
* rts/cts handshake. * rts/cts handshake.
* @NL80211_FEATURE_SUPPORTS_WMM_ADMISSION: the device supports setting up WMM
* TSPEC sessions (TID aka TSID 0-7) with the %NL80211_CMD_ADD_TX_TS
* command. Standard IEEE 802.11 TSPEC setup is not yet supported, it
* needs to be able to handle Block-Ack agreements and other things.
*/ */
enum nl80211_feature_flags { enum nl80211_feature_flags {
NL80211_FEATURE_SK_TX_STATUS = 1 << 0, NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
...@@ -4080,6 +4084,7 @@ enum nl80211_feature_flags { ...@@ -4080,6 +4084,7 @@ enum nl80211_feature_flags {
NL80211_FEATURE_ACKTO_ESTIMATION = 1 << 23, NL80211_FEATURE_ACKTO_ESTIMATION = 1 << 23,
NL80211_FEATURE_STATIC_SMPS = 1 << 24, NL80211_FEATURE_STATIC_SMPS = 1 << 24,
NL80211_FEATURE_DYNAMIC_SMPS = 1 << 25, NL80211_FEATURE_DYNAMIC_SMPS = 1 << 25,
NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 1 << 26,
}; };
/** /**
......
...@@ -1514,8 +1514,8 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, ...@@ -1514,8 +1514,8 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH) if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)
CMD(channel_switch, CHANNEL_SWITCH); CMD(channel_switch, CHANNEL_SWITCH);
CMD(set_qos_map, SET_QOS_MAP); CMD(set_qos_map, SET_QOS_MAP);
if (rdev->wiphy.flags & if (rdev->wiphy.features &
WIPHY_FLAG_SUPPORTS_WMM_ADMISSION) NL80211_FEATURE_SUPPORTS_WMM_ADMISSION)
CMD(add_tx_ts, ADD_TX_TS); CMD(add_tx_ts, ADD_TX_TS);
} }
/* add into the if now */ /* add into the if now */
...@@ -9557,7 +9557,7 @@ static int nl80211_add_tx_ts(struct sk_buff *skb, struct genl_info *info) ...@@ -9557,7 +9557,7 @@ static int nl80211_add_tx_ts(struct sk_buff *skb, struct genl_info *info)
u16 admitted_time = 0; u16 admitted_time = 0;
int err; int err;
if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_WMM_ADMISSION)) if (!(rdev->wiphy.features & NL80211_FEATURE_SUPPORTS_WMM_ADMISSION))
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC] || if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC] ||
...@@ -9573,12 +9573,10 @@ static int nl80211_add_tx_ts(struct sk_buff *skb, struct genl_info *info) ...@@ -9573,12 +9573,10 @@ static int nl80211_add_tx_ts(struct sk_buff *skb, struct genl_info *info)
return -EINVAL; return -EINVAL;
/* WMM uses TIDs 0-7 even for TSPEC */ /* WMM uses TIDs 0-7 even for TSPEC */
if (tsid < IEEE80211_FIRST_TSPEC_TSID) { if (tsid >= IEEE80211_FIRST_TSPEC_TSID) {
if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_WMM_ADMISSION))
return -EINVAL;
} else {
/* TODO: handle 802.11 TSPEC/admission control /* TODO: handle 802.11 TSPEC/admission control
* need more attributes for that (e.g. BA session requirement) * need more attributes for that (e.g. BA session requirement);
* change the WMM adminssion test above to allow both then
*/ */
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment