Re: [PATCH 05/15] vendor_quirks: initial skeleton
James Prestwood <[email protected]> Mon, 25 Aug 2025 07:31:44 -0700
| Newsgroups | dev.linux.lists.iwd |
|---|---|
| Message-ID | <[email protected]> |
Hi Marcel,
On 8/23/25 7:43 AM, Marcel Holtmann wrote:
> Hi James,
>
>> This module will provide a database for known issues or quirks with
>> wireless vendors. For now the list of quirks is limited to 32 as
>> that is the size returned in the bit mask. This could be extended
>> to 64 in the future if needed, but of course the goal is to never
>> reach that level.
>>
>> The vendor_quirks() API is intended to be called from scan.c when
>> parsing vendor attributes. This will lookup any quirks associated
>> with the OUI provided and a mask of quirks will be returned. This
>> can be repeated against all the vendor OUI's seen in the scan. The
>> result is then a bitmask containing all quirks for that BSS. This
>> can then be referenced later during various operations in IWD.
>> ---
>> Makefile.am | 2 ++
>> src/vendor_quirks.c | 53 +++++++++++++++++++++++++++++++++++++++++++++
>> src/vendor_quirks.h | 25 +++++++++++++++++++++
>> 3 files changed, 80 insertions(+)
>> create mode 100644 src/vendor_quirks.c
>> create mode 100644 src/vendor_quirks.h
>>
>> 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..ccfcb444
>> --- /dev/null
>> +++ b/src/vendor_quirks.c
>> @@ -0,0 +1,53 @@
>> +/*
>> + *
>> + * 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 <config.h>
>> +#endif
>> +
>> +#include <string.h>
>> +
>> +#include <ell/ell.h>
>> +
>> +#include "src/vendor_quirks.h"
>> +
>> +static const struct {
>> + uint8_t oui[3];
>> + uint32_t quirks;
>> +} quirk_db[] = {
>> + { }
>> +};
>> +
>> +uint32_t vendor_quirks(const uint8_t *oui)
>> +{
>> + size_t i;
>> + uint32_t ret = 0;
>> +
>> + for (i = 0; i < L_ARRAY_SIZE(quirk_db); i++) {
>> + if (memcmp(quirk_db[i].oui, oui, 3))
>> + continue;
>> +
>> + ret |= quirk_db[i].quirks;
>> + }
> if you are using an empty {} entry to signal end of the array, then it makes no sense to also use L_ARRAY_SIZE.
I'm not, it was just to get the skeleton module to compile. The compiler
wasn't letting me define an empty static array like that. In subsequent
patches that empty entry gets replaced with real data.
Thanks,
James
>
> Regards
>
> Marcel
>