diff --git a/Makefile.am b/Makefile.am index 92adfa6e..c01cd4c4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,8 @@ src_iwd_SOURCES = src/main.c linux/nl80211.h src/iwd.h \ src/dpp.c \ src/udev.c \ src/pmksa.h src/pmksa.c \ + src/vendor_quirks.h \ + src/vendor_quirks.c \ $(eap_sources) \ $(builtin_sources) diff --git a/src/vendor_quirks.c b/src/vendor_quirks.c new file mode 100644 index 00000000..18a9ba7a --- /dev/null +++ b/src/vendor_quirks.c @@ -0,0 +1,67 @@ +/* + * + * Wireless daemon for Linux + * + * Copyright (C) 2025 Locus Robotics Corporation. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include + +#include "src/vendor_quirks.h" + +static const struct { + uint8_t oui[3]; + struct vendor_quirk quirks; +} oui_quirk_db[] = { + { } +}; + +void vendor_quirks_append_for_oui(const uint8_t *oui, + struct vendor_quirk *quirks) +{ + size_t i; + + for (i = 0; i < L_ARRAY_SIZE(oui_quirk_db); i++) { + const struct vendor_quirk *quirk = &oui_quirk_db[i].quirks; + + if (memcmp(oui_quirk_db[i].oui, oui, 3)) + continue; + + quirks->ignore_bss_tm_candidates |= + quirk->ignore_bss_tm_candidates; + quirks->replay_counter_mismatch |= + quirk->replay_counter_mismatch; + } +} + +const char *vendor_quirks_to_string(struct vendor_quirk quirks) +{ + static char out[1024]; + size_t s = 0; + + if (!s) + return NULL; + + return out; +} diff --git a/src/vendor_quirks.h b/src/vendor_quirks.h new file mode 100644 index 00000000..b5d726ca --- /dev/null +++ b/src/vendor_quirks.h @@ -0,0 +1,39 @@ +/* + * + * Wireless daemon for Linux + * + * Copyright (C) 2025 Locus Robotics Corporation. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __IWD_VENDOR_QUIRKS_H +#define __IWD_VENDOR_QUIRKS_H + + +#include + +struct vendor_quirk { + bool ignore_bss_tm_candidates : 1; + bool replay_counter_mismatch : 1; +}; + +void vendor_quirks_append_for_oui(const uint8_t *oui, + struct vendor_quirk *quirks); + +const char *vendor_quirks_to_string(struct vendor_quirk quirks); + +#endif /* __IWD_VENDOR_QUIRKS_H */