[RFC 09/13] NAN: Parse and store peer bootstrap information
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Tue Dec 23 03:57:21 PST 2025
- Support parsing NAN Paring and Bootstrapping attribute (NPBA)
as part of the NAN attributes parsing.
- Store the supported pairing and bootstrapping information for a peer.
- Move attribute parsing to be done when a peer is added.
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
src/nan/nan.c | 27 +++++++++++++++++++++++++++
src/nan/nan_i.h | 15 +++++++++++++++
src/nan/nan_util.c | 11 ++++++++++-
3 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/src/nan/nan.c b/src/nan/nan.c
index 3767db6c39..cb048e843b 100644
--- a/src/nan/nan.c
+++ b/src/nan/nan.c
@@ -928,6 +928,29 @@ static void nan_parse_peer_dev_capa_ext(struct nan_data *nan,
}
+static void nan_parse_bpba(struct nan_data *nan,
+ struct nan_peer *peer,
+ struct nan_attrs *attrs)
+{
+ const u8 *npba = attrs->bpba;
+ u8 type;
+
+ if (!attrs->bpba || !attrs->bpba_len)
+ return;
+
+ /* Skip the dialog token and get the type */
+ type = *(npba + 1) & NAN_PBA_TYPE_MSK;
+
+ if (type != NAN_PBA_TYPE_ADVERTISE)
+ return;
+
+ peer->bootstrap.supported_methods = WPA_GET_LE16(npba + 3);
+
+ wpa_printf(MSG_DEBUG, "NAN: Peer supports bootstrap methods: 0x%04x",
+ peer->bootstrap.supported_methods);
+}
+
+
/*
* nan_parse_device_attrs - Parse device attributes and build availability info
*
@@ -964,6 +987,7 @@ int nan_parse_device_attrs(struct nan_data *nan, struct nan_peer *peer,
nan_parse_peer_device_capa(nan, peer, &attrs);
nan_parse_peer_elem_container(nan, peer, &attrs);
nan_parse_peer_dev_capa_ext(nan, peer, &attrs);
+ nan_parse_bpba(nan, peer, &attrs);
nan_peer_dump(nan, peer);
ret = 0;
@@ -1048,6 +1072,9 @@ int nan_add_peer(struct nan_data *nan, const u8 *addr,
nan_parse_device_attrs(nan, peer, device_attrs, device_attrs_len);
os_get_reltime(&peer->last_seen);
+
+ nan_parse_device_attrs(nan, peer, device_attrs, device_attrs_len);
+
return 0;
}
diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index 3f909e5ca1..019f6d73e0 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -399,6 +399,16 @@ struct nan_ndl {
u16 immut_sched_len;
};
+/*
+ * struct nan_bootstrap - NAN bootstrap information
+ *
+ * @supported_methods: Bitmap of supported bootstrap methods. See
+ * &enum nan_pairing_bootstrapping_method.
+ */
+struct nan_bootstrap {
+ u16 supported_methods;
+};
+
/*
* struct nan_peer - Represents a known NAN peer
* @list: List node for linking peers.
@@ -410,6 +420,7 @@ struct nan_ndl {
* @ndp_setup: Used to hold an NDP object while NDP establishment is in
* progress.
* @ndl: NDL data associated with this peer.
+ * @bootstrap: Bootstrap information of the peer.
*/
struct nan_peer {
struct dl_list list;
@@ -423,6 +434,8 @@ struct nan_peer {
struct nan_ndp_setup ndp_setup;
struct nan_ndl *ndl;
+
+ struct nan_bootstrap bootstrap;
};
/**
@@ -468,6 +481,7 @@ struct nan_attrs {
const u8 *sec_ctxt_info;
const u8 *shared_key_desc;
const u8 *dev_capa_ext;
+ const u8 *bpba;
u16 ndp_len;
u16 ndl_len;
@@ -476,6 +490,7 @@ struct nan_attrs {
u16 sec_ctxt_info_len;
u16 shared_key_desc_len;
u16 dev_capa_ext_len;
+ u16 bpba_len;
};
struct nan_msg {
diff --git a/src/nan/nan_util.c b/src/nan/nan_util.c
index e1e32ff690..3d67d32f49 100644
--- a/src/nan/nan_util.c
+++ b/src/nan/nan_util.c
@@ -185,6 +185,16 @@ int nan_parse_attrs(struct nan_data *nan, const u8 *data, size_t len,
attrs->dev_capa_ext = pos;
attrs->dev_capa_ext_len = attr_len;
break;
+ case NAN_ATTR_BPBA:
+ /*
+ * Validate minimal NPBA element length: dialog token
+ * (1) + type and stats (1) + reason code (1) + pbm (2)
+ */
+ if (attr_len < 5)
+ break;
+ attrs->bpba = pos;
+ attrs->bpba_len = attr_len;
+ break;
case NAN_ATTR_MASTER_INDICATION:
case NAN_ATTR_CLUSTER:
case NAN_ATTR_NAN_ATTR_SERVICE_ID_LIST:
@@ -211,7 +221,6 @@ int nan_parse_attrs(struct nan_data *nan, const u8 *data, size_t len,
case NAN_ATTR_SUBSC_SERVICE_ID_LIST:
case NAN_ATTR_NDP_EXT:
case NAN_ATTR_NIRA:
- case NAN_ATTR_BPBA:
case NAN_ATTR_S3:
case NAN_ATTR_TPEA:
case NAN_ATTR_VENDOR_SPECIFIC:
--
2.49.0
More information about the Hostap
mailing list