diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
Javier Cardona
javier at cozybit.com
Tue Aug 11 21:42:26 EDT 2009
David,
Thanks for the patch.
2009/8/11 david woo <xinhua_wu at realsil.com.cn>:
> [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 at realsil.com.cn>
> ---
> 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
More information about the Devel
mailing list