aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorAshok Nagarajan <ashok@cozybit.com>2012-02-28 20:04:08 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-05 15:23:15 -0500
commit5533513784a88049e19dd2ab380a452b61e5171e (patch)
tree8e48d0cf30f3e94475ee80479308e98908b3c0bc /net/wireless
parent5809802180b2b638762465cbad3f51a9ac8ff0b3 (diff)
{nl,cfg,mac}80211: Implement RSSI threshold for mesh peering
Mesh peer links are established only if average rssi of the peer candidate satisfies the threshold. This is not in 802.11s specification but was requested by David Fulgham, an open80211s user. This is a way to avoid marginal peer links with stations that are barely within range. This patch adds a new mesh configuration parameter, mesh_rssi_threshold. This feature is supported only for hardwares that report signal in dBm. Signed-off-by: Ashok Nagarajan <ashok@cozybit.com> Signed-off-by: Javier Cardona <javier@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/mesh.c3
-rw-r--r--net/wireless/nl80211.c5
2 files changed, 8 insertions, 0 deletions
diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c
index 9d3e3b6bfcf4..ba21ab22187b 100644
--- a/net/wireless/mesh.c
+++ b/net/wireless/mesh.c
@@ -23,6 +23,8 @@
23#define MESH_PERR_MIN_INT 100 23#define MESH_PERR_MIN_INT 100
24#define MESH_DIAM_TRAVERSAL_TIME 50 24#define MESH_DIAM_TRAVERSAL_TIME 50
25 25
26#define MESH_RSSI_THRESHOLD 0
27
26/* 28/*
27 * A path will be refreshed if it is used PATH_REFRESH_TIME milliseconds 29 * A path will be refreshed if it is used PATH_REFRESH_TIME milliseconds
28 * before timing out. This way it will remain ACTIVE and no data frames 30 * before timing out. This way it will remain ACTIVE and no data frames
@@ -56,6 +58,7 @@ const struct mesh_config default_mesh_config = {
56 .dot11MeshHWMPRannInterval = MESH_RANN_INTERVAL, 58 .dot11MeshHWMPRannInterval = MESH_RANN_INTERVAL,
57 .dot11MeshGateAnnouncementProtocol = false, 59 .dot11MeshGateAnnouncementProtocol = false,
58 .dot11MeshForwarding = true, 60 .dot11MeshForwarding = true,
61 .rssi_threshold = MESH_RSSI_THRESHOLD,
59}; 62};
60 63
61const struct mesh_setup default_mesh_setup = { 64const struct mesh_setup default_mesh_setup = {
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 1998c3682774..25a470abd21d 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -3290,6 +3290,8 @@ static int nl80211_get_mesh_config(struct sk_buff *skb,
3290 cur_params.dot11MeshGateAnnouncementProtocol); 3290 cur_params.dot11MeshGateAnnouncementProtocol);
3291 NLA_PUT_U8(msg, NL80211_MESHCONF_FORWARDING, 3291 NLA_PUT_U8(msg, NL80211_MESHCONF_FORWARDING,
3292 cur_params.dot11MeshForwarding); 3292 cur_params.dot11MeshForwarding);
3293 NLA_PUT_U32(msg, NL80211_MESHCONF_RSSI_THRESHOLD,
3294 cur_params.rssi_threshold);
3293 nla_nest_end(msg, pinfoattr); 3295 nla_nest_end(msg, pinfoattr);
3294 genlmsg_end(msg, hdr); 3296 genlmsg_end(msg, hdr);
3295 return genlmsg_reply(msg, info); 3297 return genlmsg_reply(msg, info);
@@ -3322,6 +3324,7 @@ static const struct nla_policy nl80211_meshconf_params_policy[NL80211_MESHCONF_A
3322 [NL80211_MESHCONF_HWMP_RANN_INTERVAL] = { .type = NLA_U16 }, 3324 [NL80211_MESHCONF_HWMP_RANN_INTERVAL] = { .type = NLA_U16 },
3323 [NL80211_MESHCONF_GATE_ANNOUNCEMENTS] = { .type = NLA_U8 }, 3325 [NL80211_MESHCONF_GATE_ANNOUNCEMENTS] = { .type = NLA_U8 },
3324 [NL80211_MESHCONF_FORWARDING] = { .type = NLA_U8 }, 3326 [NL80211_MESHCONF_FORWARDING] = { .type = NLA_U8 },
3327 [NL80211_MESHCONF_RSSI_THRESHOLD] = { .type = NLA_U32},
3325}; 3328};
3326 3329
3327static const struct nla_policy 3330static const struct nla_policy
@@ -3413,6 +3416,8 @@ do {\
3413 nla_get_u8); 3416 nla_get_u8);
3414 FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshForwarding, 3417 FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshForwarding,
3415 mask, NL80211_MESHCONF_FORWARDING, nla_get_u8); 3418 mask, NL80211_MESHCONF_FORWARDING, nla_get_u8);
3419 FILL_IN_MESH_PARAM_IF_SET(tb, cfg, rssi_threshold,
3420 mask, NL80211_MESHCONF_RSSI_THRESHOLD, nla_get_u32);
3416 if (mask_out) 3421 if (mask_out)
3417 *mask_out = mask; 3422 *mask_out = mask;
3418 3423