提交 51ceddad 编写于 作者: L Luis Carlos Cobo 提交者: John W. Linville

mac80211: use 4-byte mesh sequence number

This follows the new 802.11s/D2.0 draft.
Signed-off-by: NLuis Carlos Cobo <luisca@cozybit.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 80991790
...@@ -113,7 +113,7 @@ struct ieee80211_hdr { ...@@ -113,7 +113,7 @@ struct ieee80211_hdr {
struct ieee80211s_hdr { struct ieee80211s_hdr {
u8 flags; u8 flags;
u8 ttl; u8 ttl;
u8 seqnum[3]; __le32 seqnum;
u8 eaddr1[6]; u8 eaddr1[6];
u8 eaddr2[6]; u8 eaddr2[6];
u8 eaddr3[6]; u8 eaddr3[6];
......
...@@ -354,7 +354,7 @@ struct ieee80211_if_sta { ...@@ -354,7 +354,7 @@ struct ieee80211_if_sta {
int preq_queue_len; int preq_queue_len;
struct mesh_stats mshstats; struct mesh_stats mshstats;
struct mesh_config mshcfg; struct mesh_config mshcfg;
u8 mesh_seqnum[3]; u32 mesh_seqnum;
bool accepting_plinks; bool accepting_plinks;
#endif #endif
u16 aid; u16 aid;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <asm/unaligned.h>
#include "ieee80211_i.h" #include "ieee80211_i.h"
#include "mesh.h" #include "mesh.h"
...@@ -167,8 +168,8 @@ int mesh_rmc_check(u8 *sa, struct ieee80211s_hdr *mesh_hdr, ...@@ -167,8 +168,8 @@ int mesh_rmc_check(u8 *sa, struct ieee80211s_hdr *mesh_hdr,
struct rmc_entry *p, *n; struct rmc_entry *p, *n;
/* Don't care about endianness since only match matters */ /* Don't care about endianness since only match matters */
memcpy(&seqnum, mesh_hdr->seqnum, sizeof(mesh_hdr->seqnum)); memcpy(&seqnum, &mesh_hdr->seqnum, sizeof(mesh_hdr->seqnum));
idx = mesh_hdr->seqnum[0] & rmc->idx_mask; idx = le32_to_cpu(mesh_hdr->seqnum) & rmc->idx_mask;
list_for_each_entry_safe(p, n, &rmc->bucket[idx].list, list) { list_for_each_entry_safe(p, n, &rmc->bucket[idx].list, list) {
++entries; ++entries;
if (time_after(jiffies, p->exp_time) || if (time_after(jiffies, p->exp_time) ||
...@@ -393,16 +394,8 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, ...@@ -393,16 +394,8 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr,
{ {
meshhdr->flags = 0; meshhdr->flags = 0;
meshhdr->ttl = sdata->u.sta.mshcfg.dot11MeshTTL; meshhdr->ttl = sdata->u.sta.mshcfg.dot11MeshTTL;
put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum);
meshhdr->seqnum[0] = sdata->u.sta.mesh_seqnum[0]++; sdata->u.sta.mesh_seqnum++;
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]++;
}
return 5; return 5;
} }
......
...@@ -139,7 +139,7 @@ struct rmc_entry { ...@@ -139,7 +139,7 @@ struct rmc_entry {
struct mesh_rmc { struct mesh_rmc {
struct rmc_entry bucket[RMC_BUCKETS]; struct rmc_entry bucket[RMC_BUCKETS];
u8 idx_mask; u32 idx_mask;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册