diff options
author | Chun-Yeow Yeoh <yeohchunyeow@gmail.com> | 2012-01-20 12:02:16 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-01-27 14:56:56 -0500 |
commit | 94f9065648a2645b28187b44ec7778c30cf58758 (patch) | |
tree | 734ee883e3fbd99de04240da97716d773d64bb6d /net/wireless | |
parent | 2da8f419e78a0ebccc91c095328278fe668a7932 (diff) |
{nl,cfg,mac}80211: Add support of setting non-forwarding entity in Mesh
A mesh node that joins the mesh network is by default a forwarding entity. This patch allows
the mesh node to set as non-forwarding entity. Whenever dot11MeshForwarding is set to 0, the
mesh node can prevent itself from forwarding the traffic which is not destined to him.
Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/mesh.c | 1 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c index 8c550df13037..9d3e3b6bfcf4 100644 --- a/net/wireless/mesh.c +++ b/net/wireless/mesh.c | |||
@@ -55,6 +55,7 @@ const struct mesh_config default_mesh_config = { | |||
55 | .min_discovery_timeout = MESH_MIN_DISCOVERY_TIMEOUT, | 55 | .min_discovery_timeout = MESH_MIN_DISCOVERY_TIMEOUT, |
56 | .dot11MeshHWMPRannInterval = MESH_RANN_INTERVAL, | 56 | .dot11MeshHWMPRannInterval = MESH_RANN_INTERVAL, |
57 | .dot11MeshGateAnnouncementProtocol = false, | 57 | .dot11MeshGateAnnouncementProtocol = false, |
58 | .dot11MeshForwarding = true, | ||
58 | }; | 59 | }; |
59 | 60 | ||
60 | const struct mesh_setup default_mesh_setup = { | 61 | const struct mesh_setup default_mesh_setup = { |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 5cefd74ab47d..c42173f947ef 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -3258,6 +3258,8 @@ static int nl80211_get_mesh_config(struct sk_buff *skb, | |||
3258 | cur_params.dot11MeshHWMPRannInterval); | 3258 | cur_params.dot11MeshHWMPRannInterval); |
3259 | NLA_PUT_U8(msg, NL80211_MESHCONF_GATE_ANNOUNCEMENTS, | 3259 | NLA_PUT_U8(msg, NL80211_MESHCONF_GATE_ANNOUNCEMENTS, |
3260 | cur_params.dot11MeshGateAnnouncementProtocol); | 3260 | cur_params.dot11MeshGateAnnouncementProtocol); |
3261 | NLA_PUT_U8(msg, NL80211_MESHCONF_FORWARDING, | ||
3262 | cur_params.dot11MeshForwarding); | ||
3261 | nla_nest_end(msg, pinfoattr); | 3263 | nla_nest_end(msg, pinfoattr); |
3262 | genlmsg_end(msg, hdr); | 3264 | genlmsg_end(msg, hdr); |
3263 | return genlmsg_reply(msg, info); | 3265 | return genlmsg_reply(msg, info); |
@@ -3289,6 +3291,7 @@ static const struct nla_policy nl80211_meshconf_params_policy[NL80211_MESHCONF_A | |||
3289 | [NL80211_MESHCONF_HWMP_ROOTMODE] = { .type = NLA_U8 }, | 3291 | [NL80211_MESHCONF_HWMP_ROOTMODE] = { .type = NLA_U8 }, |
3290 | [NL80211_MESHCONF_HWMP_RANN_INTERVAL] = { .type = NLA_U16 }, | 3292 | [NL80211_MESHCONF_HWMP_RANN_INTERVAL] = { .type = NLA_U16 }, |
3291 | [NL80211_MESHCONF_GATE_ANNOUNCEMENTS] = { .type = NLA_U8 }, | 3293 | [NL80211_MESHCONF_GATE_ANNOUNCEMENTS] = { .type = NLA_U8 }, |
3294 | [NL80211_MESHCONF_FORWARDING] = { .type = NLA_U8 }, | ||
3292 | }; | 3295 | }; |
3293 | 3296 | ||
3294 | static const struct nla_policy | 3297 | static const struct nla_policy |
@@ -3378,6 +3381,8 @@ do {\ | |||
3378 | dot11MeshGateAnnouncementProtocol, mask, | 3381 | dot11MeshGateAnnouncementProtocol, mask, |
3379 | NL80211_MESHCONF_GATE_ANNOUNCEMENTS, | 3382 | NL80211_MESHCONF_GATE_ANNOUNCEMENTS, |
3380 | nla_get_u8); | 3383 | nla_get_u8); |
3384 | FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshForwarding, | ||
3385 | mask, NL80211_MESHCONF_FORWARDING, nla_get_u8); | ||
3381 | if (mask_out) | 3386 | if (mask_out) |
3382 | *mask_out = mask; | 3387 | *mask_out = mask; |
3383 | 3388 | ||