]> err.no Git - linux-2.6/blobdiff - net/mac80211/mesh.c
Merge branch 'pxa-devel' into pxa
[linux-2.6] / net / mac80211 / mesh.c
index b10f1e543a945733375704b5806c8cdbcfe26895..697ef67f96b6796bc60aaefa88720e67191ff007 100644 (file)
@@ -8,9 +8,14 @@
  * published by the Free Software Foundation.
  */
 
+#include <asm/unaligned.h>
 #include "ieee80211_i.h"
 #include "mesh.h"
 
+#define PP_OFFSET      1               /* Path Selection Protocol */
+#define PM_OFFSET      5               /* Path Selection Metric   */
+#define CC_OFFSET      9               /* Congestion Control Mode */
+#define CAPAB_OFFSET 17
 #define ACCEPT_PLINKS 0x80
 
 int mesh_allocated;
@@ -163,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) ||
@@ -389,18 +394,10 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr,
 {
        meshhdr->flags = 0;
        meshhdr->ttl = sdata->u.sta.mshcfg.dot11MeshTTL;
+       put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum);
+       sdata->u.sta.mesh_seqnum++;
 
-       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]++;
-       }
-
-       return 5;
+       return 6;
 }
 
 void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)