@@ -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()
@@ -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);
@@ -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
@@ -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;
}