mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
Remove hardcoded GSP subattributes
This commit is contained in:
@@ -407,11 +407,6 @@ int esp_nan_construct_nira(uint8_t *frm)
|
|||||||
#define NAN_PASN_KEY_LIFETIME_NIK_BIT BIT(3)
|
#define NAN_PASN_KEY_LIFETIME_NIK_BIT BIT(3)
|
||||||
/* NAN_PAIRING_DEFAULT_NIK_LIFETIME_SEC is defined at file scope above. */
|
/* NAN_PAIRING_DEFAULT_NIK_LIFETIME_SEC is defined at file scope above. */
|
||||||
#define NAN_ATTR_ID_SHARED_KEY_DESC 0x24
|
#define NAN_ATTR_ID_SHARED_KEY_DESC 0x24
|
||||||
#define GSP_SUBATTR_TRANSPORT_PORT 0x00
|
|
||||||
#define GSP_SUBATTR_INSTANCE_NAME 0x03
|
|
||||||
#define NAN_PAIRING_SRV_PORT 3333
|
|
||||||
#define NAN_PAIRING_SRV_HOSTNAME "ESP-SRV-1234"
|
|
||||||
#define NAN_PAIRING_SSI_BUF_LEN 64
|
|
||||||
#define NAN_PAIRING_NIK_FUP_TIMEOUT_SEC 2
|
#define NAN_PAIRING_NIK_FUP_TIMEOUT_SEC 2
|
||||||
|
|
||||||
struct nan_pairing_fup_ctx {
|
struct nan_pairing_fup_ctx {
|
||||||
@@ -518,50 +513,17 @@ static int nan_pairing_add_ssi_gsp_attr(uint8_t *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Append a single GSP sub-attribute (TLV: ID(1) | Length(2 LE) | Value).
|
* Build a GSP SSI (WFA OUI + proto=Generic header only).
|
||||||
* Ported from esp-nsd @c add_gsp_subattr (wa_sd.c).
|
|
||||||
*/
|
*/
|
||||||
static int nan_pairing_add_gsp_subattr(uint8_t *buf, uint8_t sub_attr_id,
|
static size_t nan_pairing_build_srv_ssi(uint8_t *buf, size_t buf_len)
|
||||||
const void *payload, uint16_t len)
|
|
||||||
{
|
{
|
||||||
uint8_t *p = buf;
|
uint8_t *p = buf;
|
||||||
|
|
||||||
*p++ = sub_attr_id;
|
if (!buf || buf_len < sizeof(wifi_nan_wfa_ssi_t)) {
|
||||||
*((uint16_t *)p) = len;
|
|
||||||
p += sizeof(uint16_t);
|
|
||||||
memcpy(p, payload, len);
|
|
||||||
|
|
||||||
return 1 + 2 + len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a GSP SSI carrying the SRV record (Transport Port + Instance Name).
|
|
||||||
* Ported from esp-nsd @c get_ssi_for_srv_record (wa_sd.c) with a stack
|
|
||||||
* buffer and a fixed (hostname, port) instead of dynamic allocation.
|
|
||||||
*/
|
|
||||||
static size_t nan_pairing_build_srv_ssi(uint8_t *buf, size_t buf_len,
|
|
||||||
const char *hostname, uint16_t port)
|
|
||||||
{
|
|
||||||
uint8_t *p = buf;
|
|
||||||
size_t hostname_len;
|
|
||||||
size_t need;
|
|
||||||
|
|
||||||
if (!buf || !hostname) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
hostname_len = strlen(hostname);
|
|
||||||
need = sizeof(wifi_nan_wfa_ssi_t)
|
|
||||||
+ (1 + 2 + sizeof(port))
|
|
||||||
+ (1 + 2 + hostname_len);
|
|
||||||
if (buf_len < need) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p += nan_pairing_add_ssi_gsp_attr(p);
|
p += nan_pairing_add_ssi_gsp_attr(p);
|
||||||
p += nan_pairing_add_gsp_subattr(p, GSP_SUBATTR_TRANSPORT_PORT,
|
|
||||||
&port, sizeof(port));
|
|
||||||
p += nan_pairing_add_gsp_subattr(p, GSP_SUBATTR_INSTANCE_NAME,
|
|
||||||
hostname, hostname_len);
|
|
||||||
|
|
||||||
return (size_t)(p - buf);
|
return (size_t)(p - buf);
|
||||||
}
|
}
|
||||||
@@ -632,7 +594,7 @@ static esp_err_t nan_app_send_pairing_followup(uint8_t svc_id, uint8_t peer_svc_
|
|||||||
uint8_t key_desc[sizeof(struct wpa_eapol_key)] = {0};
|
uint8_t key_desc[sizeof(struct wpa_eapol_key)] = {0};
|
||||||
uint8_t shared_key_wrapped[sizeof(struct wpa_eapol_key) + sizeof(wrapped)] = {0};
|
uint8_t shared_key_wrapped[sizeof(struct wpa_eapol_key) + sizeof(wrapped)] = {0};
|
||||||
uint8_t nira_attr[NAN_NIRA_ATTR_LEN] = {0};
|
uint8_t nira_attr[NAN_NIRA_ATTR_LEN] = {0};
|
||||||
uint8_t srv_ssi[NAN_PAIRING_SSI_BUF_LEN] = {0};
|
wifi_nan_wfa_ssi_t srv_ssi = {0};
|
||||||
uint8_t nik[NAN_PASN_NIK_LEN];
|
uint8_t nik[NAN_PASN_NIK_LEN];
|
||||||
size_t plain_len;
|
size_t plain_len;
|
||||||
size_t wrapped_len;
|
size_t wrapped_len;
|
||||||
@@ -701,20 +663,17 @@ static esp_err_t nan_app_send_pairing_followup(uint8_t svc_id, uint8_t peer_svc_
|
|||||||
memcpy(w, wrapped, wrapped_len);
|
memcpy(w, wrapped, wrapped_len);
|
||||||
w += wrapped_len;
|
w += wrapped_len;
|
||||||
|
|
||||||
/* SSI: GSP (WFA OUI + proto=Generic) carrying an SRV record so iPhone
|
/* SSI: GSP (WFA OUI + proto=Generic). */
|
||||||
* has Transport Port + Instance Name to associate with this pairing. */
|
srv_ssi_len = nan_pairing_build_srv_ssi((uint8_t *)&srv_ssi, sizeof(srv_ssi));
|
||||||
srv_ssi_len = nan_pairing_build_srv_ssi(srv_ssi, sizeof(srv_ssi),
|
|
||||||
NAN_PAIRING_SRV_HOSTNAME,
|
|
||||||
NAN_PAIRING_SRV_PORT);
|
|
||||||
if (srv_ssi_len == 0) {
|
if (srv_ssi_len == 0) {
|
||||||
ESP_LOGW(TAG, "Pairing follow-up: failed to build SRV SSI");
|
ESP_LOGW(TAG, "Pairing follow-up: failed to build GSP SSI");
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
fup.inst_id = svc_id;
|
fup.inst_id = svc_id;
|
||||||
fup.peer_inst_id = peer_svc_id;
|
fup.peer_inst_id = peer_svc_id;
|
||||||
MACADDR_COPY(fup.peer_mac, peer_mac);
|
MACADDR_COPY(fup.peer_mac, peer_mac);
|
||||||
fup.ssi = srv_ssi;
|
fup.ssi = (uint8_t *)&srv_ssi;
|
||||||
fup.ssi_len = (uint16_t)srv_ssi_len;
|
fup.ssi_len = (uint16_t)srv_ssi_len;
|
||||||
|
|
||||||
sk_attr_len = (size_t)(w - shared_key_wrapped);
|
sk_attr_len = (size_t)(w - shared_key_wrapped);
|
||||||
|
|||||||
Reference in New Issue
Block a user