David, Thanks for the patch. 2009/8/11 david woo <xinhua_wu@xxxxxxxxxxxxxx>: > [PATCH] mac80211: Fix preq frame process and peer link frame baselen. > > This patch is just to fix rreq reply condition, and peer link confirm frame baselen. > > Signed-off-by: David Woo <xinhua_wu@xxxxxxxxxxxxxx> > --- > diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c > index e1a763e..c065854 100644 > --- a/net/mac80211/mesh_hwmp.c > +++ b/net/mac80211/mesh_hwmp.c > @@ -397,7 +397,8 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata, > > static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata, > struct ieee80211_mgmt *mgmt, > - u8 *preq_elem, u32 metric) { > + u8 *preq_elem, u32 metric) > +{ nak > struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; > struct mesh_path *mpath; > u8 *dst_addr, *orig_addr; > @@ -430,7 +431,7 @@ static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata, > if ((!(mpath->flags & MESH_PATH_DSN_VALID)) || > DSN_LT(mpath->dsn, dst_dsn)) { > mpath->dsn = dst_dsn; > - mpath->flags &= MESH_PATH_DSN_VALID; > + mpath->flags |= MESH_PATH_DSN_VALID; This is a valid fix: at this point we should set the "destination sequence number" valid flag, not zero all flags. > } else if ((!(dst_flags & MP_F_DO)) && > (mpath->flags & MESH_PATH_ACTIVE)) { > reply = true; > @@ -447,14 +448,15 @@ static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata, > > if (reply) { > lifetime = PREQ_IE_LIFETIME(preq_elem); > - ttl = ifmsh->mshcfg.dot11MeshTTL; > - if (ttl != 0) > + ttl = PREQ_IE_TTL(preq_elem); > + if (ttl != 0) { > + ttl = ifmsh->mshcfg.dot11MeshTTL; Nak. The reply to a preq should have the locally configured TTL and not the TTL that was in the PREP. > mesh_path_sel_frame_tx(MPATH_PREP, 0, dst_addr, > cpu_to_le32(dst_dsn), 0, orig_addr, > cpu_to_le32(orig_dsn), mgmt->sa, 0, ttl, > cpu_to_le32(lifetime), cpu_to_le32(metric), > 0, sdata); > - else > + } else > ifmsh->mshstats.dropped_frames_ttl++; > } > > diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c > index cb14253..ffcbad7 100644 > --- a/net/mac80211/mesh_plink.c > +++ b/net/mac80211/mesh_plink.c > @@ -409,7 +409,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m > baselen = (u8 *) mgmt->u.action.u.plink_action.variable - (u8 *) mgmt; > if (mgmt->u.action.u.plink_action.action_code == PLINK_CONFIRM) { > baseaddr += 4; > - baselen -= 4; > + baselen += 4; I'm confused with this. Could you actually establish plinks after changing this? Can you resubmit the patch with only the MESH_PATH_DSN_VALID for now? Thanks! Javier -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html