old mode 100644
new mode 100755
@@ -3467,6 +3467,16 @@ struct cfg80211_update_ft_ies_params {
size_t ie_len;
};
+#ifdef CONFIG_SCSC_WLAN_OCE
+struct cfg80211_external_fils_assoc_params {
+ const u8 *fils_kek;
+ size_t fils_kek_len;
+ const u8 *ie;
+ size_t ie_len;
+ const u8 *fils_nonces;
+ size_t fils_nonces_len;
+};
+#endif
/**
* struct cfg80211_mgmt_tx_params - mgmt tx parameters
*
@@ -4626,6 +4636,10 @@ struct cfg80211_ops {
struct net_device *dev);
int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_update_ft_ies_params *ftie);
+#ifdef CONFIG_SCSC_WLAN_OCE
+ int (*set_fils_assoc_params)(struct wiphy *wiphy, struct net_device *dev,
+ struct cfg80211_external_fils_assoc_params *ftie);
+#endif
int (*crit_proto_start)(struct wiphy *wiphy,
struct wireless_dev *wdev,
enum nl80211_crit_proto_id protocol,
old mode 100644
new mode 100755
@@ -1562,6 +1562,10 @@ enum nl80211_commands {
NL80211_CMD_SET_HW_TIMESTAMP,
+ NL80211_CMD_SET_SAR_SPECS,
+
+ NL80211_CMD_FILS_ASSOC_REQ_INFO,
+
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
@@ -1581,6 +1585,7 @@ enum nl80211_commands {
#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE
#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT
+#define NL80211_CMD_FILS_ASSOC_REQ_INFO NL80211_CMD_FILS_ASSOC_REQ_INFO
#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
@@ -3302,6 +3307,14 @@ enum nl80211_attrs {
NL80211_ATTR_DISABLE_HE,
+ NL80211_ATTR_FILS_ASSOC_IE,
+
+ NL80211_ATTR_RECONNECT_REQUESTED,
+
+ NL80211_ATTR_SAR_SPEC,
+
+ NL80211_ATTR_DISABLE_HE,
+
NL80211_ATTR_OBSS_COLOR_BITMAP,
NL80211_ATTR_COLOR_CHANGE_COUNT,
@@ -6443,7 +6456,7 @@ enum nl80211_ext_feature_index {
NL80211_EXT_FEATURE_PUNCT,
NL80211_EXT_FEATURE_SECURE_NAN,
NL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA,
-
+ NL80211_EXT_FEATURE_EXTERNAL_AUTH_FILS,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,
MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
@@ -67,6 +67,11 @@ config CFG80211_DEVELOPER_WARNINGS
Say Y only if you are developing cfg80211 or a driver based
on it (or mac80211).
+config SCSC_WLAN_OCE
+ bool "OCE Auth Support with External Auth"
+ default y
+ help
+ This option enables external Auth Support for FILS Authentication
config CFG80211_CERTIFICATION_ONUS
bool "cfg80211 certification onus"
old mode 100644
new mode 100755
@@ -559,6 +559,11 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_IE] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
validate_ie_attr,
IEEE80211_MAX_DATA_LEN),
+#ifdef CONFIG_SCSC_WLAN_OCE
+ [NL80211_ATTR_FILS_ASSOC_IE] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
+ validate_ie_attr,
+ IEEE80211_MAX_DATA_LEN),
+#endif
[NL80211_ATTR_SCAN_FREQUENCIES] = { .type = NLA_NESTED },
[NL80211_ATTR_SCAN_SSIDS] = { .type = NLA_NESTED },
@@ -5844,10 +5849,11 @@ static bool nl80211_valid_auth_type(struct cfg80211_registered_device *rdev,
if (auth_type == NL80211_AUTHTYPE_FILS_SK_PFS ||
auth_type == NL80211_AUTHTYPE_FILS_PK)
return false;
- if (!wiphy_ext_feature_isset(
- &rdev->wiphy,
- NL80211_EXT_FEATURE_FILS_SK_OFFLOAD) &&
- auth_type == NL80211_AUTHTYPE_FILS_SK)
+ if (!(wiphy_ext_feature_isset(&rdev->wiphy, NL80211_EXT_FEATURE_FILS_SK_OFFLOAD)
+#ifdef CONFIG_SCSC_WLAN_OCE
+ || wiphy_ext_feature_isset(&rdev->wiphy, NL80211_EXT_FEATURE_EXTERNAL_AUTH_FILS)
+#endif
+ ) && auth_type == NL80211_AUTHTYPE_FILS_SK)
return false;
return true;
case NL80211_CMD_START_AP:
@@ -11929,9 +11935,11 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
}
}
- if (wiphy_ext_feature_isset(&rdev->wiphy,
- NL80211_EXT_FEATURE_FILS_SK_OFFLOAD) &&
- info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] &&
+ if ((wiphy_ext_feature_isset(&rdev->wiphy, NL80211_EXT_FEATURE_FILS_SK_OFFLOAD)
+#ifdef CONFIG_SCSC_WLAN_OCE
+ || wiphy_ext_feature_isset(&rdev->wiphy, NL80211_EXT_FEATURE_EXTERNAL_AUTH_FILS)
+#endif
+ ) && info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] &&
info->attrs[NL80211_ATTR_FILS_ERP_REALM] &&
info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] &&
info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
@@ -12013,8 +12021,8 @@ static int nl80211_update_connect_params(struct sk_buff *skb,
changed |= UPDATE_ASSOC_IES;
}
- fils_sk_offload = wiphy_ext_feature_isset(&rdev->wiphy,
- NL80211_EXT_FEATURE_FILS_SK_OFFLOAD);
+ fils_sk_offload = wiphy_ext_feature_isset(&rdev->wiphy, NL80211_EXT_FEATURE_FILS_SK_OFFLOAD) ||
+ wiphy_ext_feature_isset(&rdev->wiphy, NL80211_EXT_FEATURE_EXTERNAL_AUTH_FILS);
/*
* when driver supports fils-sk offload all attributes must be
@@ -14789,6 +14797,33 @@ static int nl80211_update_ft_ies(struct sk_buff *skb, struct genl_info *info)
return rdev_update_ft_ies(rdev, dev, &ft_params);
}
+#ifdef CONFIG_SCSC_WLAN_OCE
+static int nl80211_fils_assoc_req_ies(struct sk_buff *skb, struct genl_info *info)
+{
+ struct cfg80211_registered_device *rdev = info->user_ptr[0];
+ struct cfg80211_external_fils_assoc_params fils_params;
+ struct net_device *dev = info->user_ptr[1];
+
+ if (!rdev->ops->set_fils_assoc_params)
+ return -EOPNOTSUPP;
+
+ if (!info->attrs[NL80211_ATTR_FILS_KEK] ||
+ !info->attrs[NL80211_ATTR_FILS_ASSOC_IE] ||
+ !info->attrs[NL80211_ATTR_FILS_NONCES])
+ return -EINVAL;
+
+ memset(&fils_params, 0, sizeof(fils_params));
+ fils_params.fils_kek = nla_data(info->attrs[NL80211_ATTR_FILS_KEK]);
+ fils_params.fils_kek_len = nla_len(info->attrs[NL80211_ATTR_FILS_KEK]);
+ fils_params.ie = nla_data(info->attrs[NL80211_ATTR_FILS_ASSOC_IE]);
+ fils_params.ie_len = nla_len(info->attrs[NL80211_ATTR_FILS_ASSOC_IE]);
+ fils_params.fils_nonces = nla_data(info->attrs[NL80211_ATTR_FILS_NONCES]);
+ fils_params.fils_nonces_len = nla_len(info->attrs[NL80211_ATTR_FILS_NONCES]);
+
+ return rdev_fils_assoc_req_ies(rdev, dev, &fils_params);
+}
+#endif
+
static int nl80211_crit_protocol_start(struct sk_buff *skb,
struct genl_info *info)
{
@@ -16631,6 +16666,16 @@ static const struct genl_small_ops nl80211_small_ops[] = {
.doit = nl80211_set_wiphy,
.flags = GENL_UNS_ADMIN_PERM,
},
+#ifdef CONFIG_SCSC_WLAN_OCE
+ {
+ .cmd = NL80211_CMD_FILS_ASSOC_REQ_INFO,
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
+ .doit = nl80211_fils_assoc_req_ies,
+ .flags = GENL_UNS_ADMIN_PERM,
+ .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
+ NL80211_FLAG_NEED_RTNL,
+ },
+#endif
{
.cmd = NL80211_CMD_GET_INTERFACE,
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
old mode 100644
new mode 100755
@@ -1062,6 +1062,20 @@ static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev,
return ret;
}
+#ifdef CONFIG_SCSC_WLAN_OCE
+static inline int rdev_fils_assoc_req_ies(struct cfg80211_registered_device *rdev,
+ struct net_device *dev,
+ struct cfg80211_external_fils_assoc_params *params)
+{
+ int ret;
+
+ trace_rdev_fils_assoc_req_ies(&rdev->wiphy, dev, params);
+ ret = rdev->ops->set_fils_assoc_params(&rdev->wiphy, dev, params);
+ trace_rdev_return_int(&rdev->wiphy, ret);
+ return ret;
+}
+#endif
+
static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
enum nl80211_crit_proto_id protocol,
old mode 100644
new mode 100755
@@ -2256,6 +2256,30 @@ TRACE_EVENT(rdev_update_ft_ies,
WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->md)
);
+#ifdef CONFIG_SCSC_WLAN_OCE
+TRACE_EVENT(rdev_fils_assoc_req_ies,
+ TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
+ struct cfg80211_external_fils_assoc_params *filsie),
+ TP_ARGS(wiphy, netdev, filsie),
+ TP_STRUCT__entry(
+ WIPHY_ENTRY
+ NETDEV_ENTRY
+ __dynamic_array(u8, kek, filsie->fils_kek_len)
+ __dynamic_array(u8, ie, filsie->ie_len)
+ __dynamic_array(u8, nonces, filsie->fils_nonces_len)
+ ),
+ TP_fast_assign(
+ WIPHY_ASSIGN;
+ NETDEV_ASSIGN;
+ memcpy(__get_dynamic_array(kek), filsie->fils_kek, filsie->fils_kek_len);
+ memcpy(__get_dynamic_array(ie), filsie->ie, filsie->ie_len);
+ memcpy(__get_dynamic_array(ie), filsie->fils_nonces, filsie->fils_nonces_len);
+ ),
+ TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ,
+ WIPHY_PR_ARG, NETDEV_PR_ARG)
+);
+#endif
+
TRACE_EVENT(rdev_crit_proto_start,
TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
enum nl80211_crit_proto_id protocol, u16 duration),