Commit 6e16d90b authored by Colleen Twitty's avatar Colleen Twitty Committed by Johannes Berg

cfg80211: Userspace may inform kernel of mesh auth method.

Authentication takes place in userspace, but the beacon is
generated in the kernel.  Allow userspace to inform the
kernel of the authentication method so the appropriate
mesh config IE can be set prior to beacon generation when
joining the MBSS.
Signed-off-by: default avatarColleen Twitty <colleen@cozybit.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 7ade7036
...@@ -1161,6 +1161,7 @@ struct mesh_config { ...@@ -1161,6 +1161,7 @@ struct mesh_config {
* @sync_method: which synchronization method to use * @sync_method: which synchronization method to use
* @path_sel_proto: which path selection protocol to use * @path_sel_proto: which path selection protocol to use
* @path_metric: which metric to use * @path_metric: which metric to use
* @auth_id: which authentication method this mesh is using
* @ie: vendor information elements (optional) * @ie: vendor information elements (optional)
* @ie_len: length of vendor information elements * @ie_len: length of vendor information elements
* @is_authenticated: this mesh requires authentication * @is_authenticated: this mesh requires authentication
...@@ -1179,6 +1180,7 @@ struct mesh_setup { ...@@ -1179,6 +1180,7 @@ struct mesh_setup {
u8 sync_method; u8 sync_method;
u8 path_sel_proto; u8 path_sel_proto;
u8 path_metric; u8 path_metric;
u8 auth_id;
const u8 *ie; const u8 *ie;
u8 ie_len; u8 ie_len;
bool is_authenticated; bool is_authenticated;
......
...@@ -2645,6 +2645,10 @@ enum nl80211_meshconf_params { ...@@ -2645,6 +2645,10 @@ enum nl80211_meshconf_params {
* @NL80211_MESH_SETUP_USERSPACE_MPM: Enable this option if userspace will * @NL80211_MESH_SETUP_USERSPACE_MPM: Enable this option if userspace will
* implement an MPM which handles peer allocation and state. * implement an MPM which handles peer allocation and state.
* *
* @NL80211_MESH_SETUP_AUTH_PROTOCOL: Inform the kernel of the authentication
* method (u8, as defined in IEEE 8.4.2.100.6, e.g. 0x1 for SAE).
* Default is no authentication method required.
*
* @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
* *
* @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
...@@ -2658,6 +2662,7 @@ enum nl80211_mesh_setup_params { ...@@ -2658,6 +2662,7 @@ enum nl80211_mesh_setup_params {
NL80211_MESH_SETUP_USERSPACE_AMPE, NL80211_MESH_SETUP_USERSPACE_AMPE,
NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC, NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC,
NL80211_MESH_SETUP_USERSPACE_MPM, NL80211_MESH_SETUP_USERSPACE_MPM,
NL80211_MESH_SETUP_AUTH_PROTOCOL,
/* keep last */ /* keep last */
__NL80211_MESH_SETUP_ATTR_AFTER_LAST, __NL80211_MESH_SETUP_ATTR_AFTER_LAST,
......
...@@ -82,6 +82,7 @@ const struct mesh_setup default_mesh_setup = { ...@@ -82,6 +82,7 @@ const struct mesh_setup default_mesh_setup = {
.sync_method = IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET, .sync_method = IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET,
.path_sel_proto = IEEE80211_PATH_PROTOCOL_HWMP, .path_sel_proto = IEEE80211_PATH_PROTOCOL_HWMP,
.path_metric = IEEE80211_PATH_METRIC_AIRTIME, .path_metric = IEEE80211_PATH_METRIC_AIRTIME,
.auth_id = 0, /* open */
.ie = NULL, .ie = NULL,
.ie_len = 0, .ie_len = 0,
.is_secure = false, .is_secure = false,
......
...@@ -4672,6 +4672,7 @@ static const struct nla_policy ...@@ -4672,6 +4672,7 @@ static const struct nla_policy
[NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL] = { .type = NLA_U8 }, [NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL] = { .type = NLA_U8 },
[NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC] = { .type = NLA_U8 }, [NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC] = { .type = NLA_U8 },
[NL80211_MESH_SETUP_USERSPACE_AUTH] = { .type = NLA_FLAG }, [NL80211_MESH_SETUP_USERSPACE_AUTH] = { .type = NLA_FLAG },
[NL80211_MESH_SETUP_AUTH_PROTOCOL] = { .type = NLA_U8 },
[NL80211_MESH_SETUP_USERSPACE_MPM] = { .type = NLA_FLAG }, [NL80211_MESH_SETUP_USERSPACE_MPM] = { .type = NLA_FLAG },
[NL80211_MESH_SETUP_IE] = { .type = NLA_BINARY, [NL80211_MESH_SETUP_IE] = { .type = NLA_BINARY,
.len = IEEE80211_MAX_DATA_LEN }, .len = IEEE80211_MAX_DATA_LEN },
...@@ -4857,6 +4858,13 @@ static int nl80211_parse_mesh_setup(struct genl_info *info, ...@@ -4857,6 +4858,13 @@ static int nl80211_parse_mesh_setup(struct genl_info *info,
if (setup->is_secure) if (setup->is_secure)
setup->user_mpm = true; setup->user_mpm = true;
if (tb[NL80211_MESH_SETUP_AUTH_PROTOCOL]) {
if (!setup->user_mpm)
return -EINVAL;
setup->auth_id =
nla_get_u8(tb[NL80211_MESH_SETUP_AUTH_PROTOCOL]);
}
return 0; return 0;
} }
......
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