Home | History | Annotate | Download | only in p2p

Lines Matching refs:buf

18 void p2p_buf_add_action_hdr(struct wpabuf *buf, u8 subtype, u8 dialog_token)
20 wpabuf_put_u8(buf, WLAN_ACTION_VENDOR_SPECIFIC);
21 wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
23 wpabuf_put_u8(buf, subtype); /* OUI Subtype */
24 wpabuf_put_u8(buf, dialog_token);
29 void p2p_buf_add_public_action_hdr(struct wpabuf *buf, u8 subtype,
32 wpabuf_put_u8(buf, WLAN_ACTION_PUBLIC);
33 wpabuf_put_u8(buf, WLAN_PA_VENDOR_SPECIFIC);
34 wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
36 wpabuf_put_u8(buf, subtype); /* OUI Subtype */
37 wpabuf_put_u8(buf, dialog_token);
42 u8 * p2p_buf_add_ie_hdr(struct wpabuf *buf)
47 wpabuf_put_u8(buf, WLAN_EID_VENDOR_SPECIFIC);
48 len = wpabuf_put(buf, 1); /* IE length to be filled */
49 wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
55 void p2p_buf_update_ie_hdr(struct wpabuf *buf, u8 *len)
58 *len = (u8 *) wpabuf_put(buf, 0) - len - 1;
62 void p2p_buf_add_capability(struct wpabuf *buf, u8 dev_capab, u8 group_capab)
65 wpabuf_put_u8(buf, P2P_ATTR_CAPABILITY);
66 wpabuf_put_le16(buf, 2);
67 wpabuf_put_u8(buf, dev_capab); /* Device Capabilities */
68 wpabuf_put_u8(buf, group_capab); /* Group Capabilities */
74 void p2p_buf_add_go_intent(struct wpabuf *buf, u8 go_intent)
77 wpabuf_put_u8(buf, P2P_ATTR_GROUP_OWNER_INTENT);
78 wpabuf_put_le16(buf, 1);
79 wpabuf_put_u8(buf, go_intent);
85 void p2p_buf_add_listen_channel(struct wpabuf *buf, const char *country,
89 wpabuf_put_u8(buf, P2P_ATTR_LISTEN_CHANNEL);
90 wpabuf_put_le16(buf, 5);
91 wpabuf_put_data(buf, country, 3);
92 wpabuf_put_u8(buf, reg_class); /* Regulatory Class */
93 wpabuf_put_u8(buf, channel); /* Channel Number */
99 void p2p_buf_add_operating_channel(struct wpabuf *buf, const char *country,
103 wpabuf_put_u8(buf, P2P_ATTR_OPERATING_CHANNEL);
104 wpabuf_put_le16(buf, 5);
105 wpabuf_put_data(buf, country, 3);
106 wpabuf_put_u8(buf, reg_class); /* Regulatory Class */
107 wpabuf_put_u8(buf, channel); /* Channel Number */
113 void p2p_buf_add_pref_channel_list(struct wpabuf *buf,
134 wpabuf_put_u8(buf, WLAN_EID_VENDOR_SPECIFIC);
135 wpabuf_put_u8(buf, 4 + count * sizeof(u16));
136 wpabuf_put_be24(buf, OUI_QCA);
137 wpabuf_put_u8(buf, QCA_VENDOR_ELEM_P2P_PREF_CHAN_LIST);
145 wpabuf_put_u8(buf, op_class);
146 wpabuf_put_u8(buf, op_channel);
151 void p2p_buf_add_channel_list(struct wpabuf *buf, const char *country,
158 wpabuf_put_u8(buf, P2P_ATTR_CHANNEL_LIST);
159 len = wpabuf_put(buf, 2); /* IE length to be filled */
160 wpabuf_put_data(buf, country, 3); /* Country String */
164 wpabuf_put_u8(buf, c->reg_class);
165 wpabuf_put_u8(buf, c->channels);
166 wpabuf_put_data(buf, c->channel, c->channels);
170 WPA_PUT_LE16(len, (u8 *) wpabuf_put(buf, 0) - len - 2);
172 len + 2, (u8 *) wpabuf_put(buf, 0) - len - 2);
176 void p2p_buf_add_status(struct wpabuf *buf, u8 status)
179 wpabuf_put_u8(buf, P2P_ATTR_STATUS);
180 wpabuf_put_le16(buf, 1);
181 wpabuf_put_u8(buf, status);
186 void p2p_buf_add_device_info(struct wpabuf *buf, struct p2p_data *p2p,
194 wpabuf_put_u8(buf, P2P_ATTR_DEVICE_INFO);
195 len = wpabuf_put(buf, 2); /* IE length to be filled */
198 wpabuf_put_data(buf, p2p->cfg->dev_addr, ETH_ALEN);
219 wpabuf_put_be16(buf, methods);
222 wpabuf_put_data(buf, p2p->cfg->pri_dev_type,
226 wpabuf_put_u8(buf, p2p->cfg->num_sec_dev_types);
230 wpabuf_put_data(buf, p2p->cfg->sec_dev_type[i],
235 wpabuf_put_be16(buf, ATTR_DEV_NAME);
236 wpabuf_put_be16(buf, nlen);
237 wpabuf_put_data(buf, p2p->cfg->dev_name, nlen);
240 WPA_PUT_LE16(len, (u8 *) wpabuf_put(buf, 0) - len - 2);
245 void p2p_buf_add_device_id(struct wpabuf *buf, const u8 *dev_addr)
248 wpabuf_put_u8(buf, P2P_ATTR_DEVICE_ID);
249 wpabuf_put_le16(buf, ETH_ALEN);
250 wpabuf_put_data(buf, dev_addr, ETH_ALEN);
255 void p2p_buf_add_config_timeout(struct wpabuf *buf, u8 go_timeout,
259 wpabuf_put_u8(buf, P2P_ATTR_CONFIGURATION_TIMEOUT);
260 wpabuf_put_le16(buf, 2);
261 wpabuf_put_u8(buf, go_timeout);
262 wpabuf_put_u8(buf, client_timeout);
268 void p2p_buf_add_intended_addr(struct wpabuf *buf, const u8 *interface_addr)
271 wpabuf_put_u8(buf, P2P_ATTR_INTENDED_INTERFACE_ADDR);
272 wpabuf_put_le16(buf, ETH_ALEN);
273 wpabuf_put_data(buf, interface_addr, ETH_ALEN);
279 void p2p_buf_add_group_bssid(struct wpabuf *buf, const u8 *bssid)
282 wpabuf_put_u8(buf, P2P_ATTR_GROUP_BSSID);
283 wpabuf_put_le16(buf, ETH_ALEN);
284 wpabuf_put_data(buf, bssid, ETH_ALEN);
290 void p2p_buf_add_group_id(struct wpabuf *buf, const u8 *dev_addr,
294 wpabuf_put_u8(buf, P2P_ATTR_GROUP_ID);
295 wpabuf_put_le16(buf, ETH_ALEN + ssid_len);
296 wpabuf_put_data(buf, dev_addr, ETH_ALEN);
297 wpabuf_put_data(buf, ssid, ssid_len);
304 void p2p_buf_add_invitation_flags(struct wpabuf *buf, u8 flags)
307 wpabuf_put_u8(buf, P2P_ATTR_INVITATION_FLAGS);
308 wpabuf_put_le16(buf, 1);
309 wpabuf_put_u8(buf, flags);
314 static void p2p_buf_add_noa_desc(struct wpabuf *buf, struct p2p_noa_desc *desc)
319 wpabuf_put_u8(buf, desc->count_type);
320 wpabuf_put_le32(buf, desc->duration);
321 wpabuf_put_le32(buf, desc->interval);
322 wpabuf_put_le32(buf, desc->start_time);
326 void p2p_buf_add_noa(struct wpabuf *buf, u8 noa_index, u8 opp_ps, u8 ctwindow,
330 wpabuf_put_u8(buf, P2P_ATTR_NOTICE_OF_ABSENCE);
331 wpabuf_put_le16(buf, 2 + (desc1 ? 13 : 0) + (desc2 ? 13 : 0));
332 wpabuf_put_u8(buf, noa_index);
333 wpabuf_put_u8(buf, (opp_ps ? 0x80 : 0) | (ctwindow & 0x7f));
334 p2p_buf_add_noa_desc(buf, desc1);
335 p2p_buf_add_noa_desc(buf, desc2);
340 void p2p_buf_add_ext_listen_timing(struct wpabuf *buf, u16 period,
344 wpabuf_put_u8(buf, P2P_ATTR_EXT_LISTEN_TIMING);
345 wpabuf_put_le16(buf, 4);
346 wpabuf_put_le16(buf, period);
347 wpabuf_put_le16(buf, interval);
353 void p2p_buf_add_p2p_interface(struct wpabuf *buf, struct p2p_data *p2p)
356 wpabuf_put_u8(buf, P2P_ATTR_INTERFACE);
357 wpabuf_put_le16(buf, ETH_ALEN + 1 + ETH_ALEN);
359 wpabuf_put_data(buf, p2p->cfg->dev_addr, ETH_ALEN);
365 wpabuf_put_u8(buf, 1);
366 wpabuf_put_data(buf, p2p->cfg->dev_addr, ETH_ALEN);
370 void p2p_buf_add_oob_go_neg_channel(struct wpabuf *buf, const char *country,
375 wpabuf_put_u8(buf, P2P_ATTR_OOB_GO_NEG_CHANNEL);
376 wpabuf_put_le16(buf, 6);
377 wpabuf_put_data(buf, country, 3);
378 wpabuf_put_u8(buf, oper_class); /* Operating Class */
379 wpabuf_put_u8(buf, channel); /* Channel Number */
380 wpabuf_put_u8(buf, (u8) role); /* Role indication */
387 void p2p_buf_add_service_hash(struct wpabuf *buf, struct p2p_data *p2p)
393 wpabuf_put_u8(buf, P2P_ATTR_SERVICE_HASH);
394 wpabuf_put_le16(buf, p2p->p2ps_seek_count * P2PS_HASH_LEN);
395 wpabuf_put_data(buf, p2p->p2ps_seek_hash,
402 void p2p_buf_add_session_info(struct wpabuf *buf, const char *info)
410 wpabuf_put_u8(buf, P2P_ATTR_SESSION_INFORMATION_DATA);
411 wpabuf_put_le16(buf, (u16) info_len);
414 wpabuf_put_data(buf, info, info_len);
420 void p2p_buf_add_connection_capability(struct wpabuf *buf, u8 connection_cap)
423 wpabuf_put_u8(buf, P2P_ATTR_CONNECTION_CAPABILITY);
424 wpabuf_put_le16(buf, 1);
425 wpabuf_put_u8(buf, connection_cap);
431 void p2p_buf_add_advertisement_id(struct wpabuf *buf, u32 id, const u8 *mac)
433 if (!buf || !mac)
437 wpabuf_put_u8(buf, P2P_ATTR_ADVERTISEMENT_ID);
438 wpabuf_put_le16(buf, (u16) (sizeof(u32) + ETH_ALEN));
439 wpabuf_put_le32(buf, id);
440 wpabuf_put_data(buf, mac, ETH_ALEN);
476 static int p2p_buf_add_service_info(struct wpabuf *buf, struct p2p_data *p2p,
518 *ie_len = p2p_buf_add_ie_hdr(buf);
536 wpabuf_put_data(buf, holder, front);
538 p2p_buf_update_ie_hdr(buf, *ie_len);
539 *ie_len = p2p_buf_add_ie_hdr(buf);
541 wpabuf_put_data(buf, &holder[front], back);
545 wpabuf_put_le32(buf, adv_id);
546 wpabuf_put_be16(buf, config_methods);
547 wpabuf_put_u8(buf, svc_len);
558 wpabuf_put_data(buf, svc_name, front);
560 p2p_buf_update_ie_hdr(buf, *ie_len);
561 *ie_len = p2p_buf_add_ie_hdr(buf);
565 wpabuf_put_data(buf, &svc_name[front], 255 - 4);
568 p2p_buf_update_ie_hdr(buf, *ie_len);
569 *ie_len = p2p_buf_add_ie_hdr(buf);
572 wpabuf_put_data(buf, &svc_name[front], back);
575 wpabuf_put_data(buf, svc_name, svc_len);
579 p2p_buf_update_ie_hdr(buf, *ie_len);
586 *pos = wpabuf_put(buf, 0);
594 void p2p_buf_add_service_instance(struct wpabuf *buf
660 wpabuf_put_buf(buf, tmp_buf);
665 void p2p_buf_add_session_id(struct wpabuf *buf, u32 id, const u8 *mac)
667 if (!buf || !mac)
671 wpabuf_put_u8(buf, P2P_ATTR_SESSION_ID);
672 wpabuf_put_le16(buf, (u16) (sizeof(u32) + ETH_ALEN));
673 wpabuf_put_le32(buf, id);
674 wpabuf_put_data(buf, mac, ETH_ALEN);
680 void p2p_buf_add_feature_capability(struct wpabuf *buf, u16 len, const u8 *mask)
682 if (!buf || !len || !mask)
686 wpabuf_put_u8(buf, P2P_ATTR_FEATURE_CAPABILITY);
687 wpabuf_put_le16(buf, len);
688 wpabuf_put_data(buf, mask, len);
693 void p2p_buf_add_persistent_group_info(struct wpabuf *buf, const u8 *dev_addr,
697 wpabuf_put_u8(buf, P2P_ATTR_PERSISTENT_GROUP);
698 wpabuf_put_le16(buf, ETH_ALEN + ssid_len);
699 wpabuf_put_data(buf, dev_addr, ETH_ALEN);
700 wpabuf_put_data(buf, ssid, ssid_len);
706 static int p2p_add_wps_string(struct wpabuf *buf, enum wps_attribute attr,
712 if (wpabuf_tailroom(buf) < 4 + len)
714 wpabuf_put_be16(buf, attr);
722 if (wpabuf_tailroom(buf) < 3)
724 wpabuf_put_be16(buf, 1);
725 wpabuf_put_u8(buf, ' ');
729 wpabuf_put_be16(buf, len);
731 wpabuf_put_data(buf, val, len);
736 int p2p_build_wps_ie(struct p2p_data *p2p, struct wpabuf *buf, int pw_id,
742 if (wpabuf_tailroom(buf) < 6)
744 wpabuf_put_u8(buf, WLAN_EID_VENDOR_SPECIFIC);
745 len = wpabuf_put(buf, 1);
746 wpabuf_put_be32(buf, WPS_DEV_OUI_WFA);
748 if (wps_build_version(buf) < 0)
752 if (wpabuf_tailroom(buf) < 5)
754 wpabuf_put_be16(buf, ATTR_WPS_STATE);
755 wpabuf_put_be16(buf, 1);
756 wpabuf_put_u8(buf, WPS_STATE_NOT_CONFIGURED);
760 if (wpabuf_tailroom(buf) < 6)
763 wpabuf_put_be16(buf, ATTR_DEV_PASSWORD_ID);
764 wpabuf_put_be16(buf, 2);
767 wpabuf_put_be16(buf, pw_id);
771 if (wpabuf_tailroom(buf) < 5)
773 wpabuf_put_be16(buf, ATTR_RESPONSE_TYPE);
774 wpabuf_put_be16(buf, 1);
775 wpabuf_put_u8(buf, WPS_RESP_ENROLLEE_INFO);
777 if (wps_build_uuid_e(buf, p2p->cfg->uuid) < 0 ||
778 p2p_add_wps_string(buf, ATTR_MANUFACTURER,
780 p2p_add_wps_string(buf, ATTR_MODEL_NAME,
782 p2p_add_wps_string(buf, ATTR_MODEL_NUMBER,
784 p2p_add_wps_string(buf, ATTR_SERIAL_NUMBER,
788 if (wpabuf_tailroom(buf) < 4 + WPS_DEV_TYPE_LEN)
790 wpabuf_put_be16(buf, ATTR_PRIMARY_DEV_TYPE);
791 wpabuf_put_be16(buf, WPS_DEV_TYPE_LEN);
792 wpabuf_put_data(buf, p2p->cfg->pri_dev_type, WPS_DEV_TYPE_LEN);
794 if (p2p_add_wps_string(buf, ATTR_DEV_NAME, p2p->cfg->dev_name)
798 if (wpabuf_tailroom(buf) < 6)
800 wpabuf_put_be16(buf, ATTR_CONFIG_METHODS);
801 wpabuf_put_be16(buf, 2);
802 wpabuf_put_be16(buf, p2p->cfg->config_methods);
805 if (wps_build_wfa_ext(buf, 0, NULL, 0) < 0)
809 if (wpabuf_tailroom(buf) <
812 wpabuf_put_be16(buf, ATTR_SECONDARY_DEV_TYPE_LIST);
813 wpabuf_put_be16(buf, WPS_DEV_TYPE_LEN *
815 wpabuf_put_data(buf, p2p->cfg->sec_dev_type,
824 if (wpabuf_tailroom(buf) <
827 wpabuf_put_be16(buf, ATTR_VENDOR_EXT);
828 wpabuf_put_be16(buf, wpabuf_len(p2p->wps_vendor_ext[i]));
829 wpabuf_put_buf(buf, p2p->wps_vendor_ext[i]);
832 p2p_buf_update_ie_hdr(buf, len);