Search Linux Wireless

Re: diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux