|
@@ -5353,6 +5353,18 @@ static int nl80211_check_s32(const struct nlattr *nla, s32 min, s32 max, s32 *ou
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int nl80211_check_power_mode(const struct nlattr *nla,
|
|
|
|
+ enum nl80211_mesh_power_mode min,
|
|
|
|
+ enum nl80211_mesh_power_mode max,
|
|
|
|
+ enum nl80211_mesh_power_mode *out)
|
|
|
|
+{
|
|
|
|
+ u32 val = nla_get_u32(nla);
|
|
|
|
+ if (val < min || val > max)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ *out = val;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static int nl80211_parse_mesh_config(struct genl_info *info,
|
|
static int nl80211_parse_mesh_config(struct genl_info *info,
|
|
struct mesh_config *cfg,
|
|
struct mesh_config *cfg,
|
|
u32 *mask_out)
|
|
u32 *mask_out)
|
|
@@ -5497,7 +5509,7 @@ do { \
|
|
NL80211_MESH_POWER_ACTIVE,
|
|
NL80211_MESH_POWER_ACTIVE,
|
|
NL80211_MESH_POWER_MAX,
|
|
NL80211_MESH_POWER_MAX,
|
|
mask, NL80211_MESHCONF_POWER_MODE,
|
|
mask, NL80211_MESHCONF_POWER_MODE,
|
|
- nl80211_check_u32);
|
|
|
|
|
|
+ nl80211_check_power_mode);
|
|
FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshAwakeWindowDuration,
|
|
FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshAwakeWindowDuration,
|
|
0, 65535, mask,
|
|
0, 65535, mask,
|
|
NL80211_MESHCONF_AWAKE_WINDOW, nl80211_check_u16);
|
|
NL80211_MESHCONF_AWAKE_WINDOW, nl80211_check_u16);
|