wifi: cfg80211: expose cfg80211_iter_rnr() to drivers
authorJohannes Berg <johannes.berg@intel.com>
Wed, 28 Feb 2024 08:55:41 +0000 (09:55 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 4 Mar 2024 13:33:49 +0000 (14:33 +0100)
In mac80211 we'll need to look at reduced neighbor report
entries for channel switch purposes, so export the iteration
function to make that simpler.

Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240228095718.0954809964ef.I53e95c017aa71f14e8d1057afbbc75982ddb43df@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
net/wireless/scan.c

index f9eada2a26ec0fb6c03a4b7bd2517d18342c1c91..53653d234d398b3814dcfca4cf1be215677e4104 100644 (file)
@@ -6870,6 +6870,38 @@ cfg80211_find_vendor_ie(unsigned int oui, int oui_type,
        return (const void *)cfg80211_find_vendor_elem(oui, oui_type, ies, len);
 }
 
+/**
+ * enum cfg80211_rnr_iter_ret - reduced neighbor report iteration state
+ * @RNR_ITER_CONTINUE: continue iterating with the next entry
+ * @RNR_ITER_BREAK: break iteration and return success
+ * @RNR_ITER_ERROR: break iteration and return error
+ */
+enum cfg80211_rnr_iter_ret {
+       RNR_ITER_CONTINUE,
+       RNR_ITER_BREAK,
+       RNR_ITER_ERROR,
+};
+
+/**
+ * cfg80211_iter_rnr - iterate reduced neighbor report entries
+ * @elems: the frame elements to iterate RNR elements and then
+ *     their entries in
+ * @elems_len: length of the elements
+ * @iter: iteration function, see also &enum cfg80211_rnr_iter_ret
+ *     for the return value
+ * @iter_data: additional data passed to the iteration function
+ * Return: %true on success (after successfully iterating all entries
+ *     or if the iteration function returned %RNR_ITER_BREAK),
+ *     %false on error (iteration function returned %RNR_ITER_ERROR
+ *     or elements were malformed.)
+ */
+bool cfg80211_iter_rnr(const u8 *elems, size_t elems_len,
+                      enum cfg80211_rnr_iter_ret
+                      (*iter)(void *data, u8 type,
+                              const struct ieee80211_neighbor_ap_info *info,
+                              const u8 *tbtt_info, u8 tbtt_info_len),
+                      void *iter_data);
+
 /**
  * cfg80211_defragment_element - Defrag the given element data into a buffer
  *
index 7cf36b8d3ae747a3a3ac04a1b6733cd02ef846c6..9377a43aa5f789fe9d66c88b3267f31d6dc7827a 100644 (file)
@@ -611,19 +611,12 @@ static int cfg80211_parse_ap_info(struct cfg80211_colocated_ap *entry,
        return 0;
 }
 
-enum cfg80211_rnr_iter_ret {
-       RNR_ITER_CONTINUE,
-       RNR_ITER_BREAK,
-       RNR_ITER_ERROR,
-};
-
-static bool
-cfg80211_iter_rnr(const u8 *elems, size_t elems_len,
-                 enum cfg80211_rnr_iter_ret
-                 (*iter)(void *data, u8 type,
-                         const struct ieee80211_neighbor_ap_info *info,
-                         const u8 *tbtt_info, u8 tbtt_info_len),
-                 void *iter_data)
+bool cfg80211_iter_rnr(const u8 *elems, size_t elems_len,
+                      enum cfg80211_rnr_iter_ret
+                      (*iter)(void *data, u8 type,
+                              const struct ieee80211_neighbor_ap_info *info,
+                              const u8 *tbtt_info, u8 tbtt_info_len),
+                      void *iter_data)
 {
        const struct element *rnr;
        const u8 *pos, *end;
@@ -675,6 +668,7 @@ cfg80211_iter_rnr(const u8 *elems, size_t elems_len,
 
        return true;
 }
+EXPORT_SYMBOL_GPL(cfg80211_iter_rnr);
 
 struct colocated_ap_data {
        const struct element *ssid_elem;