Skip to content

Commit

Permalink
mac80211: mesh_plink: handle confirm frames with new plid
Browse files Browse the repository at this point in the history
The 802.11 standard says when processing a plink confirm
frame:

"If the peerLinkID in the mesh peering instance has not been
set, the Local Link ID field of the Mesh Peering Confirm
request shall be copied into the peerLinkID in the mesh
peering instance."

We were only doing this when receiving an open peering frame,
but it could happen that the open frame gets lost and so we
should handle this case rather than rejecting the confirm and
failing the whole peering process.

Reported-by: Yu Niiro <yu.niiro@gmail.com>
Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Bob Copeland authored and Johannes Berg committed Aug 26, 2014
1 parent 3918edb commit 6c6fa49
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion net/mac80211/mesh_plink.c
Original file line number Diff line number Diff line change
Expand Up @@ -959,7 +959,8 @@ mesh_plink_get_event(struct ieee80211_sub_if_data *sdata,
if (!matches_local)
event = CNF_RJCT;
if (!mesh_plink_free_count(sdata) ||
(sta->llid != llid || sta->plid != plid))
sta->llid != llid ||
(sta->plid && sta->plid != plid))
event = CNF_IGNR;
else
event = CNF_ACPT;
Expand Down Expand Up @@ -1080,6 +1081,10 @@ mesh_process_plink_frame(struct ieee80211_sub_if_data *sdata,
goto unlock_rcu;
}

/* 802.11-2012 13.3.7.2 - update plid on CNF if not set */
if (!sta->plid && event == CNF_ACPT)
sta->plid = plid;

changed |= mesh_plink_fsm(sdata, sta, event);

unlock_rcu:
Expand Down

0 comments on commit 6c6fa49

Please sign in to comment.