mac80211: mesh STAs only process mesh beacons
authorThomas Pedersen <thomas@cozybit.com>
Sun, 21 Oct 2012 02:03:10 +0000 (19:03 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 23 Oct 2012 17:52:52 +0000 (19:52 +0200)
Before, a mesh STA would execute some code on behalf of AP or IBSS
beacons. Since the mesh stack currently does not consider anything but
other mesh STAs interesting, limit processing to just these and save a
little overhead.

Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mesh.c

index 5bed4fd5ee19e792c186bfa2dc6917ce7a12325a..a350cab4b339aad727157d66de9f1887f3da6ebd 100644 (file)
@@ -703,8 +703,10 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
        ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen,
                               &elems);
 
-       /* ignore beacons from secure mesh peers if our security is off */
-       if (elems.rsn_len && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE)
+       /* ignore non-mesh or secure / unsecure mismatch */
+       if ((!elems.mesh_id || !elems.mesh_config) ||
+           (elems.rsn && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) ||
+           (!elems.rsn && sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE))
                return;
 
        if (elems.ds_params && elems.ds_params_len == 1)
@@ -717,8 +719,7 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
        if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
                return;
 
-       if (elems.mesh_id && elems.mesh_config &&
-           mesh_matches_local(sdata, &elems))
+       if (mesh_matches_local(sdata, &elems))
                mesh_neighbour_update(sdata, mgmt->sa, &elems);
 
        if (ifmsh->sync_ops)