[PATCH v3 08/46] NAN: Use protocol-specific network ID in USD offload to driver
Kavita Kavita
kavita.kavita at oss.qualcomm.com
Wed May 13 02:59:32 PDT 2026
From: Peddolla Harshavardhan Reddy <peddolla.reddy at oss.qualcomm.com>
Add network_id parameter to nan_publish() and nan_subscribe() driver
operations and pass the appropriate network ID (nan_network_id or
p2p_network_id) based on the protocol being used, so the driver can
include the correct network ID in publish/subscribe frames during
USD offload.
Signed-off-by: Peddolla Harshavardhan Reddy <peddolla.reddy at oss.qualcomm.com>
---
src/drivers/driver.h | 6 ++++--
src/drivers/driver_nl80211.c | 14 ++++++++++----
wpa_supplicant/driver_i.h | 11 +++++++----
wpa_supplicant/nan_supplicant.c | 18 ++++++++++++++++--
4 files changed, 37 insertions(+), 12 deletions(-)
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 69231d468..bbab06e7b 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -5683,7 +5683,8 @@ struct wpa_driver_ops {
const char *service_name, const u8 *service_id,
enum nan_service_protocol_type srv_proto_type,
const struct wpabuf *ssi, const struct wpabuf *elems,
- struct nan_publish_params *params);
+ struct nan_publish_params *params,
+ const u8 *network_id);
/**
* nan_cancel_publish - NAN offload for CancelPublish()
@@ -5720,7 +5721,8 @@ struct wpa_driver_ops {
enum nan_service_protocol_type srv_proto_type,
const struct wpabuf *ssi,
const struct wpabuf *elems,
- struct nan_subscribe_params *params);
+ struct nan_subscribe_params *params,
+ const u8 *network_id);
/**
* nan_cancel_subscribe - NAN offload for CancelSubscribe()
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 6adc7c853..3b50ffca3 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -14395,7 +14395,8 @@ static int nl80211_nan_publish(void *priv, const u8 *src, int publish_id,
enum nan_service_protocol_type srv_proto_type,
const struct wpabuf *ssi,
const struct wpabuf *elems,
- struct nan_publish_params *params)
+ struct nan_publish_params *params,
+ const u8 *network_id)
{
struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -14431,7 +14432,9 @@ static int nl80211_nan_publish(void *priv, const u8 *src, int publish_id,
(elems && nla_put(msg, QCA_WLAN_VENDOR_ATTR_USD_ELEMENT_CONTAINER,
wpabuf_len(elems), wpabuf_head(elems))) ||
(ssi && nla_put(msg, QCA_WLAN_VENDOR_ATTR_USD_SSI,
- wpabuf_len(ssi), wpabuf_head(ssi))))
+ wpabuf_len(ssi), wpabuf_head(ssi))) ||
+ (network_id && nla_put(msg, QCA_WLAN_VENDOR_ATTR_USD_NETWORK_ID,
+ ETH_ALEN, network_id)))
goto fail;
attr = nla_nest_start(msg, QCA_WLAN_VENDOR_ATTR_USD_CHAN_CONFIG);
@@ -14547,7 +14550,8 @@ static int nl80211_nan_subscribe(void *priv, const u8 *src, int subscribe_id,
enum nan_service_protocol_type srv_proto_type,
const struct wpabuf *ssi,
const struct wpabuf *elems,
- struct nan_subscribe_params *params)
+ struct nan_subscribe_params *params,
+ const u8 *network_id)
{
struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -14584,7 +14588,9 @@ static int nl80211_nan_subscribe(void *priv, const u8 *src, int subscribe_id,
(elems && nla_put(msg, QCA_WLAN_VENDOR_ATTR_USD_ELEMENT_CONTAINER,
wpabuf_len(elems), wpabuf_head(elems))) ||
(ssi && nla_put(msg, QCA_WLAN_VENDOR_ATTR_USD_SSI,
- wpabuf_len(ssi), wpabuf_head(ssi))))
+ wpabuf_len(ssi), wpabuf_head(ssi))) ||
+ (network_id && nla_put(msg, QCA_WLAN_VENDOR_ATTR_USD_NETWORK_ID,
+ ETH_ALEN, network_id)))
goto fail;
attr = nla_nest_start(msg, QCA_WLAN_VENDOR_ATTR_USD_CHAN_CONFIG);
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
index f92a96e02..034827488 100644
--- a/wpa_supplicant/driver_i.h
+++ b/wpa_supplicant/driver_i.h
@@ -1222,14 +1222,15 @@ wpas_drv_nan_publish(struct wpa_supplicant *wpa_s, const u8 *addr,
const u8 *service_id,
enum nan_service_protocol_type srv_proto_type,
const struct wpabuf *ssi, const struct wpabuf *elems,
- struct nan_publish_params *params)
+ struct nan_publish_params *params, const u8 *network_id)
{
if (!wpa_s->driver->nan_publish)
return 0;
return wpa_s->driver->nan_publish(wpa_s->drv_priv, addr, publish_id,
service_name, service_id,
- srv_proto_type, ssi, elems, params);
+ srv_proto_type, ssi, elems, params,
+ network_id);
}
static inline int
@@ -1258,14 +1259,16 @@ wpas_drv_nan_subscribe(struct wpa_supplicant *wpa_s, const u8 *addr,
const u8 *service_id,
enum nan_service_protocol_type srv_proto_type,
const struct wpabuf *ssi, const struct wpabuf *elems,
- struct nan_subscribe_params *params)
+ struct nan_subscribe_params *params,
+ const u8 *network_id)
{
if (!wpa_s->driver->nan_subscribe)
return 0;
return wpa_s->driver->nan_subscribe(wpa_s->drv_priv, addr, subscribe_id,
service_name, service_id,
- srv_proto_type, ssi, elems, params);
+ srv_proto_type, ssi, elems, params,
+ network_id);
}
static inline int
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index 3a578334c..5c162ad8b 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -4460,6 +4460,7 @@ int wpas_nan_publish(struct wpa_supplicant *wpa_s, const char *service_name,
int publish_id;
struct wpabuf *elems = NULL;
const u8 *addr;
+ const u8 *network_id = NULL;
if (!wpa_s->nan_de)
return -1;
@@ -4501,6 +4502,11 @@ int wpas_nan_publish(struct wpa_supplicant *wpa_s, const char *service_name,
}
#endif /* CONFIG_NAN */
+ if (p2p)
+ network_id = p2p_network_id;
+ else
+ network_id = nan_network_id;
+
if (p2p) {
elems = wpas_p2p_usd_elems(wpa_s, service_name);
addr = wpa_s->global->p2p_dev_addr;
@@ -4523,7 +4529,8 @@ int wpas_nan_publish(struct wpa_supplicant *wpa_s, const char *service_name,
wpas_drv_nan_publish(wpa_s, addr, publish_id, service_name,
nan_de_get_service_id(wpa_s->nan_de,
publish_id),
- srv_proto_type, ssi, elems, params) < 0) {
+ srv_proto_type, ssi, elems, params,
+ network_id) < 0) {
nan_de_cancel_publish(wpa_s->nan_de, publish_id);
publish_id = -1;
}
@@ -4620,6 +4627,7 @@ int wpas_nan_subscribe(struct wpa_supplicant *wpa_s,
int subscribe_id;
struct wpabuf *elems = NULL;
const u8 *addr;
+ const u8 *network_id = NULL;
if (!wpa_s->nan_de)
return -1;
@@ -4660,6 +4668,11 @@ int wpas_nan_subscribe(struct wpa_supplicant *wpa_s,
}
#endif /* CONFIG_NAN */
+ if (p2p)
+ network_id = p2p_network_id;
+ else
+ network_id = nan_network_id;
+
if (p2p) {
elems = wpas_p2p_usd_elems(wpa_s, service_name);
addr = wpa_s->global->p2p_dev_addr;
@@ -4683,7 +4696,8 @@ int wpas_nan_subscribe(struct wpa_supplicant *wpa_s,
wpas_drv_nan_subscribe(wpa_s, addr, subscribe_id, service_name,
nan_de_get_service_id(wpa_s->nan_de,
subscribe_id),
- srv_proto_type, ssi, elems, params) < 0) {
+ srv_proto_type, ssi, elems, params,
+ network_id) < 0) {
nan_de_cancel_subscribe(wpa_s->nan_de, subscribe_id);
subscribe_id = -1;
}
--
2.34.1
More information about the Hostap
mailing list