[PATCH 66/71] NAN: Parse and store peer bootstrap information
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Wed Apr 1 15:02:15 PDT 2026
- 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 | 26 +++++++++++++++++++++++++-
src/nan/nan_i.h | 15 +++++++++++++++
src/nan/nan_util.c | 11 ++++++++++-
3 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/src/nan/nan.c b/src/nan/nan.c
index 305d1a3713..202731c3f0 100644
--- a/src/nan/nan.c
+++ b/src/nan/nan.c
@@ -963,6 +963,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
*
@@ -999,6 +1022,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;
@@ -1080,8 +1104,8 @@ 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);
+
return 0;
}
diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index 982764cd99..ac1b6fb857 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -403,6 +403,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
@@ -414,6 +424,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;
@@ -427,6 +438,8 @@ struct nan_peer {
struct nan_ndp_setup ndp_setup;
struct nan_ndl *ndl;
+
+ struct nan_bootstrap bootstrap;
};
/**
@@ -471,6 +484,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;
@@ -479,6 +493,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 52cc8d67af..21ef3dfb81 100644
--- a/src/nan/nan_util.c
+++ b/src/nan/nan_util.c
@@ -193,6 +193,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:
@@ -219,7 +229,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.53.0
More information about the Hostap
mailing list