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_EXT_CAPAB = 7,
|
||||
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 */
|
||||
|
|
|
@ -2993,6 +2993,7 @@ void p2p_deinit(struct p2p_data *p2p)
|
|||
wpabuf_free(p2p->wfd_dev_info);
|
||||
wpabuf_free(p2p->wfd_assoc_bssid);
|
||||
wpabuf_free(p2p->wfd_coupled_sink_info);
|
||||
wpabuf_free(p2p->wfd_r2_dev_info);
|
||||
#endif /* CONFIG_WIFI_DISPLAY */
|
||||
|
||||
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)
|
||||
{
|
||||
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_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_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_coupled_sink_info(struct p2p_data *p2p,
|
||||
const struct wpabuf *elem);
|
||||
|
|
|
@ -367,6 +367,8 @@ wifi_display_build_go_ie(struct p2p_group *group)
|
|||
return NULL;
|
||||
if (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)
|
||||
wpabuf_put_buf(wfd_subelems,
|
||||
group->p2p->wfd_assoc_bssid);
|
||||
|
|
|
@ -545,6 +545,7 @@ struct p2p_data {
|
|||
struct wpabuf *wfd_dev_info;
|
||||
struct wpabuf *wfd_assoc_bssid;
|
||||
struct wpabuf *wfd_coupled_sink_info;
|
||||
struct wpabuf *wfd_r2_dev_info;
|
||||
#endif /* CONFIG_WIFI_DISPLAY */
|
||||
|
||||
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_go_neg(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_coupled_sink_info(global->p2p, NULL);
|
||||
return 0;
|
||||
|
@ -93,6 +94,8 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
|
|||
|
||||
p2p_set_wfd_dev_info(global->p2p,
|
||||
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(
|
||||
global->p2p,
|
||||
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])
|
||||
len += wpabuf_len(global->wfd_subelem[
|
||||
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])
|
||||
len += wpabuf_len(global->wfd_subelem[
|
||||
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])
|
||||
wpabuf_put_buf(buf,
|
||||
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])
|
||||
wpabuf_put_buf(buf, global->wfd_subelem[
|
||||
WFD_SUBELEM_ASSOCIATED_BSSID]);
|
||||
|
|
|
@ -296,7 +296,7 @@ struct wpa_global {
|
|||
|
||||
#ifdef CONFIG_WIFI_DISPLAY
|
||||
int wifi_display;
|
||||
#define MAX_WFD_SUBELEMS 10
|
||||
#define MAX_WFD_SUBELEMS 12
|
||||
struct wpabuf *wfd_subelem[MAX_WFD_SUBELEMS];
|
||||
#endif /* CONFIG_WIFI_DISPLAY */
|
||||
|
||||
|
|
Loading…
Reference in a new issue