WFD: Add WFD R2 Subelements
Define and add support for WFD R2 Subelements. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
21ac782797
commit
e9518ae749
7 changed files with 36 additions and 2 deletions
|
@ -1570,7 +1570,9 @@ enum wifi_display_subelem {
|
||||||
WFD_SUBELEM_COUPLED_SINK = 6,
|
WFD_SUBELEM_COUPLED_SINK = 6,
|
||||||
WFD_SUBELEM_EXT_CAPAB = 7,
|
WFD_SUBELEM_EXT_CAPAB = 7,
|
||||||
WFD_SUBELEM_LOCAL_IP_ADDRESS = 8,
|
WFD_SUBELEM_LOCAL_IP_ADDRESS = 8,
|
||||||
WFD_SUBELEM_SESSION_INFO = 9
|
WFD_SUBELEM_SESSION_INFO = 9,
|
||||||
|
WFD_SUBELEM_MAC_INFO = 10,
|
||||||
|
WFD_SUBELEM_R2_DEVICE_INFO = 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 802.11s */
|
/* 802.11s */
|
||||||
|
|
|
@ -2993,6 +2993,7 @@ void p2p_deinit(struct p2p_data *p2p)
|
||||||
wpabuf_free(p2p->wfd_dev_info);
|
wpabuf_free(p2p->wfd_dev_info);
|
||||||
wpabuf_free(p2p->wfd_assoc_bssid);
|
wpabuf_free(p2p->wfd_assoc_bssid);
|
||||||
wpabuf_free(p2p->wfd_coupled_sink_info);
|
wpabuf_free(p2p->wfd_coupled_sink_info);
|
||||||
|
wpabuf_free(p2p->wfd_r2_dev_info);
|
||||||
#endif /* CONFIG_WIFI_DISPLAY */
|
#endif /* CONFIG_WIFI_DISPLAY */
|
||||||
|
|
||||||
eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
|
eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
|
||||||
|
@ -5143,6 +5144,20 @@ int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int p2p_set_wfd_r2_dev_info(struct p2p_data *p2p, const struct wpabuf *elem)
|
||||||
|
{
|
||||||
|
wpabuf_free(p2p->wfd_r2_dev_info);
|
||||||
|
if (elem) {
|
||||||
|
p2p->wfd_r2_dev_info = wpabuf_dup(elem);
|
||||||
|
if (p2p->wfd_r2_dev_info == NULL)
|
||||||
|
return -1;
|
||||||
|
} else
|
||||||
|
p2p->wfd_r2_dev_info = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem)
|
int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem)
|
||||||
{
|
{
|
||||||
wpabuf_free(p2p->wfd_assoc_bssid);
|
wpabuf_free(p2p->wfd_assoc_bssid);
|
||||||
|
|
|
@ -2266,6 +2266,7 @@ int p2p_set_wfd_ie_prov_disc_req(struct p2p_data *p2p, struct wpabuf *ie);
|
||||||
int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie);
|
int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie);
|
||||||
int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie);
|
int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie);
|
||||||
int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem);
|
int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem);
|
||||||
|
int p2p_set_wfd_r2_dev_info(struct p2p_data *p2p, const struct wpabuf *elem);
|
||||||
int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem);
|
int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem);
|
||||||
int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p,
|
int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p,
|
||||||
const struct wpabuf *elem);
|
const struct wpabuf *elem);
|
||||||
|
|
|
@ -367,6 +367,8 @@ wifi_display_build_go_ie(struct p2p_group *group)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (group->p2p->wfd_dev_info)
|
if (group->p2p->wfd_dev_info)
|
||||||
wpabuf_put_buf(wfd_subelems, group->p2p->wfd_dev_info);
|
wpabuf_put_buf(wfd_subelems, group->p2p->wfd_dev_info);
|
||||||
|
if (group->p2p->wfd_r2_dev_info)
|
||||||
|
wpabuf_put_buf(wfd_subelems, group->p2p->wfd_r2_dev_info);
|
||||||
if (group->p2p->wfd_assoc_bssid)
|
if (group->p2p->wfd_assoc_bssid)
|
||||||
wpabuf_put_buf(wfd_subelems,
|
wpabuf_put_buf(wfd_subelems,
|
||||||
group->p2p->wfd_assoc_bssid);
|
group->p2p->wfd_assoc_bssid);
|
||||||
|
|
|
@ -545,6 +545,7 @@ struct p2p_data {
|
||||||
struct wpabuf *wfd_dev_info;
|
struct wpabuf *wfd_dev_info;
|
||||||
struct wpabuf *wfd_assoc_bssid;
|
struct wpabuf *wfd_assoc_bssid;
|
||||||
struct wpabuf *wfd_coupled_sink_info;
|
struct wpabuf *wfd_coupled_sink_info;
|
||||||
|
struct wpabuf *wfd_r2_dev_info;
|
||||||
#endif /* CONFIG_WIFI_DISPLAY */
|
#endif /* CONFIG_WIFI_DISPLAY */
|
||||||
|
|
||||||
u16 authorized_oob_dev_pw_id;
|
u16 authorized_oob_dev_pw_id;
|
||||||
|
|
|
@ -86,6 +86,7 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
|
||||||
p2p_set_wfd_ie_prov_disc_resp(global->p2p, NULL);
|
p2p_set_wfd_ie_prov_disc_resp(global->p2p, NULL);
|
||||||
p2p_set_wfd_ie_go_neg(global->p2p, NULL);
|
p2p_set_wfd_ie_go_neg(global->p2p, NULL);
|
||||||
p2p_set_wfd_dev_info(global->p2p, NULL);
|
p2p_set_wfd_dev_info(global->p2p, NULL);
|
||||||
|
p2p_set_wfd_r2_dev_info(global->p2p, NULL);
|
||||||
p2p_set_wfd_assoc_bssid(global->p2p, NULL);
|
p2p_set_wfd_assoc_bssid(global->p2p, NULL);
|
||||||
p2p_set_wfd_coupled_sink_info(global->p2p, NULL);
|
p2p_set_wfd_coupled_sink_info(global->p2p, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -93,6 +94,8 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
|
||||||
|
|
||||||
p2p_set_wfd_dev_info(global->p2p,
|
p2p_set_wfd_dev_info(global->p2p,
|
||||||
global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO]);
|
global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO]);
|
||||||
|
p2p_set_wfd_r2_dev_info(
|
||||||
|
global->p2p, global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO]);
|
||||||
p2p_set_wfd_assoc_bssid(
|
p2p_set_wfd_assoc_bssid(
|
||||||
global->p2p,
|
global->p2p,
|
||||||
global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID]);
|
global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID]);
|
||||||
|
@ -133,6 +136,11 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
|
||||||
if (global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO])
|
if (global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO])
|
||||||
len += wpabuf_len(global->wfd_subelem[
|
len += wpabuf_len(global->wfd_subelem[
|
||||||
WFD_SUBELEM_DEVICE_INFO]);
|
WFD_SUBELEM_DEVICE_INFO]);
|
||||||
|
|
||||||
|
if (global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO])
|
||||||
|
len += wpabuf_len(global->wfd_subelem[
|
||||||
|
WFD_SUBELEM_R2_DEVICE_INFO]);
|
||||||
|
|
||||||
if (global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID])
|
if (global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID])
|
||||||
len += wpabuf_len(global->wfd_subelem[
|
len += wpabuf_len(global->wfd_subelem[
|
||||||
WFD_SUBELEM_ASSOCIATED_BSSID]);
|
WFD_SUBELEM_ASSOCIATED_BSSID]);
|
||||||
|
@ -151,6 +159,11 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
|
||||||
if (global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO])
|
if (global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO])
|
||||||
wpabuf_put_buf(buf,
|
wpabuf_put_buf(buf,
|
||||||
global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO]);
|
global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO]);
|
||||||
|
|
||||||
|
if (global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO])
|
||||||
|
wpabuf_put_buf(buf,
|
||||||
|
global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO]);
|
||||||
|
|
||||||
if (global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID])
|
if (global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID])
|
||||||
wpabuf_put_buf(buf, global->wfd_subelem[
|
wpabuf_put_buf(buf, global->wfd_subelem[
|
||||||
WFD_SUBELEM_ASSOCIATED_BSSID]);
|
WFD_SUBELEM_ASSOCIATED_BSSID]);
|
||||||
|
|
|
@ -296,7 +296,7 @@ struct wpa_global {
|
||||||
|
|
||||||
#ifdef CONFIG_WIFI_DISPLAY
|
#ifdef CONFIG_WIFI_DISPLAY
|
||||||
int wifi_display;
|
int wifi_display;
|
||||||
#define MAX_WFD_SUBELEMS 10
|
#define MAX_WFD_SUBELEMS 12
|
||||||
struct wpabuf *wfd_subelem[MAX_WFD_SUBELEMS];
|
struct wpabuf *wfd_subelem[MAX_WFD_SUBELEMS];
|
||||||
#endif /* CONFIG_WIFI_DISPLAY */
|
#endif /* CONFIG_WIFI_DISPLAY */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue