Return-path: Received: from mail-ob0-f174.google.com ([209.85.214.174]:50802 "EHLO mail-ob0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752370Ab2DCCah convert rfc822-to-8bit (ORCPT ); Mon, 2 Apr 2012 22:30:37 -0400 Received: by obbtb18 with SMTP id tb18so2935259obb.19 for ; Mon, 02 Apr 2012 19:30:36 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1333225930-320-4-git-send-email-ashok@cozybit.com> References: <1333225930-320-1-git-send-email-ashok@cozybit.com> <1333225930-320-4-git-send-email-ashok@cozybit.com> Date: Mon, 2 Apr 2012 19:30:36 -0700 Message-ID: (sfid-20120403_043045_803886_F6BEC502) Subject: Re: [[PATCH v2 4/4] mac80211: Check basic rates when peering From: Ashok Nagarajan To: linux-wireless@vger.kernel.org Cc: javier@cozybit.com, thomas@cozybit.com, johannes@sipsolutions.net, devel@lists.open80211s.org, linville@tuxdriver.com, Ashok Nagarajan Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-wireless-owner@vger.kernel.org List-ID: Hello John, Please do not apply this patch set as they might rise conflicts. Version 3 is coming. Thanks, Ashok On Sat, Mar 31, 2012 at 1:32 PM, Ashok Nagarajan wrote: > Section 13.2.3 of IEEE 80211s standard requires BSSBasicRateSet of mesh nodes > to be identical to establish peer link. > > Signed-off-by: Ashok Nagarajan > Signed-off-by: Thomas Pedersen > --- > ?net/mac80211/mesh.c ? ? ? | ? 15 ++++++++++----- > ?net/mac80211/mesh.h ? ? ? | ? ?2 +- > ?net/mac80211/mesh_plink.c | ? ?2 +- > ?3 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c > index 964d8a9..a67b24e 100644 > --- a/net/mac80211/mesh.c > +++ b/net/mac80211/mesh.c > @@ -69,11 +69,13 @@ static void ieee80211_mesh_housekeeping_timer(unsigned long data) > ?* > ?* @ie: information elements of a management frame from the mesh peer > ?* @sdata: local mesh subif > + * @basic_rates: BSSBasicRateSet of the peer candidate > ?* > ?* This function checks if the mesh configuration of a mesh point matches the > ?* local mesh configuration, i.e. if both nodes belong to the same mesh network. > ?*/ > -bool mesh_matches_local(struct ieee802_11_elems *ie, struct ieee80211_sub_if_data *sdata) > +bool mesh_matches_local(struct ieee802_11_elems *ie, > + ? ? ? ? ? ? ? ? ? ? ? struct ieee80211_sub_if_data *sdata, u32 basic_rates) > ?{ > ? ? ? ?struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; > ? ? ? ?struct ieee80211_local *local = sdata->local; > @@ -97,6 +99,9 @@ bool mesh_matches_local(struct ieee802_11_elems *ie, struct ieee80211_sub_if_dat > ? ? ? ? ? ? (ifmsh->mesh_auth_id == ie->mesh_config->meshconf_auth))) > ? ? ? ? ? ? ? ?goto mismatch; > > + ? ? ? if (sdata->vif.bss_conf.basic_rates != basic_rates) > + ? ? ? ? ? ? ? goto mismatch; > + > ? ? ? ?/* disallow peering with mismatched channel types for now */ > ? ? ? ?/*if (ie->ht_info_elem && > ? ? ? ? ? ?(local->_oper_channel_type != > @@ -653,13 +658,13 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, > ? ? ? ?if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) > ? ? ? ? ? ? ? ?return; > > + ? ? ? supp_rates = ieee80211_sta_get_rates(local, &elems, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?band, &basic_rates); > + > ? ? ? ?if (elems.mesh_id && elems.mesh_config && > - ? ? ? ? ? mesh_matches_local(&elems, sdata)) { > - ? ? ? ? ? ? ? supp_rates = ieee80211_sta_get_rates(local, &elems, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?band, &basic_rates); > + ? ? ? ? ? mesh_matches_local(&elems, sdata, basic_rates)) > ? ? ? ? ? ? ? ?mesh_neighbour_update(mgmt, supp_rates, sdata, &elems, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rx_status); > - ? ? ? } > ?} > > ?static void ieee80211_mesh_rx_mgmt_action(struct ieee80211_sub_if_data *sdata, > diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h > index 7d5d34b..0e40c8a 100644 > --- a/net/mac80211/mesh.h > +++ b/net/mac80211/mesh.h > @@ -204,7 +204,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, > ?int mesh_rmc_check(u8 *addr, struct ieee80211s_hdr *mesh_hdr, > ? ? ? ? ? ? ? ?struct ieee80211_sub_if_data *sdata); > ?bool mesh_matches_local(struct ieee802_11_elems *ie, > - ? ? ? ? ? ? ? struct ieee80211_sub_if_data *sdata); > + ? ? ? ? ? ? ? ? ? ? ? struct ieee80211_sub_if_data *sdata, u32 basic_rates); > ?void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); > ?void mesh_mgmt_ies_add(struct sk_buff *skb, > ? ? ? ? ? ? ? ?struct ieee80211_sub_if_data *sdata); > diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c > index 133f267..d742355 100644 > --- a/net/mac80211/mesh_plink.c > +++ b/net/mac80211/mesh_plink.c > @@ -573,7 +573,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rx_status->band, &basic_rates); > > ? ? ? ?if (ftype != WLAN_SP_MESH_PEERING_CLOSE && > - ? ? ? ? ? (!mesh_matches_local(&elems, sdata))) { > + ? ? ? ? ? (!mesh_matches_local(&elems, sdata, basic_rates))) { > ? ? ? ? ? ? ? ?matches_local = false; > ? ? ? ? ? ? ? ?switch (ftype) { > ? ? ? ? ? ? ? ?case WLAN_SP_MESH_PEERING_OPEN: > -- > 1.7.5.4 >