From 96b638f0d0cacf58c1b0bab5f38f9d82b9e93f3f Mon Sep 17 00:00:00 2001 From: Marc Date: Sun, 9 Jan 2022 16:07:03 +0000 Subject: core: Add a function to check if a tag is present by tag number --- src/libwifi/core/frame/tag.c | 16 ++++++++++++++++ src/libwifi/core/frame/tag.h | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/src/libwifi/core/frame/tag.c b/src/libwifi/core/frame/tag.c index 9dec547..1d43c55 100644 --- a/src/libwifi/core/frame/tag.c +++ b/src/libwifi/core/frame/tag.c @@ -129,3 +129,19 @@ int libwifi_quick_add_tag(struct libwifi_tagged_parameters *tags, int tag_number return 0; } + +int libwifi_check_tag(struct libwifi_tagged_parameters *tags, int tag_number) { + int tag_count = 0; + struct libwifi_tag_iterator it = {0}; + if (libwifi_tag_iterator_init(&it, tags->parameters, tags->length) != 0) { + return -EINVAL; + } + + do { + if (it.tag_header->tag_num == tag_number) { + tag_count++; + } + } while (libwifi_tag_iterator_next(&it) != -1); + + return tag_count; +} diff --git a/src/libwifi/core/frame/tag.h b/src/libwifi/core/frame/tag.h index 02928fe..030c0b9 100644 --- a/src/libwifi/core/frame/tag.h +++ b/src/libwifi/core/frame/tag.h @@ -303,4 +303,13 @@ size_t libwifi_dump_tag(struct libwifi_tagged_parameter *tag, unsigned char *buf int libwifi_quick_add_tag(struct libwifi_tagged_parameters *tagged_parameters, int tag_number, const unsigned char *tag_data, size_t tag_length); +/** + * Check if a tagged parameter is present via tag number. + * + * @param tags A tagged parameters list + * @param tag_number The number of the tagged parameter to find + * @returns The number of times the supplied tag_number was found in tags + */ +int libwifi_check_tag(struct libwifi_tagged_parameters *tags, int tag_number); + #endif /* LIBWIFI_CORE_TAG_H */ -- cgit 1.4.1