[PATCH v2 02/11] vendor_quirks: implement two vendor quirks
James Prestwood <[email protected]> Wed, 27 Aug 2025 05:54:52 -0700
| Newsgroups | dev.linux.lists.iwd |
|---|---|
| Message-ID | <[email protected]> |
ignore_bss_tm_candidates:
When a BSS requests a station roam it can optionally include a
list of BSS's that can be roamed to. IWD uses this list and only
scans on those frequencies. In some cases though the AP's list
contains very poor options and it would be better for IWD to
request a full neighbor report.
replay_counter_mismatch:
On some Aruba APs there is a mismatch in the replay counters
between what is seen in scans versus authentications/associations.
This difference is not allowed in the spec, therefore IWD will
not connect. This quirk is intended to relax that check.
---
src/vendor_quirks.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/src/vendor_quirks.c b/src/vendor_quirks.c
index 18a9ba7a..4fba0c33 100644
--- a/src/vendor_quirks.c
+++ b/src/vendor_quirks.c
@@ -25,6 +25,7 @@
#endif
#include <string.h>
+#include <stdio.h>
#include <ell/ell.h>
@@ -34,7 +35,16 @@ static const struct {
uint8_t oui[3];
struct vendor_quirk quirks;
} oui_quirk_db[] = {
- { }
+ {
+ /* Cisco Meraki */
+ { 0x00, 0x18, 0x0a },
+ { .ignore_bss_tm_candidates = true },
+ },
+ {
+ /* Hewlett Packard, owns Aruba */
+ { 0x00, 0x0b, 0x86 },
+ { .replay_counter_mismatch = true },
+ },
};
void vendor_quirks_append_for_oui(const uint8_t *oui,
@@ -58,8 +68,15 @@ void vendor_quirks_append_for_oui(const uint8_t *oui,
const char *vendor_quirks_to_string(struct vendor_quirk quirks)
{
static char out[1024];
+ char *pos = out;
size_t s = 0;
+ if (quirks.ignore_bss_tm_candidates)
+ s += snprintf(pos, sizeof(out) - s, "IgnoreBssTmCandidateList");
+
+ if (quirks.replay_counter_mismatch)
+ s += snprintf(pos, sizeof(out) - s, "ReplayCounterMismatch");
+
if (!s)
return NULL;
--
2.34.1