18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Wi-Fi Protected Setup 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2007-2009, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This program is free software; you can redistribute it and/or modify 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * it under the terms of the GNU General Public License version 2 as 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * published by the Free Software Foundation. 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * license. 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * See README and COPYING for more details. 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPS_H 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_H 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wps_defs.h" 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wsc_op_code - EAP-WSC OP-Code values 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wsc_op_code { 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_UPnP = 0 /* No OP Code in UPnP transport */, 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_Start = 0x01, 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_ACK = 0x02, 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_NACK = 0x03, 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_MSG = 0x04, 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_Done = 0x05, 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_FRAG_ACK = 0x06 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct upnp_wps_device_sm; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_er; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_credential - WPS Credential 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ssid: SSID 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ssid_len: Length of SSID 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @auth_type: Authentication Type (WPS_AUTH_OPEN, .. flags) 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @encr_type: Encryption Type (WPS_ENCR_NONE, .. flags) 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key_idx: Key index 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key: Key 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key_len: Key length in octets 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Credential receiver 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred_attr: Unparsed Credential attribute data (used only in cred_cb()); 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * this may be %NULL, if not used 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred_attr_len: Length of cred_attr in octets 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_credential { 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ssid[32]; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ssid_len; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 auth_type; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 encr_type; 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 key_idx; 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 key[64]; 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t key_len; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_addr[ETH_ALEN]; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *cred_attr; 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t cred_attr_len; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_DEV_TYPE_LEN 8 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_DEV_TYPE_BUFSIZE 21 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_SEC_DEV_TYPE_MAX_LEN 128 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum number of advertised WPS vendor extension attributes */ 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define MAX_WPS_VENDOR_EXTENSIONS 10 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum size of WPS Vendor extension attribute */ 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_MAX_VENDOR_EXT_LEN 1024 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum number of parsed WPS vendor extension attributes */ 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define MAX_WPS_PARSE_VENDOR_EXT 10 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_device_data - WPS Device Data 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: Device MAC address 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @device_name: Device Name (0..32 octets encoded in UTF-8) 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @manufacturer: Manufacturer (0..64 octets encoded in UTF-8) 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @model_name: Model Name (0..32 octets encoded in UTF-8) 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @model_number: Model Number (0..32 octets encoded in UTF-8) 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @serial_number: Serial Number (0..32 octets encoded in UTF-8) 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @pri_dev_type: Primary Device Type 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sec_dev_type: Array of secondary device types 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @num_sec_dev_type: Number of secondary device types 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @os_version: OS Version 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @rf_bands: RF bands (WPS_RF_24GHZ, WPS_RF_50GHZ flags) 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @p2p: Whether the device is a P2P device 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_device_data { 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_addr[ETH_ALEN]; 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *device_name; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *manufacturer; 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_name; 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_number; 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *serial_number; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pri_dev_type[WPS_DEV_TYPE_LEN]; 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_SEC_DEVICE_TYPES 5 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 sec_dev_type[WPS_SEC_DEVICE_TYPES][WPS_DEV_TYPE_LEN]; 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 num_sec_dev_types; 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 os_version; 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rf_bands; 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS]; 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int p2p; 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct oob_conf_data { 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt OOB_METHOD_UNKNOWN = 0, 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt OOB_METHOD_DEV_PWD_E, 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt OOB_METHOD_DEV_PWD_R, 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt OOB_METHOD_CRED, 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } oob_method; 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dev_password; 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *pubkey_hash; 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_config - WPS configuration for a single registration protocol run 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_config { 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps - Pointer to long term WPS context 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_context *wps; 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registrar - Whether this end is a Registrar 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int registrar; 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin - Enrollee Device Password (%NULL for Registrar or PBC) 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pin; 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin_len - Length on pin in octets 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pin_len; 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pbc - Whether this is protocol run uses PBC 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pbc; 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * assoc_wps_ie: (Re)AssocReq WPS IE (in AP; %NULL if not AP) 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *assoc_wps_ie; 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * new_ap_settings - New AP settings (%NULL if not used) 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This parameter provides new AP settings when using a wireless 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * stations as a Registrar to configure the AP. %NULL means that AP 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * will not be reconfigured, i.e., the station will only learn the 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current AP settings by using AP PIN. 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *new_ap_settings; 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * peer_addr: MAC address of the peer in AP; %NULL if not AP 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr; 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * use_psk_key - Use PSK format key in Credential 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Force PSK format to be used instead of ASCII passphrase when 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * building Credential for an Enrollee. The PSK value is set in 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_context::psk. 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int use_psk_key; 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dev_pw_id - Device Password ID for Enrollee when PIN is used 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_pw_id; 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * p2p_dev_addr - P2P Device Address from (Re)Association Request 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * On AP/GO, this is set to the P2P Device Address of the associating 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * P2P client if a P2P IE is included in the (Re)Association Request 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * frame and the P2P Device Address is included. Otherwise, this is set 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * to %NULL to indicate the station does not have a P2P Device Address. 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *p2p_dev_addr; 19087fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen 19187fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen /** 19287fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * pbc_in_m1 - Do not remove PushButton config method in M1 (AP) 19387fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * 19487fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * This can be used to enable a workaround to allow Windows 7 to use 19587fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * PBC with the AP. 19687fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen */ 19787fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen int pbc_in_m1; 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_data * wps_init(const struct wps_config *cfg); 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_deinit(struct wps_data *data); 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wps_process_res - WPS message processing result 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_process_res { 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_DONE - Processing done 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_DONE, 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_CONTINUE - Processing continues 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_CONTINUE, 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_FAILURE - Processing failed 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_FAILURE, 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_PENDING - Processing continues, but waiting for an external 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * event (e.g., UPnP message from an external Registrar) 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_PENDING 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_process_res wps_process_msg(struct wps_data *wps, 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wsc_op_code op_code, 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *msg); 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_get_msg(struct wps_data *wps, enum wsc_op_code *op_code); 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_selected_pbc_registrar(const struct wpabuf *msg); 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_selected_pin_registrar(const struct wpabuf *msg); 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_ap_priority_compar(const struct wpabuf *wps_a, 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *wps_b); 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr, 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ver1_compat); 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst u8 * wps_get_uuid_e(const struct wpabuf *msg); 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_assoc_req_ie(enum wps_request_type req_type); 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_assoc_resp_ie(void); 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_probe_req_ie(int pbc, struct wps_device_data *dev, 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid, 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_request_type req_type, 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int num_req_dev_types, 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *req_dev_types); 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_registrar_config - WPS Registrar configuration 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar_config { 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * new_psk_cb - Callback for new PSK 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Enrollee 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @psk: The new PSK 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @psk_len: The length of psk in octets 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called when a new per-device PSK is provisioned. 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*new_psk_cb)(void *ctx, const u8 *mac_addr, const u8 *psk, 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t psk_len); 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_ie_cb - Callback for WPS IE changes 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @beacon_ie: WPS IE for Beacon 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @probe_resp_ie: WPS IE for Probe Response 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever the WPS IE in Beacon or Probe 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Response frames needs to be changed (AP only). Callee is responsible 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * for freeing the buffers. 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*set_ie_cb)(void *ctx, struct wpabuf *beacon_ie, 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *probe_resp_ie); 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin_needed_cb - Callback for requesting a PIN 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID-E of the unknown Enrollee 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev: Device Data from the unknown Enrollee 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever an unknown Enrollee requests to use 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PIN method and a matching PIN (Device Password) is not found in 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Registrar data. 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*pin_needed_cb)(void *ctx, const u8 *uuid_e, 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_device_data *dev); 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * reg_success_cb - Callback for reporting successful registration 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Enrollee 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID-E of the Enrollee 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever an Enrollee completes registration 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * successfully. 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*reg_success_cb)(void *ctx, const u8 *mac_addr, 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid_e); 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_sel_reg_cb - Callback for reporting selected registrar changes 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sel_reg: Whether the Registrar is selected 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_passwd_id: Device Password ID to indicate with method or 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * specific password the Registrar intends to use 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sel_reg_config_methods: Bit field of active config methods 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever the Selected Registrar state 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * changes (e.g., a new PIN becomes available or PBC is invoked). This 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * callback is only used by External Registrar implementation; 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_ie_cb() is used by AP implementation in similar caes, but it 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * provides the full WPS IE data instead of just the minimal Registrar 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * state information. 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*set_sel_reg_cb)(void *ctx, int sel_reg, u16 dev_passwd_id, 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods); 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enrollee_seen_cb - Callback for reporting Enrollee based on ProbeReq 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @addr: MAC address of the Enrollee 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID of the Enrollee 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @pri_dev_type: Primary device type 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @config_methods: Config Methods 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_password_id: Device Password ID 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @request_type: Request Type 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_name: Device Name (if available) 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*enrollee_seen_cb)(void *ctx, const u8 *addr, const u8 *uuid_e, 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type, u16 config_methods, 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_password_id, u8 request_type, 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dev_name); 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx: Higher layer context data for Registrar callbacks 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * skip_cred_build: Do not build credential 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This option can be used to disable internal code that builds 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credential attribute into M8 based on the current network 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration and Enrollee capabilities. The extra_cred data will 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * then be used as the Credential(s). 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int skip_cred_build; 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * extra_cred: Additional Credential attribute(s) 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional data (set to %NULL to disable) can be used to add 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credential attribute(s) for other networks into M8. If 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * skip_cred_build is set, this will also override the automatically 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * generated Credential attribute. 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *extra_cred; 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * extra_cred_len: Length of extra_cred in octets 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t extra_cred_len; 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * disable_auto_conf - Disable auto-configuration on first registration 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * By default, the AP that is started in not configured state will 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * generate a random PSK and move to configured state when the first 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registration protocol run is completed successfully. This option can 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * be used to disable this functionality and leave it up to an external 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * program to take care of configuration. This requires the extra_cred 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * to be set with a suitable Credential and skip_cred_build being used. 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int disable_auto_conf; 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * static_wep_only - Whether the BSS supports only static WEP 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int static_wep_only; 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dualband - Whether this is a concurrent dualband AP 3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int dualband; 3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wps_event - WPS event types 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_event { 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_M2D - M2D received (Registrar did not know us) 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_M2D, 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_FAIL - Registration failed 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_FAIL, 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_SUCCESS - Registration succeeded 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_SUCCESS, 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PWD_AUTH_FAIL - Password authentication failed 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PWD_AUTH_FAIL, 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PBC_OVERLAP - PBC session overlap detected 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PBC_OVERLAP, 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PBC_TIMEOUT - PBC walktime expired before protocol run start 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PBC_TIMEOUT, 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_ADD - ER: AP added 4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_ADD, 4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_REMOVE - ER: AP removed 4378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_REMOVE, 4398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_ENROLLEE_ADD - ER: Enrollee added 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_ENROLLEE_ADD, 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_ENROLLEE_REMOVE - ER: Enrollee removed 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_ENROLLEE_REMOVE, 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_SETTINGS - ER: AP Settings learned 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_SETTINGS, 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_SET_SELECTED_REGISTRAR - ER: SetSelectedRegistrar event 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_SET_SELECTED_REGISTRAR 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * union wps_event_data - WPS event data 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunion wps_event_data { 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_event_m2d - M2D event data 4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_m2d { 4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 4708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *manufacturer; 4718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t manufacturer_len; 4728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *model_name; 4738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t model_name_len; 4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *model_number; 4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t model_number_len; 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *serial_number; 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t serial_number_len; 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dev_name; 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t dev_name_len; 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *primary_dev_type; /* 8 octets */ 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_error; 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_password_id; 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } m2d; 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_event_fail - Registration failure information 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @msg: enum wps_msg_type 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_fail { 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int msg; 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_error; 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 error_indication; 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } fail; 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_pwd_auth_fail { 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int enrollee; 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int part; 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } pwd_auth_fail; 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_ap { 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mac_addr; 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *friendly_name; 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer; 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer_url; 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_description; 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_name; 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_number; 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_url; 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *serial_number; 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *upc; 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type; 5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 wps_state; 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } ap; 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_enrollee { 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mac_addr; 5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int m1_received; 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_passwd_id; 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type; 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dev_name; 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer; 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_name; 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_number; 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *serial_number; 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } enrollee; 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_ap_settings { 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *cred; 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } ap_settings; 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_set_selected_registrar { 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int sel_reg; 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_passwd_id; 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods; 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_START, 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_DONE, 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_FAILED 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } state; 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } set_sel_reg; 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct upnp_pending_message - Pending PutWLANResponse messages 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @next: Pointer to next pending message or %NULL 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @addr: NewWLANEventMAC 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @msg: NewMessage 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @type: Message Type 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct upnp_pending_message { 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_pending_message *next; 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *msg; 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_msg_type type; 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_context - Long term WPS context data 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This data is stored at the higher layer Authenticator or Supplicant data 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * structures and it is maintained over multiple registration protocol runs. 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_context { 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap - Whether the local end is an access point 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ap; 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registrar - Pointer to WPS registrar data from wps_registrar_init() 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_registrar *registrar; 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps_state - Current WPS state 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_state wps_state; 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_setup_locked - Whether AP setup is locked (only used at AP) 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ap_setup_locked; 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uuid - Own UUID 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 uuid[16]; 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ssid - SSID 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This SSID is used by the Registrar to fill in information for 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credentials. In addition, AP uses it when acting as an Enrollee to 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * notify Registrar of the current configuration. 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ssid[32]; 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ssid_len - Length of ssid in octets 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ssid_len; 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dev - Own WPS device data 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_device_data dev; 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * oob_conf - OOB Config data 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct oob_conf_data oob_conf; 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * oob_dev_pw_id - OOB Device password id 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 oob_dev_pw_id; 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_ctx - Context data for Diffie-Hellman operation 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *dh_ctx; 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_privkey - Diffie-Hellman private key 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dh_privkey; 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_pubkey_oob - Diffie-Hellman public key 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dh_pubkey; 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * config_methods - Enabled configuration methods 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Bit field of WPS_CONFIG_* 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * encr_types - Enabled encryption types (bit field of WPS_ENCR_*) 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 encr_types; 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * auth_types - Authentication types (bit field of WPS_AUTH_*) 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 auth_types; 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key - The current Network Key (PSK) or %NULL to generate new 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * If %NULL, Registrar will generate per-device PSK. In addition, AP 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uses this when acting as an Enrollee to notify Registrar of the 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current configuration. 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * When using WPA/WPA2-Person, this key can be either the ASCII 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * passphrase (8..63 characters) or the 32-octet PSK (64 hex 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * characters). When this is set to the ASCII passphrase, the PSK can 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * be provided in the psk buffer and used per-Enrollee to control which 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key type is included in the Credential (e.g., to reduce calculation 6678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * need on low-powered devices by provisioning PSK while still allowing 6688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * other devices to get the passphrase). 6698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *network_key; 6718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key_len - Length of network_key in octets 6748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t network_key_len; 6768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * psk - The current network PSK 6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional value can be used to provide the current PSK if 6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key is set to the ASCII passphrase. 6828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 psk[32]; 6848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * psk_set - Whether psk value is set 6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int psk_set; 6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_settings - AP Settings override for M7 (only used at AP) 6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * If %NULL, AP Settings attributes will be generated based on the 6948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current network configuration. 6958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *ap_settings; 6978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_settings_len - Length of ap_settings in octets 7008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ap_settings_len; 7028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * friendly_name - Friendly Name (required for UPnP) 7058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *friendly_name; 7078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * manufacturer_url - Manufacturer URL (optional for UPnP) 7108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *manufacturer_url; 7128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * model_description - Model Description (recommended for UPnP) 7158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_description; 7178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * model_url - Model URL (optional for UPnP) 7208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_url; 7228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * upc - Universal Product Code (optional for UPnP) 7258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *upc; 7278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cred_cb - Callback to notify that new Credentials were received 7308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 7318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred: The received Credential 7328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Return: 0 on success, -1 on failure 7338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cred_cb)(void *ctx, const struct wps_credential *cred); 7358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * event_cb - Event callback (state information about progress) 7388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 7398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @event: Event type 7408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @data: Event data 7418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*event_cb)(void *ctx, enum wps_event event, 7438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt union wps_event_data *data); 7448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx: Higher layer context data for callbacks 7478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 7498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_wps_device_sm *wps_upnp; 7518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Pending messages from UPnP PutWLANResponse */ 7538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_pending_message *upnp_msgs; 7548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 7558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct oob_device_data { 7578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *device_name; 7588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *device_path; 7598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void * (*init_func)(struct wps_context *, struct oob_device_data *, 7608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int); 7618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf * (*read_func)(void *); 7628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*write_func)(void *, struct wpabuf *); 7638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*deinit_func)(void *); 7648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 7658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct oob_nfc_device_data { 7678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*init_func)(char *); 7688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void * (*read_func)(size_t *); 7698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*write_func)(void *, size_t); 7708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*deinit_func)(void); 7718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 7728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar * 7748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwps_registrar_init(struct wps_context *wps, 7758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_registrar_config *cfg); 7768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_registrar_deinit(struct wps_registrar *reg); 7778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_add_pin(struct wps_registrar *reg, const u8 *addr, 7788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid, const u8 *pin, size_t pin_len, 7798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int timeout); 7808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_invalidate_pin(struct wps_registrar *reg, const u8 *uuid); 7818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_wps_cancel(struct wps_registrar *reg); 7828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_unlock_pin(struct wps_registrar *reg, const u8 *uuid); 7838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_button_pushed(struct wps_registrar *reg, 7848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *p2p_dev_addr); 7858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_registrar_probe_req_rx(struct wps_registrar *reg, const u8 *addr, 7868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *wps_data, 7878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int p2p_wildcard); 7888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_update_ie(struct wps_registrar *reg); 7898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_get_info(struct wps_registrar *reg, const u8 *addr, 7908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *buf, size_t buflen); 7918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_config_ap(struct wps_registrar *reg, 7928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_credential *cred); 7938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_pin_checksum(unsigned int pin); 7958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_pin_valid(unsigned int pin); 7968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_generate_pin(void); 7978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_free_pending_msgs(struct upnp_pending_message *msgs); 7988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct oob_device_data * wps_get_oob_device(char *device_type); 8008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct oob_nfc_device_data * wps_get_oob_nfc_device(char *device_name); 8018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_get_oob_method(char *method); 8028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_process_oob(struct wps_context *wps, struct oob_device_data *oob_dev, 8038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int registrar); 8048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_attr_text(struct wpabuf *data, char *buf, char *end); 8058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_er * wps_er_init(struct wps_context *wps, const char *ifname, 8078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *filter); 8088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_refresh(struct wps_er *er); 8098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_deinit(struct wps_er *er, void (*cb)(void *ctx), void *ctx); 8108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_set_sel_reg(struct wps_er *er, int sel_reg, u16 dev_passwd_id, 8118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods); 8128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_er_pbc(struct wps_er *er, const u8 *uuid); 8138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_er_learn(struct wps_er *er, const u8 *uuid, const u8 *pin, 8148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pin_len); 8158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_er_set_config(struct wps_er *er, const u8 *uuid, 8168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *cred); 8178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_er_config(struct wps_er *er, const u8 *uuid, const u8 *pin, 8188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pin_len, const struct wps_credential *cred); 8198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_dev_type_str2bin(const char *str, u8 dev_type[WPS_DEV_TYPE_LEN]); 8218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * wps_dev_type_bin2str(const u8 dev_type[WPS_DEV_TYPE_LEN], char *buf, 8228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t buf_len); 8238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid uuid_gen_mac_addr(const u8 *mac_addr, u8 *uuid); 8248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtu16 wps_config_methods_str2bin(const char *str); 8258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS_STRICT 8278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_beacon(const struct wpabuf *wps_ie); 8288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe, 8298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr); 8308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_probe_req(const struct wpabuf *wps_ie, const u8 *addr); 8318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_assoc_req(const struct wpabuf *wps_ie); 8328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_assoc_resp(const struct wpabuf *wps_ie); 8338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m1(const struct wpabuf *tlvs); 8348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m2(const struct wpabuf *tlvs); 8358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m2d(const struct wpabuf *tlvs); 8368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m3(const struct wpabuf *tlvs); 8378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m4(const struct wpabuf *tlvs); 8388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2); 8398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m5(const struct wpabuf *tlvs); 8408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2); 8418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m6(const struct wpabuf *tlvs); 8428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2); 8438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m7(const struct wpabuf *tlvs); 8448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, int wps2); 8458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m8(const struct wpabuf *tlvs); 8468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, int wps2); 8478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_ack(const struct wpabuf *tlvs); 8488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_nack(const struct wpabuf *tlvs); 8498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_done(const struct wpabuf *tlvs); 8508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_upnp_set_selected_registrar(const struct wpabuf *tlvs); 8518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_WPS_STRICT */ 8528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_beacon(const struct wpabuf *wps_ie){ 8538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, 8578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int probe, const u8 *addr) 8588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_probe_req(const struct wpabuf *wps_ie, 8638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 8648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_assoc_req(const struct wpabuf *wps_ie) 8698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_assoc_resp(const struct wpabuf *wps_ie) 8748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m1(const struct wpabuf *tlvs) 8798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m2(const struct wpabuf *tlvs) 8848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m2d(const struct wpabuf *tlvs) 8898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m3(const struct wpabuf *tlvs) 8948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m4(const struct wpabuf *tlvs) 8998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2) 9048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m5(const struct wpabuf *tlvs) 9098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2) 9148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m6(const struct wpabuf *tlvs) 9198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2) 9248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m7(const struct wpabuf *tlvs) 9298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, 9348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wps2) 9358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m8(const struct wpabuf *tlvs) 9408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, 9458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wps2) 9468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_ack(const struct wpabuf *tlvs) 9518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_nack(const struct wpabuf *tlvs) 9568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_done(const struct wpabuf *tlvs) 9618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_upnp_set_selected_registrar( 9668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *tlvs) 9678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS_STRICT */ 9718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPS_H */ 973