mac80211: use 4-byte mesh sequence number
Subsystems (2)
PATCH 1/1 mac80211: use 4-byte mesh sequence number
This follows the new 802.11s/D2.0 draft.
Signed-off-by Luis Carlos Cobo <[email protected]>
--- include/linux/ieee80211.h | 2 +- net/mac80211/ieee80211_i.h | 2 +- net/mac80211/mesh.c | 17 +++++------------ net/mac80211/mesh.h | 2 +- 4 files changed, 8 insertions(+), 15 deletions(-)
include/linux/ieee80211.h +1 -1
@@ -113,7 +113,7 @@ struct ieee80211_hdr {struct ieee80211s_hdr {u8 flags;u8 ttl; -u8 seqnum[3 ]; +__le32 seqnum;u8 eaddr1[6 ];u8 eaddr2[6 ];u8 eaddr3[6 ];
net/mac80211/ieee80211_i.h +1 -1
@@ -354,7 +354,7 @@ struct ieee80211_if_sta {int preq_queue_len;struct mesh_stats mshstats;struct mesh_config mshcfg; -u8 mesh_seqnum[3 ]; +u32 mesh_seqnum;bool accepting_plinks;#endif u16 aid;
net/mac80211/mesh.c +5 -12
@@ -8,6 +8,7 @@* published by the Free Software Foundation. */ +#include <asm/unaligned.h> #include "ieee80211_i.h" #include "mesh.h"
@@ -167,8 +168,8 @@ int mesh_rmc_check(u8 *sa, struct ieee80211s_hdr *mesh_hdr,struct rmc_entry *p, *n;/* Don't care about endianness since only match matters */ -memcpy (&seqnum, mesh_hdr->seqnum,sizeof (mesh_hdr->seqnum)); - idx = mesh_hdr->seqnum[0 ] & rmc->idx_mask; +memcpy (&seqnum, &mesh_hdr->seqnum,sizeof (mesh_hdr->seqnum)); + idx =le32_to_cpu (mesh_hdr->seqnum) & rmc->idx_mask;list_for_each_entry_safe (p, n, &rmc->bucket[idx].list, list) { ++entries; if (time_after(jiffies, p->exp_time) ||
@@ -393,16 +394,8 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, { meshhdr->flags =0 ; meshhdr->ttl = sdata->u.sta.mshcfg.dot11MeshTTL; - - meshhdr->seqnum[0 ] = sdata->u.sta.mesh_seqnum[0 ]++; - meshhdr->seqnum[1 ] = sdata->u.sta.mesh_seqnum[1 ]; - meshhdr->seqnum[2 ] = sdata->u.sta.mesh_seqnum[2 ]; - -if (sdata->u.sta.mesh_seqnum[0 ] ==0 ) { - sdata->u.sta.mesh_seqnum[1 ]++; -if (sdata->u.sta.mesh_seqnum[1 ] ==0 ) - sdata->u.sta.mesh_seqnum[2 ]++; - } +put_unaligned (cpu_to_le32 (sdata->u.sta.mesh_seqnum), &meshhdr->seqnum); + sdata->u.sta.mesh_seqnum++;return 5 ; }
net/mac80211/mesh.h +1 -1
@@ -139,7 +139,7 @@ struct rmc_entry {struct mesh_rmc {struct rmc_entry bucket[RMC_BUCKETS ]; -u8 idx_mask; +u32 idx_mask; };
Signature · 1 line
1.5.4.3
Johannes Berg
maintainerQuoted 1 line · Luis Carlos Cobo
This follows the new 802.11s/D2.0 draft.
Umm, I just realised that
Quoted 5 lines
include/linux/ieee80211.h | 2 +- net/mac80211/ieee80211_i.h | 2 +- net/mac80211/mesh.c | 17 +++++------------ net/mac80211/mesh.h | 2 +- 4 files changed, 8 insertions(+), 15 deletions(-)
This doesn't change ieee80211_get_mesh_hdrlen. Isn't that missing? Can you send an add-on patch (since this one has been merged)?
johannes
Johannes Berg
maintainerQuoted 5 lines · Johannes Berg
Quoted 1 line · Luis Carlos Cobo
This follows the new 802.11s/D2.0 draft.
Umm, I just realised that
Quoted 8 lines
Quoted 5 lines
include/linux/ieee80211.h | 2 +- net/mac80211/ieee80211_i.h | 2 +- net/mac80211/mesh.c | 17 +++++------------ net/mac80211/mesh.h | 2 +- 4 files changed, 8 insertions(+), 15 deletions(-)This doesn't change
ieee80211_get_mesh_hdrlen. Isn't that missing? Can you send an add-on patch (since this one has been merged)?
And the return value of ieee80211_new_mesh_header as well.
johannes