mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 15:58:47 +00:00
mac80211: use 4-byte mesh sequence number
This follows the new 802.11s/D2.0 draft. Signed-off-by: Luis Carlos Cobo <luisca@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
8099179031
commit
51ceddade0
@ -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];
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ struct rmc_entry {
|
||||
|
||||
struct mesh_rmc {
|
||||
struct rmc_entry bucket[RMC_BUCKETS];
|
||||
u8 idx_mask;
|
||||
u32 idx_mask;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user