[PATCH] NAN: Fix A3 for P2P2 USD
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Thu Dec 19 01:18:50 PST 2024
According to WFD spec, address 3 in multicast USD frames shall be set to
wildcard bssid. For unicast USD frames, address 3 shall be set to P2P
device address of the sender. Fix it.
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
src/common/nan_de.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/common/nan_de.c b/src/common/nan_de.c
index c38fd9ba60..0e6b4d5fdd 100644
--- a/src/common/nan_de.c
+++ b/src/common/nan_de.c
@@ -27,6 +27,9 @@ enum nan_de_service_type {
static const u8 p2p_network_id[ETH_ALEN] =
{ 0x51, 0x6f, 0x9a, 0x02, 0x00, 0x00 };
+static const u8 wildcard_bssid[ETH_ALEN] =
+{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+
struct nan_de_service {
int id;
enum nan_de_service_type type;
@@ -353,6 +356,7 @@ static void nan_de_tx_multicast(struct nan_de *de, struct nan_de_service *srv,
enum nan_service_control_type type;
unsigned int wait_time = 100;
const u8 *network_id;
+ const u8 *bssid;
if (srv->type == NAN_DE_PUBLISH) {
int ms;
@@ -370,12 +374,15 @@ static void nan_de_tx_multicast(struct nan_de *de, struct nan_de_service *srv,
return;
}
- if (srv->is_p2p)
+ if (srv->is_p2p) {
network_id = p2p_network_id;
- else
+ bssid = wildcard_bssid;
+ } else {
network_id = nan_network_id;
+ bssid = nan_network_id;
+ }
- nan_de_tx_sdf(de, srv, wait_time, type, network_id, network_id,
+ nan_de_tx_sdf(de, srv, wait_time, type, network_id, bssid,
req_instance_id, srv->ssi);
os_get_reltime(&srv->last_multicast);
}
@@ -1020,6 +1027,8 @@ static void nan_de_rx_subscribe(struct nan_de *de, struct nan_de_service *srv,
if (srv->publish.solicited_multicast || !a3)
a3 = network_id;
+ else if (srv->is_p2p)
+ a3 = de->nmi;
nan_de_tx(de, srv->freq, 100,
srv->publish.solicited_multicast ? network_id : peer_addr,
--
2.43.0
More information about the Hostap
mailing list