cfg80211: support disabling EHT mode
authorMuna Sinada <quic_msinada@quicinc.com>
Wed, 23 Mar 2022 22:46:35 +0000 (15:46 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 4 May 2022 20:50:01 +0000 (22:50 +0200)
Allow userspace to disable EHT mode during association.

Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
Link: https://lore.kernel.org/r/20220323224636.20211-1-quic_alokad@quicinc.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
include/uapi/linux/nl80211.h
net/wireless/nl80211.c

index cd1212113901cbee50ddc2ddd0d1b3abbb8e2d85..6a3e3f0a86154f270b33ed0b8653b17f6acdbb1c 100644 (file)
@@ -2735,6 +2735,7 @@ struct cfg80211_auth_request {
  *     userspace if this flag is set. Only applicable for cfg80211_connect()
  *     request (connect callback).
  * @ASSOC_REQ_DISABLE_HE:  Disable HE
+ * @ASSOC_REQ_DISABLE_EHT:  Disable EHT
  */
 enum cfg80211_assoc_req_flags {
        ASSOC_REQ_DISABLE_HT                    = BIT(0),
@@ -2742,6 +2743,7 @@ enum cfg80211_assoc_req_flags {
        ASSOC_REQ_USE_RRM                       = BIT(2),
        CONNECT_REQ_EXTERNAL_AUTH_SUPPORT       = BIT(3),
        ASSOC_REQ_DISABLE_HE                    = BIT(4),
+       ASSOC_REQ_DISABLE_EHT                   = BIT(5),
 };
 
 /**
index 0568a79097b8aaac2c0e04eb41a636e99d0618b4..d9490e3062a70a52206e5ac0a9becfa35bee66f2 100644 (file)
@@ -3175,6 +3175,8 @@ enum nl80211_attrs {
 
        NL80211_ATTR_EHT_CAPABILITY,
 
+       NL80211_ATTR_DISABLE_EHT,
+
        /* add attributes here, update the policy in nl80211.c */
 
        __NL80211_ATTR_AFTER_LAST,
index 174f254ee947492979c0b4792735cf9e105920eb..2c64baae9863801d2ce8572ef52e1529e158e58c 100644 (file)
@@ -791,6 +791,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
                NLA_POLICY_RANGE(NLA_BINARY,
                                 NL80211_EHT_MIN_CAPABILITY_LEN,
                                 NL80211_EHT_MAX_CAPABILITY_LEN),
+       [NL80211_ATTR_DISABLE_EHT] = { .type = NLA_FLAG },
 };
 
 /* policy for the key attributes */
@@ -10378,6 +10379,9 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
        if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE]))
                req.flags |= ASSOC_REQ_DISABLE_HE;
 
+       if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT]))
+               req.flags |= ASSOC_REQ_DISABLE_EHT;
+
        if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
                memcpy(&req.vht_capa_mask,
                       nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]),
@@ -11166,6 +11170,9 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
        if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE]))
                connect.flags |= ASSOC_REQ_DISABLE_HE;
 
+       if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT]))
+               connect.flags |= ASSOC_REQ_DISABLE_EHT;
+
        if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
                memcpy(&connect.vht_capa_mask,
                       nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]),