Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51ceddad authored by Luis Carlos Cobo's avatar Luis Carlos Cobo Committed by John W. Linville
Browse files

mac80211: use 4-byte mesh sequence number



This follows the new 802.11s/D2.0 draft.

Signed-off-by: default avatarLuis Carlos Cobo <luisca@cozybit.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 80991790
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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];
+1 −1
Original line number Diff line number Diff line
@@ -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;
+5 −12
Original line number Diff line number Diff line
@@ -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;
}
+1 −1
Original line number Diff line number Diff line
@@ -139,7 +139,7 @@ struct rmc_entry {

struct mesh_rmc {
	struct rmc_entry bucket[RMC_BUCKETS];
	u8 idx_mask;
	u32 idx_mask;
};