]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
RNR: Short SSID assignment
authorJohn Crispin <john@phrozen.org>
Tue, 27 Jul 2021 23:42:16 +0000 (16:42 -0700)
committerJouni Malinen <j@w1.fi>
Mon, 8 Nov 2021 21:34:02 +0000 (23:34 +0200)
Calculate and store short SSID in hostapd_data context during config
load time and in neighbor report.

Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Aloka Dixit <alokad@codeaurora.org>
hostapd/config_file.c
src/ap/hostapd.h
src/ap/neighbor_db.c

index 7b03edf36f2a7b6fd184db58aba9d1d8b2db8f5e..a57797262b488cd702cf45083d4b37e87852b72e 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "utils/common.h"
 #include "utils/uuid.h"
+#include "utils/crc32.h"
 #include "common/ieee802_11_defs.h"
 #include "common/sae.h"
 #include "crypto/sha256.h"
@@ -2396,16 +2397,19 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                wpa_printf(MSG_INFO, "Line %d: DEPRECATED: 'dump_file' configuration variable is not used anymore",
                           line);
        } else if (os_strcmp(buf, "ssid") == 0) {
-               bss->ssid.ssid_len = os_strlen(pos);
-               if (bss->ssid.ssid_len > SSID_MAX_LEN ||
-                   bss->ssid.ssid_len < 1) {
+               struct hostapd_ssid *ssid = &bss->ssid;
+
+               ssid->ssid_len = os_strlen(pos);
+               if (ssid->ssid_len > SSID_MAX_LEN || ssid->ssid_len < 1) {
                        wpa_printf(MSG_ERROR, "Line %d: invalid SSID '%s'",
                                   line, pos);
                        return 1;
                }
-               os_memcpy(bss->ssid.ssid, pos, bss->ssid.ssid_len);
-               bss->ssid.ssid_set = 1;
+               os_memcpy(ssid->ssid, pos, ssid->ssid_len);
+               ssid->ssid_set = 1;
+               ssid->short_ssid = crc32(ssid->ssid, ssid->ssid_len);
        } else if (os_strcmp(buf, "ssid2") == 0) {
+               struct hostapd_ssid *ssid = &bss->ssid;
                size_t slen;
                char *str = wpa_config_parse_string(pos, &slen);
                if (str == NULL || slen < 1 || slen > SSID_MAX_LEN) {
@@ -2414,9 +2418,10 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        os_free(str);
                        return 1;
                }
-               os_memcpy(bss->ssid.ssid, str, slen);
-               bss->ssid.ssid_len = slen;
-               bss->ssid.ssid_set = 1;
+               os_memcpy(ssid->ssid, str, slen);
+               ssid->ssid_len = slen;
+               ssid->ssid_set = 1;
+               ssid->short_ssid = crc32(ssid->ssid, ssid->ssid_len);
                os_free(str);
        } else if (os_strcmp(buf, "utf8_ssid") == 0) {
                bss->ssid.utf8_ssid = atoi(pos) > 0;
index 07d0aaa9210078fc704ad66bbfd0569b0aa6b7df..bb9a35eb10301020699ce4bc0eb0d794581b9c31 100644 (file)
@@ -138,6 +138,7 @@ struct hostapd_neighbor_entry {
        /* LCI update time */
        struct os_time lci_date;
        int stationary;
+       u32 short_ssid;
 };
 
 struct hostapd_sae_commit_queue {
index 2bbe318592142b4f1bbdc2be44e28a93137b44ed..e9bdf0033592d0aa8a137c1677700a4f5bdd2e97 100644 (file)
@@ -10,6 +10,7 @@
 #include "utils/includes.h"
 
 #include "utils/common.h"
+#include "utils/crc32.h"
 #include "hostapd.h"
 #include "ieee802_11.h"
 #include "neighbor_db.h"
@@ -134,6 +135,7 @@ int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid,
 
        os_memcpy(entry->bssid, bssid, ETH_ALEN);
        os_memcpy(&entry->ssid, ssid, sizeof(entry->ssid));
+       entry->short_ssid = crc32(ssid->ssid, ssid->ssid_len);
 
        entry->nr = wpabuf_dup(nr);
        if (!entry->nr)