2012-03-19 05:02:03

by Chun-Yeow Yeoh

[permalink] [raw]
Subject: [PATCH] mac80211: fix the sparse warnings on endian handling in RANN propagation

The HWMP sequence number of received RANN element is compared to decide whether to be
propagated. The sequence number is required to covert from 32bit little endian data into
CPUs endianness for comparison. The same applies to the RANN metric.

Signed-off-by: Chun-Yeow Yeoh <[email protected]>
---
include/linux/ieee80211.h | 6 +++---
net/mac80211/mesh_hwmp.c | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 210e2c3..cd4c7ed 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -640,9 +640,9 @@ struct ieee80211_rann_ie {
u8 rann_hopcount;
u8 rann_ttl;
u8 rann_addr[6];
- u32 rann_seq;
- u32 rann_interval;
- u32 rann_metric;
+ __le32 rann_seq;
+ __le32 rann_interval;
+ __le32 rann_metric;
} __attribute__ ((packed));

enum ieee80211_rann_flags {
diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index 1c6f3d0..f80a9e3 100644
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -748,10 +748,10 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
flags = rann->rann_flags;
root_is_gate = !!(flags & RANN_FLAG_IS_GATE);
orig_addr = rann->rann_addr;
- orig_sn = rann->rann_seq;
+ orig_sn = le32_to_cpu(rann->rann_seq);
hopcount = rann->rann_hopcount;
hopcount++;
- metric = rann->rann_metric;
+ metric = le32_to_cpu(rann->rann_metric);

/* Ignore our own RANNs */
if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0)
--
1.7.0.4



2012-03-19 17:02:41

by Javier Cardona

[permalink] [raw]
Subject: Re: [PATCH] mac80211: fix the sparse warnings on endian handling in RANN propagation

On Mon, Mar 19, 2012 at 6:38 AM, Chun-Yeow Yeoh <[email protected]> wrote:
> The HWMP sequence number of received RANN element is compared to decide whether to be
> propagated. The sequence number is required to covert from 32bit little endian data into
> CPUs endianness for comparison. The same applies to the RANN metric.
>
> Signed-off-by: Chun-Yeow Yeoh <[email protected]>
Signed-off-by: Javier Cardona <[email protected]>

> ---
> ?include/linux/ieee80211.h | ? ?6 +++---
> ?net/mac80211/mesh_hwmp.c ?| ? ?4 ++--
> ?2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
> index 210e2c3..cd4c7ed 100644
> --- a/include/linux/ieee80211.h
> +++ b/include/linux/ieee80211.h
> @@ -640,9 +640,9 @@ struct ieee80211_rann_ie {
> ? ? ? ?u8 rann_hopcount;
> ? ? ? ?u8 rann_ttl;
> ? ? ? ?u8 rann_addr[6];
> - ? ? ? u32 rann_seq;
> - ? ? ? u32 rann_interval;
> - ? ? ? u32 rann_metric;
> + ? ? ? __le32 rann_seq;
> + ? ? ? __le32 rann_interval;
> + ? ? ? __le32 rann_metric;
> ?} __attribute__ ((packed));
>
> ?enum ieee80211_rann_flags {
> diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
> index 1c6f3d0..f80a9e3 100644
> --- a/net/mac80211/mesh_hwmp.c
> +++ b/net/mac80211/mesh_hwmp.c
> @@ -748,10 +748,10 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
> ? ? ? ?flags = rann->rann_flags;
> ? ? ? ?root_is_gate = !!(flags & RANN_FLAG_IS_GATE);
> ? ? ? ?orig_addr = rann->rann_addr;
> - ? ? ? orig_sn = rann->rann_seq;
> + ? ? ? orig_sn = le32_to_cpu(rann->rann_seq);
> ? ? ? ?hopcount = rann->rann_hopcount;
> ? ? ? ?hopcount++;
> - ? ? ? metric = rann->rann_metric;
> + ? ? ? metric = le32_to_cpu(rann->rann_metric);
>
> ? ? ? ?/* ?Ignore our own RANNs */
> ? ? ? ?if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0)
> --
> 1.7.0.4
>



--
Javier Cardona
cozybit Inc.
http://www.cozybit.com