p2p.h revision 700a137ab366edc72e371da68ba187b4717ee660
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wi-Fi Direct - P2P module 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2009-2010, Atheros Communications 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This software may be distributed under the terms of the BSD license. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See README for more details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef P2P_H 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define P2P_H 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * P2P_MAX_REG_CLASSES - Maximum number of regulatory classes 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define P2P_MAX_REG_CLASSES 10 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/** 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define P2P_MAX_REG_CLASS_CHANNELS 20 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch/** 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * struct p2p_channels - List of supported channels 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)struct p2p_channels { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * struct p2p_reg_class - Supported regulatory class 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch */ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct p2p_reg_class { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * reg_class - Regulatory class (IEEE 802.11-2007, Annex J) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 reg_class; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * channel - Supported channels 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) u8 channel[P2P_MAX_REG_CLASS_CHANNELS]; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /** 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * channels - Number of channel entries in use 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t channels; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } reg_class[P2P_MAX_REG_CLASSES]; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * reg_classes - Number of reg_class entries in use 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t reg_classes; 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum p2p_wps_method { 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WPS_NOT_READY, WPS_PIN_DISPLAY, WPS_PIN_KEYPAD, WPS_PBC 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum p2p_sd_action { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SRV_UPDATE, SRV_ADD, SRV_DEL, SRV_FLUSH 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/** 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * struct p2p_go_neg_results - P2P Group Owner Negotiation results 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct p2p_go_neg_results { 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * status - Negotiation result (Status Code) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * 0 (P2P_SC_SUCCESS) indicates success. Non-zero values indicate 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * failed negotiation. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int status; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * role_go - Whether local end is Group Owner 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int role_go; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * freq - Frequency of the group operational channel in MHz 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int freq; 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int ht40; 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /** 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ssid - SSID of the group 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) u8 ssid[32]; 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * ssid_len - Length of SSID in octets 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t ssid_len; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * psk - WPA pre-shared key (256 bits) (GO only) 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) u8 psk[32]; 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * psk_set - Whether PSK field is configured (GO only) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int psk_set; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * passphrase - WPA2-Personal passphrase for the group (GO only) 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) char passphrase[64]; 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * peer_device_addr - P2P Device Address of the peer 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 peer_device_addr[ETH_ALEN]; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * peer_interface_addr - P2P Interface Address of the peer 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 peer_interface_addr[ETH_ALEN]; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * wps_method - WPS method to be used during provisioning 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) enum p2p_wps_method wps_method; 123bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define P2P_MAX_CHANNELS 50 125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** 1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * freq_list - Zero-terminated list of possible operational channels 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int freq_list[P2P_MAX_CHANNELS]; 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * persistent_group - Whether the group should be made persistent 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 0 = not persistent 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1 = persistent group without persistent reconnect 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 2 = persistent group with persistent reconnect 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 13729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch int persistent_group; 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 13929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch /** 14029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * peer_config_timeout - Peer configuration timeout (in 10 msec units) 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) unsigned int peer_config_timeout; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_data; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum p2p_scan_type { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_SCAN_SOCIAL, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_SCAN_FULL, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_SCAN_SPECIFIC, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_SCAN_SOCIAL_PLUS_ONE 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define P2P_MAX_WPS_VENDOR_EXT 10 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * struct p2p_peer_info - P2P peer information 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_peer_info { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * p2p_device_addr - P2P Device Address of the peer 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 p2p_device_addr[ETH_ALEN]; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pri_dev_type - Primary Device Type 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 pri_dev_type[8]; 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * device_name - Device Name (0..32 octets encoded in UTF-8) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char device_name[33]; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * manufacturer - Manufacturer (0..64 octets encoded in UTF-8) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char manufacturer[65]; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * model_name - Model Name (0..32 octets encoded in UTF-8) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char model_name[33]; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * model_number - Model Number (0..32 octets encoded in UTF-8) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char model_number[33]; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * serial_number - Serial Number (0..32 octets encoded in UTF-8) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char serial_number[33]; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * level - Signal level 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int level; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * config_methods - WPS Configuration Methods 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) u16 config_methods; 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) /** 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * dev_capab - Device Capabilities 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) u8 dev_capab; 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * group_capab - Group Capabilities 2129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch */ 2139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch u8 group_capab; 2149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch /** 2169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch * wps_sec_dev_type_list - WPS secondary device type list 2179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch * 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This list includes from 0 to 16 Secondary Device Types as indicated 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * by wps_sec_dev_type_list_len (8 * number of types). 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch */ 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch u8 wps_sec_dev_type_list[128]; 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /** 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * wps_sec_dev_type_list_len - Length of secondary device type list 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch */ 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch size_t wps_sec_dev_type_list_len; 227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT]; 229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /** 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * wfd_subelems - Wi-Fi Display subelements from WFD IE(s) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct wpabuf *wfd_subelems; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum p2p_prov_disc_status { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_PROV_DISC_SUCCESS, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_PROV_DISC_TIMEOUT, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_PROV_DISC_REJECTED, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_PROV_DISC_TIMEOUT_JOIN, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_channel { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 op_class; 245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) u8 chan; 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * struct p2p_config - P2P configuration 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This configuration is provided to the P2P module during initialization with 252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * p2p_init(). 253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_config { 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * country - Country code to use in P2P operations 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char country[3]; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * reg_class - Regulatory class for own listen channel 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 reg_class; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * channel - Own listen channel 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 channel; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Regulatory class for own operational channel 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 op_reg_class; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) /** 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * op_channel - Own operational channel 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 op_channel; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cfg_op_channel - Whether op_channel is hardcoded in configuration 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 cfg_op_channel; 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * channels - Own supported regulatory classes and channels 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * List of supposerted channels per regulatory class. The regulatory 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * classes are defined in IEEE Std 802.11-2007 Annex J and the 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * numbering of the clases depends on the configured country code. 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct p2p_channels channels; 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * num_pref_chan - Number of pref_chan entries 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int num_pref_chan; 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * pref_chan - Preferred channels for GO Negotiation 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct p2p_channel *pref_chan; 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * pri_dev_type - Primary Device Type (see WPS) 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch u8 pri_dev_type[8]; 308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * P2P_SEC_DEVICE_TYPES - Maximum number of secondary device types 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define P2P_SEC_DEVICE_TYPES 5 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * sec_dev_type - Optional secondary device types 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 sec_dev_type[P2P_SEC_DEVICE_TYPES][8]; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * num_sec_dev_types - Number of sec_dev_type entries 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_sec_dev_types; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dev_addr - P2P Device Address 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u8 dev_addr[ETH_ALEN]; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * dev_name - Device Name 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *dev_name; 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *manufacturer; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *model_name; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char *model_number; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *serial_number; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 uuid[16]; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u16 config_methods; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * concurrent_operations - Whether concurrent operations are supported 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int concurrent_operations; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * max_peers - Maximum number of discovered peers to remember 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If more peers are discovered, older entries will be removed to make 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * room for the new ones. 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t max_peers; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_intra_bss - Intra BSS communication is supported 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int p2p_intra_bss; 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ssid_postfix - Postfix data to add to the SSID 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This data will be added to the end of the SSID after the 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * DIRECT-<random two octets> prefix. 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u8 ssid_postfix[32 - 9]; 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ssid_postfix_len - Length of the ssid_postfix data 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t ssid_postfix_len; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * max_listen - Maximum listen duration in ms 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int max_listen; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef ANDROID_P2P 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum p2p_concurrency_type { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_NON_CONCURRENT, 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_SINGLE_CHANNEL_CONCURRENT, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_MULTI_CHANNEL_CONCURRENT, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } p2p_concurrency; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * msg_ctx - Context to use with wpa_msg() calls 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *msg_ctx; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cb_ctx - Context to use with callback functions 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *cb_ctx; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Callbacks to request lower layer driver operations */ 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_scan - Request a P2P scan/search 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type: Scan type 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @freq: Specific frequency (MHz) to scan or 0 for no restriction 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @num_req_dev_types: Number of requested device types 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @req_dev_types: Array containing requested device types 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_id: Device ID to search for or %NULL to find all devices 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pw_id: Device Password ID 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This callback function is used to request a P2P scan or search 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * operation to be completed. Type type argument specifies which type 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of scan is to be done. @P2P_SCAN_SOCIAL indicates that only the 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * social channels (1, 6, 11) should be scanned. @P2P_SCAN_FULL 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicates that all channels are to be scanned. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @P2P_SCAN_SOCIAL_PLUS_ONE request scan of all the social channels 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * plus one extra channel specified by freq. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The full scan is used for the initial scan to find group owners from 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all. The other types are used during search phase scan of the social 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * channels (with potential variation if the Listen channel of the 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * target peer is known or if other channels are scanned in steps). 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The scan results are returned after this call by calling 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_scan_res_handler() for each scan result that has a P2P IE and 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * then calling p2p_scan_res_handled() to indicate that all scan 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * results have been indicated. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int (*p2p_scan)(void *ctx, enum p2p_scan_type type, int freq, 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned int num_req_dev_types, 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const u8 *req_dev_types, const u8 *dev_id, u16 pw_id); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * send_probe_resp - Transmit a Probe Response frame 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @ctx: Callback context from cb_ctx 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @buf: Probe Response frame (including the header and body) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function is used to reply to Probe Request frames that were 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicated with a call to p2p_probe_req_rx(). The response is to be 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * sent on the same channel or to be dropped if the driver is not 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * anymore listening to Probe Request frames. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Alternatively, the responsibility for building the Probe Response 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * frames in Listen state may be in another system component in which 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * case this function need to be implemented (i.e., the function 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pointer can be %NULL). The WPS and P2P IEs to be added for Probe 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Response frames in such a case are available from the 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * start_listen() callback. It should be noted that the received Probe 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Request frames must be indicated by calling p2p_probe_req_rx() even 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * if this send_probe_resp() is not used. 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int (*send_probe_resp)(void *ctx, const struct wpabuf *buf); 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * send_action - Transmit an Action frame 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @freq: Frequency in MHz for the channel on which to transmit 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dst: Destination MAC address (Address 1) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @src: Source MAC address (Address 2) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @bssid: BSSID (Address 3) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @buf: Frame body (starting from Category field) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: Length of buf in octets 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @wait_time: How many msec to wait for a response frame 4647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Returns: 0 on success, -1 on failure 4657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Action frame may not be transmitted immediately and the status 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of the transmission must be reported by calling 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_send_action_cb() once the frame has either been transmitted or 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * it has been dropped due to excessive retries or other failure to 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * transmit. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int (*send_action)(void *ctx, unsigned int freq, const u8 *dst, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *src, const u8 *bssid, const u8 *buf, 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t len, unsigned int wait_time); 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * send_action_done - Notify that Action frame sequence was completed 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @ctx: Callback context from cb_ctx 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This function is called when the Action frame sequence that was 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * started with send_action() has been completed, i.e., when there is 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * no need to wait for a response from the destination peer anymore. 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void (*send_action_done)(void *ctx); 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * start_listen - Start Listen state 4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @ctx: Callback context from cb_ctx 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @freq: Frequency of the listen channel in MHz 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @duration: Duration for the Listen state in milliseconds 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @probe_resp_ie: IE(s) to be added to Probe Response frames 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This Listen state may not start immediately since the driver may 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * have other pending operations to complete first. Once the Listen 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * state has started, p2p_listen_cb() must be called to notify the P2P 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * module. Once the Listen state is stopped, p2p_listen_end() must be 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called to notify the P2P module that the driver is not in the Listen 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * state anymore. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If the send_probe_resp() is not used for generating the response, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the IEs from probe_resp_ie need to be added to the end of the Probe 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Response frame body. If send_probe_resp() is used, the probe_resp_ie 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * information can be ignored. 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int (*start_listen)(void *ctx, unsigned int freq, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int duration, 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct wpabuf *probe_resp_ie); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * stop_listen - Stop Listen state 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This callback can be used to stop a Listen state operation that was 514a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch * previously requested with start_listen(). 515a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch */ 516a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch void (*stop_listen)(void *ctx); 517a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 518a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch /** 519a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch * get_noa - Get current Notice of Absence attribute payload 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interface_addr: P2P Interface Address of the GO 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @buf: Buffer for returning NoA 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @buf_len: Buffer length in octets 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: Number of octets used in buf, 0 to indicate no NoA is being 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * advertized, or -1 on failure 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function is used to fetch the current Notice of Absence 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * attribute value from GO. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int (*get_noa)(void *ctx, const u8 *interface_addr, u8 *buf, 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t buf_len); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Callbacks to notify events to upper layer management entity */ 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) /** 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dev_found - Notification of a found P2P Device 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @addr: Source address of the message triggering this notification 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @info: P2P peer information 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @new_device: Inform if the peer is newly found 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * This callback is used to notify that a new P2P Device has been 5437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * found. This may happen, e.g., during Search state based on scan 5447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * results or during Listen state based on receive Probe Request and 5457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Group Owner Negotiation Request. 5467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 5477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void (*dev_found)(void *ctx, const u8 *addr, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct p2p_peer_info *info, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int new_device); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * dev_lost - Notification of a lost P2P Device 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_addr: P2P Device Address of the lost P2P Device 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This callback is used to notify that a P2P Device has been deleted. 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void (*dev_lost)(void *ctx, const u8 *dev_addr); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * go_neg_req_rx - Notification of a receive GO Negotiation Request 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @src: Source address of the message triggering this notification 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_passwd_id: WPS Device Password ID 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This callback is used to notify that a P2P Device is requesting 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * group owner negotiation with us, but we do not have all the 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * necessary information to start GO Negotiation. This indicates that 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the local user has not authorized the connection yet by providing a 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PIN or PBC button press. This information can be provided with a 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * call to p2p_connect(). 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void (*go_neg_req_rx)(void *ctx, const u8 *src, u16 dev_passwd_id); 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * go_neg_completed - Notification of GO Negotiation results 5774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @ctx: Callback context from cb_ctx 5784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @res: GO Negotiation results 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * This callback is used to notify that Group Owner Negotiation has 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * been completed. Non-zero struct p2p_go_neg_results::status indicates 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * failed negotiation. In case of success, this function is responsible 5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * for creating a new group interface (or using the existing interface 5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * depending on driver features), setting up the group interface in 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * proper mode based on struct p2p_go_neg_results::role_go and 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * initializing WPS provisioning either as a Registrar (if GO) or as an 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Enrollee. Successful WPS provisioning must be indicated by calling 5885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * p2p_wps_success_cb(). The callee is responsible for timing out group 589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * formation if WPS provisioning cannot be completed successfully 590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * within 15 seconds. 591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void (*go_neg_completed)(void *ctx, struct p2p_go_neg_results *res); 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * sd_request - Callback on Service Discovery Request 596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @ctx: Callback context from cb_ctx 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @freq: Frequency (in MHz) of the channel 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @sa: Source address of the request 599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @dialog_token: Dialog token 600a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @update_indic: Service Update Indicator from the source of request 601a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @tlvs: P2P Service Request TLV(s) 602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @tlvs_len: Length of tlvs buffer in octets 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * This callback is used to indicate reception of a service discovery 605a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * request. Response to the query must be indicated by calling 606a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * p2p_sd_response() with the context information from the arguments to 607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * this callback function. 608a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This callback handler can be set to %NULL to indicate that service 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * discovery is not supported. 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void (*sd_request)(void *ctx, int freq, const u8 *sa, u8 dialog_token, 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) u16 update_indic, const u8 *tlvs, size_t tlvs_len); 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * sd_response - Callback on Service Discovery Response 6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @ctx: Callback context from cb_ctx 6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @sa: Source address of the request 6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @update_indic: Service Update Indicator from the source of response 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @tlvs: P2P Service Response TLV(s) 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @tlvs_len: Length of tlvs buffer in octets 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This callback is used to indicate reception of a service discovery 6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * response. This callback handler can be set to %NULL if no service 6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * discovery requests are used. The information provided with this call 6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * is replies to the queries scheduled with p2p_sd_request(). 6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void (*sd_response)(void *ctx, const u8 *sa, u16 update_indic, 629a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const u8 *tlvs, size_t tlvs_len); 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * prov_disc_req - Callback on Provisiong Discovery Request 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @ctx: Callback context from cb_ctx 6346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @peer: Source address of the request 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @config_methods: Requested WPS Config Method 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_addr: P2P Device Address of the found P2P Device 637ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @pri_dev_type: Primary Device Type 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_name: Device Name 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @supp_config_methods: Supported configuration Methods 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_capab: Device Capabilities 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @group_capab: Group Capabilities 6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @group_id: P2P Group ID (or %NULL if not included) 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @group_id_len: Length of P2P Group ID 6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 6455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * This callback is used to indicate reception of a Provision Discovery 6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Request frame that the P2P module accepted. 6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void (*prov_disc_req)(void *ctx, const u8 *peer, u16 config_methods, 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const u8 *dev_addr, const u8 *pri_dev_type, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *dev_name, u16 supp_config_methods, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 dev_capab, u8 group_capab, 652a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const u8 *group_id, size_t group_id_len); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch /** 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * prov_disc_resp - Callback on Provisiong Discovery Response 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @peer: Source address of the response 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @config_methods: Value from p2p_prov_disc_req() or 0 on failure 6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * This callback is used to indicate reception of a Provision Discovery 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Response frame for a pending request scheduled with 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_prov_disc_req(). This callback handler can be set to %NULL if 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * provision discovery is not used. 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void (*prov_disc_resp)(void *ctx, const u8 *peer, u16 config_methods); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * prov_disc_fail - Callback on Provision Discovery failure 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @ctx: Callback context from cb_ctx 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer: Source address of the response 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @status: Cause of failure, will not be %P2P_PROV_DISC_SUCCESS 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This callback is used to indicate either a failure or no response 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * to an earlier provision discovery request. 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This callback handler can be set to %NULL if provision discovery 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * is not used or failures do not need to be indicated. 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void (*prov_disc_fail)(void *ctx, const u8 *peer, 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum p2p_prov_disc_status status); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * invitation_process - Optional callback for processing Invitations 6847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @ctx: Callback context from cb_ctx 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @sa: Source address of the Invitation Request 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @bssid: P2P Group BSSID from the request or %NULL if not included 687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @go_dev_addr: GO Device Address from P2P Group ID 688868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @ssid: SSID from P2P Group ID 6897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @ssid_len: Length of ssid buffer in octets 690868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @go: Variable for returning whether the local end is GO in the group 691868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @group_bssid: Buffer for returning P2P Group BSSID (if local end GO) 692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @force_freq: Variable for returning forced frequency for the group 693868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @persistent_group: Whether this is an invitation to reinvoke a 6943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * persistent group (instead of invitation to join an active 695cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * group) 6963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Returns: Status code (P2P_SC_*) 6973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * 6983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * This optional callback can be used to implement persistent reconnect 6993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * by allowing automatic restarting of persistent groups without user 700868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * interaction. If this callback is not implemented (i.e., is %NULL), 701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * the received Invitation Request frames are replied with 702868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * %P2P_SC_REQ_RECEIVED status and indicated to upper layer with the 703868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * invitation_result() callback. 704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * 705868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * If the requested parameters are acceptable and the group is known, 706868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * %P2P_SC_SUCCESS may be returned. If the requested group is unknown, 707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * %P2P_SC_FAIL_UNKNOWN_GROUP should be returned. %P2P_SC_REQ_RECEIVED 708868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * can be returned if there is not enough data to provide immediate 709868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * response, i.e., if some sort of user interaction is needed. The 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * invitation_received() callback will be called in that case 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * immediately after this call. 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u8 (*invitation_process)(void *ctx, const u8 *sa, const u8 *bssid, 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *go_dev_addr, const u8 *ssid, 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t ssid_len, int *go, u8 *group_bssid, 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *force_freq, int persistent_group); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * invitation_received - Callback on Invitation Request RX 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @sa: Source address of the Invitation Request 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @bssid: P2P Group BSSID or %NULL if not received 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ssid: SSID of the group 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ssid_len: Length of ssid in octets 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_dev_addr: GO Device Address 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @status: Response Status 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @op_freq: Operational frequency for the group 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This callback is used to indicate sending of an Invitation Response 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for a received Invitation Request. If status == 0 (success), the 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * upper layer code is responsible for starting the group. status == 1 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicates need to get user authorization for the group. Other status 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * values indicate that the invitation request was rejected. 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void (*invitation_received)(void *ctx, const u8 *sa, const u8 *bssid, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *ssid, size_t ssid_len, 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *go_dev_addr, u8 status, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int op_freq); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * invitation_result - Callback on Invitation result 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @status: Negotiation result (Status Code) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @bssid: P2P Group BSSID or %NULL if not received 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @channels: Available operating channels for the group 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @addr: Peer address 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This callback is used to indicate result of an Invitation procedure 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * started with a call to p2p_invite(). The indicated status code is 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the value received from the peer in Invitation Response with 0 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (P2P_SC_SUCCESS) indicating success or -1 to indicate a timeout or a 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * local failure in transmitting the Invitation Request. 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void (*invitation_result)(void *ctx, int status, const u8 *bssid, 755e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const struct p2p_channels *channels, 756e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const u8 *addr); 757e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * go_connected - Check whether we are connected to a GO 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: Callback context from cb_ctx 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dev_addr: P2P Device Address of a GO 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 1 if we are connected as a P2P client to the specified GO 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or 0 if not. 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int (*go_connected)(void *ctx, const u8 *dev_addr); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* P2P module initialization/deinitialization */ 7707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/** 7724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * p2p_init - Initialize P2P module 7734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @cfg: P2P module configuration 7744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Returns: Pointer to private data or %NULL on failure 7754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * 7764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * This function is used to initialize global P2P module context (one per 7777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * device). The P2P module will keep a copy of the configuration data, so the 7787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * caller does not need to maintain this structure. However, the callback 7797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * functions and the context parameters to them must be kept available until 7807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * the P2P module is deinitialized with p2p_deinit(). 7817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 7827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct p2p_data * p2p_init(const struct p2p_config *cfg); 7837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/** 7857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * p2p_deinit - Deinitialize P2P module 7867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @p2p: P2P module context from p2p_init() 7877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 788a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid p2p_deinit(struct p2p_data *p2p); 789cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 790cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 7917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * p2p_flush - Flush P2P module state 792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 793cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * 7947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * This command removes the P2P module state like peer device entries. 795cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 796cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void p2p_flush(struct p2p_data *p2p); 797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_unauthorize - Unauthorize the specified peer device 800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init() 8017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @addr: P2P peer entry to be unauthorized 802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure 803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This command removes any connection authorization from the specified P2P 8057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * peer device address. This can be used, e.g., to cancel effect of a previous 80646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * p2p_authorize() or p2p_connect() call that has not yet resulted in completed 80746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * GO Negotiation. 80846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) */ 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int p2p_unauthorize(struct p2p_data *p2p, const u8 *addr); 810c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 8121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_set_dev_name - Set device name 813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns: 0 on success, -1 on failure 815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This function can be used to update the P2P module configuration with 8171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * information that was not available at the time of the p2p_init() call. 8181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 8191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_dev_name(struct p2p_data *p2p, const char *dev_name); 8201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_manufacturer(struct p2p_data *p2p, const char *manufacturer); 8221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_model_name(struct p2p_data *p2p, const char *model_name); 8231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_model_number(struct p2p_data *p2p, const char *model_number); 8241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_serial_number(struct p2p_data *p2p, const char *serial_number); 8251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_set_config_methods(struct p2p_data *p2p, u16 config_methods); 8271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_set_uuid(struct p2p_data *p2p, const u8 *uuid); 8281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_set_pri_dev_type - Set primary device type 83129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * @p2p: P2P module context from p2p_init() 832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure 83329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * 834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function can be used to update the P2P module configuration with 835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * information that was not available at the time of the p2p_init() call. 836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 837116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_set_pri_dev_type(struct p2p_data *p2p, const u8 *pri_dev_type); 838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 84029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * p2p_set_sec_dev_types - Set secondary device types 84129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * @p2p: P2P module context from p2p_init() 84229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * Returns: 0 on success, -1 on failure 84329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * 84429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * This function can be used to update the P2P module configuration with 84529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * information that was not available at the time of the p2p_init() call. 846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 847116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_set_sec_dev_types(struct p2p_data *p2p, const u8 dev_types[][8], 848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t num_dev_types); 849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 850116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_set_country(struct p2p_data *p2p, const char *country); 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/* Commands from upper layer management entity */ 854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdochenum p2p_discovery_type { 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch P2P_FIND_START_WITH_FULL, 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch P2P_FIND_ONLY_SOCIAL, 858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch P2P_FIND_PROGRESSIVE 8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_find - Start P2P Find (Device Discovery) 8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @timeout: Timeout for find operation in seconds or 0 for no timeout 8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type: Device Discovery type 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @num_req_dev_types: Number of requested device types 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @req_dev_types: Requested device types array, must be an array 8682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * containing num_req_dev_types * WPS_DEV_TYPE_LEN bytes; %NULL if no 8692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * requested device types. 8702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @dev_id: Device ID to search for or %NULL to find all devices 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @search_delay: Extra delay in milliseconds between search iterations 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int p2p_find(struct p2p_data *p2p, unsigned int timeout, 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum p2p_discovery_type type, 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int num_req_dev_types, const u8 *req_dev_types, 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const u8 *dev_id, unsigned int search_delay); 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * p2p_stop_find - Stop P2P Find (Device Discovery) 881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void p2p_stop_find(struct p2p_data *p2p); 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_stop_find_for_freq - Stop P2P Find for next oper on specific freq 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 8884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @freq: Frequency in MHz for next operation 889cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * 890cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * This is like p2p_stop_find(), but Listen state is not stopped if we are 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * already on the same frequency. 8924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 893cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void p2p_stop_find_for_freq(struct p2p_data *p2p, int freq); 894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_listen - Start P2P Listen state for specified duration 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 898cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @timeout: Listen state duration in milliseconds 899cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Returns: 0 on success, -1 on failure 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This function can be used to request the P2P module to keep the device 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * discoverable on the listen channel for an extended set of time. At least in 903cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * its current form, this is mainly used for testing purposes and may not be of 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * much use for normal P2P operations. 905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int p2p_listen(struct p2p_data *p2p, unsigned int timeout); 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_connect - Start P2P group formation (GO negotiation) 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @peer_addr: MAC address of the peer P2P client 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @wps_method: WPS method to be used in provisioning 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @go_intent: Local GO intent value (1..15) 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @own_interface_addr: Intended interface address to use with the group 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @force_freq: The only allowed channel frequency in MHz or 0 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @persistent_group: Whether to create a persistent group (0 = no, 1 = 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * persistent group without persistent reconnect, 2 = persistent group with 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * persistent reconnect) 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @force_ssid: Forced SSID for the group if we become GO or %NULL to generate 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * a new SSID 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @force_ssid_len: Length of $force_ssid buffer 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pd_before_go_neg: Whether to send Provision Discovery prior to GO 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Negotiation as an interoperability workaround when initiating group 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * formation 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * force_freq == 0) 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr, 930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum p2p_wps_method wps_method, 931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int go_intent, const u8 *own_interface_addr, 932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned int force_freq, int persistent_group, 933a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const u8 *force_ssid, size_t force_ssid_len, 934a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int pd_before_go_neg, unsigned int pref_freq); 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 936010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/** 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_authorize - Authorize P2P group formation (GO negotiation) 9385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer_addr: MAC address of the peer P2P client 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @wps_method: WPS method to be used in provisioning 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_intent: Local GO intent value (1..15) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @own_interface_addr: Intended interface address to use with the group 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @force_freq: The only allowed channel frequency in MHz or 0 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @persistent_group: Whether to create a persistent group (0 = no, 1 = 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * persistent group without persistent reconnect, 2 = persistent group with 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * persistent reconnect) 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @force_ssid: Forced SSID for the group if we become GO or %NULL to generate 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * a new SSID 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @force_ssid_len: Length of $force_ssid buffer 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * force_freq == 0) 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is like p2p_connect(), but the actual group negotiation is not 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * initiated automatically, i.e., the other end is expected to do that. 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr, 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum p2p_wps_method wps_method, 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int go_intent, const u8 *own_interface_addr, 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int force_freq, int persistent_group, 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *force_ssid, size_t force_ssid_len, 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int pref_freq); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_reject - Reject peer device (explicitly block connection attempts) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer_addr: MAC address of the peer P2P client 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_reject(struct p2p_data *p2p, const u8 *peer_addr); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_prov_disc_req - Send Provision Discovery Request 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @peer_addr: MAC address of the peer P2P client 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @config_methods: WPS Config Methods value (only one bit set) 977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @join: Whether this is used by a client joining an active group 978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @force_freq: Forced TX frequency for the frame (mainly for the join case) 979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @user_initiated_pd: Flag to indicate if initiated by user or not 980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure 981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function can be used to request a discovered P2P peer to display a PIN 983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * (config_methods = WPS_CONFIG_DISPLAY) or be prepared to enter a PIN from us 984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * (config_methods = WPS_CONFIG_KEYPAD). The Provision Discovery Request frame 985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * is transmitted once immediately and if no response is received, the frame 9865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * will be sent again whenever the target device is discovered during device 987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * dsicovery (start with a p2p_find() call). Response from the peer is 988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * indicated with the p2p_config::prov_disc_resp() callback. 989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 990ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint p2p_prov_disc_req(struct p2p_data *p2p, const u8 *peer_addr, 991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch u16 config_methods, int join, int force_freq, 992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int user_initiated_pd); 993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 9945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/** 9955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * p2p_sd_request - Schedule a service discovery query 996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init() 997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dst: Destination peer or %NULL to apply for all peers 998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @tlvs: P2P Service Query TLV(s) 9991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: Reference to the query or %NULL on failure 10001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Response to the query is indicated with the p2p_config::sd_response() 1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * callback. 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid * p2p_sd_request(struct p2p_data *p2p, const u8 *dst, 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const struct wpabuf *tlvs); 1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef CONFIG_WIFI_DISPLAY 1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid * p2p_sd_request_wfd(struct p2p_data *p2p, const u8 *dst, 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const struct wpabuf *tlvs); 1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif /* CONFIG_WIFI_DISPLAY */ 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_sd_cancel_request - Cancel a pending service discovery query 1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init() 1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @req: Query reference from p2p_sd_request() 1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 if request for cancelled; -1 if not found 1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1018cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int p2p_sd_cancel_request(struct p2p_data *p2p, void *req); 1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_sd_response - Send response to a service discovery query 102246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 1023cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @freq: Frequency from p2p_config::sd_request() callback 1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dst: Destination address from p2p_config::sd_request() callback 1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dialog_token: Dialog token from p2p_config::sd_request() callback 10265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @resp_tlvs: P2P Service Response TLV(s) 10271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 10281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is called as a response to the request indicated with 10291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_config::sd_request() callback. 10301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_sd_response(struct p2p_data *p2p, int freq, const u8 *dst, 10325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) u8 dialog_token, const struct wpabuf *resp_tlvs); 1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_sd_service_update - Indicate a change in local services 10365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function needs to be called whenever there is a change in availability 1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * of the local services. This will increment the Service Update Indicator 1040868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * value which will be used in SD Request and Response frames. 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef ANDROID_P2P 10431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_sd_service_update(struct p2p_data *p2p, int action); 10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void p2p_sd_service_update(struct p2p_data *p2p); 1046e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif 1047e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 1048e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 1049e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochenum p2p_invite_role { 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_INVITE_ROLE_GO, 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_INVITE_ROLE_ACTIVE_GO, 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) P2P_INVITE_ROLE_CLIENT 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_invite - Invite a P2P Device into a group 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer: Device Address of the peer P2P Device 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @role: Local role in the group 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @bssid: Group BSSID or %NULL if not known 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ssid: Group SSID 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ssid_len: Length of ssid in octets 1063868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @force_freq: The only allowed channel frequency in MHz or 0 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_dev_addr: Forced GO Device Address or %NULL if none 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @persistent_group: Whether this is to reinvoke a persistent group 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * force_freq == 0) 1068ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Returns: 0 on success, -1 on failure 1069ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 1070ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint p2p_invite(struct p2p_data *p2p, const u8 *peer, enum p2p_invite_role role, 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *bssid, const u8 *ssid, size_t ssid_len, 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int force_freq, const u8 *go_dev_addr, 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int persistent_group, unsigned int pref_freq); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_presence_req - Request GO presence 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_interface_addr: GO P2P Interface Address 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @own_interface_addr: Own P2P Interface Address for this group 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @freq: Group operating frequence (in MHz) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @duration1: Preferred presence duration in microseconds 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interval1: Preferred presence interval in microseconds 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @duration2: Acceptable presence duration in microseconds 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interval2: Acceptable presence interval in microseconds 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If both duration and interval values are zero, the parameter pair is not 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * specified (i.e., to remove Presence Request, use duration1 = interval1 = 0). 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_presence_req(struct p2p_data *p2p, const u8 *go_interface_addr, 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const u8 *own_interface_addr, unsigned int freq, 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u32 duration1, u32 interval1, u32 duration2, 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u32 interval2); 10945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 10961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_ext_listen - Set Extended Listen Timing 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @freq: Group operating frequence (in MHz) 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @period: Availability period in milliseconds (1-65535; 0 to disable) 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interval: Availability interval in milliseconds (1-65535; 0 to disable) 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function can be used to enable or disable (period = interval = 0) 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Extended Listen Timing. When enabled, the P2P Device will become 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * discoverable (go into Listen State) every @interval milliseconds for at 1106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * least @period milliseconds. 1107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_ext_listen(struct p2p_data *p2p, unsigned int period, 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int interval); 1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/* Event notifications from upper layer management operations */ 1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_wps_success_cb - Report successfully completed WPS provisioning 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @mac_addr: Peer address 11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This function is used to report successfully completed WPS provisioning 1119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * during group formation in both GO/Registrar and client/Enrollee roles. 1120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void p2p_wps_success_cb(struct p2p_data *p2p, const u8 *mac_addr); 1122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/** 1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_group_formation_failed - Report failed WPS provisioning 1125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 11275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * This function is used to report failed group formation. This can happen 1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * either due to failed WPS provisioning or due to 15 second timeout during 1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the provisioning phase. 1130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_group_formation_failed(struct p2p_data *p2p); 1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 11341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_get_provisioning_info - Get any stored provisioning info 11351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @p2p: P2P module context from p2p_init() 11361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @addr: Peer P2P Device Address 11371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: WPS provisioning information (WPS config method) or 0 if no 11381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * information is available 11391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 11401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is used to retrieve stored WPS provisioning info for the given 11411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * peer. 11421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 11431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciu16 p2p_get_provisioning_info(struct p2p_data *p2p, const u8 *addr); 11441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 11461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_clear_provisioning_info - Clear any stored provisioning info 11471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @p2p: P2P module context from p2p_init() 11481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @iface_addr: Peer P2P Device Address 11491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 11501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is used to clear stored WPS provisioning info for the given 11511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * peer. 11521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 11531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_clear_provisioning_info(struct p2p_data *p2p, const u8 *addr); 11541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/* Event notifications from lower layer driver operations */ 11571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 11591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * enum p2p_probe_req_status 11601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 11611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_MALFORMED: frame was not well-formed 11621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_NOT_LISTEN: device isn't in listen state, frame ignored 11631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_NOT_P2P: frame was not a P2P probe request 11641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_P2P_NOT_PROCESSED: frame was P2P but wasn't processed 11651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_P2P_PROCESSED: frame has been processed by P2P 11661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 11671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccienum p2p_probe_req_status { 11681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci P2P_PREQ_MALFORMED, 11691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci P2P_PREQ_NOT_LISTEN, 1170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch P2P_PREQ_NOT_P2P, 1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch P2P_PREQ_NOT_PROCESSED, 1172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch P2P_PREQ_PROCESSED 1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_probe_req_rx - Report reception of a Probe Request frame 1177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init() 1178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @addr: Source MAC address 1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dst: Destination MAC address if available or %NULL 1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @bssid: BSSID if available or %NULL 1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @ie: Information elements from the Probe Request frame body 11821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @ie_len: Length of ie buffer in octets 11831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: value indicating the type and status of the probe request 11841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 11851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccienum p2p_probe_req_status 1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdochp2p_probe_req_rx(struct p2p_data *p2p, const u8 *addr, const u8 *dst, 11875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const u8 *bssid, const u8 *ie, size_t ie_len); 1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 11906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * p2p_rx_action - Report received Action frame 11916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 11926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @da: Destination address of the received Action frame 11936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @sa: Source address of the received Action frame 1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @bssid: Address 3 of the received Action frame 1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @category: Category of the received Action frame 1196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @data: Action frame body after the Category field 1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @len: Length of the data buffer in octets 1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @freq: Frequency (in MHz) on which the frame was received 1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa, 1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const u8 *bssid, u8 category, 1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const u8 *data, size_t len, int freq); 120346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 120446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/** 12055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * p2p_scan_res_handler - Indicate a P2P scan results 12065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 120746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @bssid: BSSID of the scan result 120846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @freq: Frequency of the channel on which the device was found in MHz 1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @rx_time: Time when the result was received 121046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @level: Signal level (signal strength of the received Beacon/Probe Response 1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * frame) 12125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @ies: Pointer to IEs from the scan result 12135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @ies_len: Length of the ies buffer 12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Returns: 0 to continue or 1 to stop scan result indication 1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function is called to indicate a scan result entry with P2P IE from a 1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * scan requested with struct p2p_config::p2p_scan(). This can be called during 1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the actual scan process (i.e., whenever a new device is found) or as a 1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * sequence of calls after the full scan has been completed. The former option 1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * can result in optimized operations, but may not be supported by all 1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * driver/firmware designs. The ies buffer need to include at least the P2P IE, 1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * but it is recommended to include all IEs received from the device. The 1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * caller does not need to check that the IEs contain a P2P IE before calling 12245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * this function since frames will be filtered internally if needed. 12255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 1226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This function will return 1 if it wants to stop scan result iteration (and 1227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * scan in general if it is still in progress). This is used to allow faster 1228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * start of a pending operation, e.g., to start a pending GO negotiation. 1229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int p2p_scan_res_handler(struct p2p_data *p2p, const u8 *bssid, int freq, 1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch struct os_time *rx_time, int level, const u8 *ies, 1232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t ies_len); 1233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_scan_res_handled - Indicate end of scan results 1236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @p2p: P2P module context from p2p_init() 1237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 1238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * This function is called to indicate that all P2P scan results from a scan 1239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * have been reported with zero or more calls to p2p_scan_res_handler(). This 1240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * function must be called as a response to successful 1241bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch * struct p2p_config::p2p_scan() call if none of the p2p_scan_res_handler() 1242bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch * calls stopped iteration. 1243bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch */ 1244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void p2p_scan_res_handled(struct p2p_data *p2p); 1245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1246bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochenum p2p_send_action_result { 1247bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch P2P_SEND_ACTION_SUCCESS /* Frame was send and acknowledged */, 12485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) P2P_SEND_ACTION_NO_ACK /* Frame was sent, but not acknowledged */, 12495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) P2P_SEND_ACTION_FAILED /* Frame was not sent due to a failure */ 12505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 12515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 12535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * p2p_send_action_cb - Notify TX status of an Action frame 12545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @p2p: P2P module context from p2p_init() 12555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @freq: Channel frequency in MHz 1256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @dst: Destination MAC address (Address 1) 12575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @src: Source MAC address (Address 2) 12585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @bssid: BSSID (Address 3) 1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @result: Result of the transmission attempt 1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function is used to indicate the result of an Action frame transmission 1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * that was requested with struct p2p_config::send_action() callback. 1263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 1264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst, 1265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const u8 *src, const u8 *bssid, 1266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) enum p2p_send_action_result result); 1267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/** 1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_listen_cb - Indicate the start of a requested Listen state 1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init() 1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @freq: Listen channel frequency in MHz 1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @duration: Duration for the Listen state in milliseconds 1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * This function is used to indicate that a Listen state requested with 1275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * struct p2p_config::start_listen() callback has started. 1276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_listen_cb(struct p2p_data *p2p, unsigned int freq, 1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unsigned int duration); 1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_listen_end - Indicate the end of a requested Listen state 1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init() 1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @freq: Listen channel frequency in MHz 1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 if no operations were started, 1 if an operation was started 1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 12866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * This function is used to indicate that a Listen state requested with 12876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * struct p2p_config::start_listen() callback has ended. 12886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 12896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)int p2p_listen_end(struct p2p_data *p2p, unsigned int freq); 12906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 12916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void p2p_deauth_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code, 12926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const u8 *ie, size_t ie_len); 1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_disassoc_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code, 1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const u8 *ie, size_t ie_len); 1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/* Per-group P2P state for GO */ 1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct p2p_group; 1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * struct p2p_group_config - P2P group configuration 1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This configuration is provided to the P2P module during initialization of 1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the per-group information with p2p_group_init(). 1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct p2p_group_config { 1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * persistent_group - Whether the group is persistent 1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 0 = not a persistent group 1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1 = persistent group without persistent reconnect 1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 2 = persistent group with persistent reconnect 1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int persistent_group; 1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * interface_addr - P2P Interface Address of the group 1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch u8 interface_addr[ETH_ALEN]; 1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * max_clients - Maximum number of clients in the group 1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unsigned int max_clients; 1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * ssid - Group SSID 1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch u8 ssid[32]; 13311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 13321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 13331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * ssid_len - Length of SSID 1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t ssid_len; 1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * cb_ctx - Context to use with callback functions 1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void *cb_ctx; 1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * ie_update - Notification of IE update 13445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @ctx: Callback context from cb_ctx 13455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @beacon_ies: P2P IE for Beacon frames or %NULL if no change 1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @proberesp_ies: P2P Ie for Probe Response frames 1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 13485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * P2P module uses this callback function to notify whenever the P2P IE 13495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * in Beacon or Probe Response frames should be updated based on group 13505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * events. 13515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * 13525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * The callee is responsible for freeing the returned buffer(s) with 13535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * wpabuf_free(). 1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void (*ie_update)(void *ctx, struct wpabuf *beacon_ies, 1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch struct wpabuf *proberesp_ies); 1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 13595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * idle_update - Notification of changes in group idle state 13605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @ctx: Callback context from cb_ctx 13615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @idle: Whether the group is idle (no associated stations) 13625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void (*idle_update)(void *ctx, int idle); 13641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 13651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 13661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 13671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_group_init - Initialize P2P group 13681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @p2p: P2P module context from p2p_init() 13691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @config: P2P group configuration (will be freed by p2p_group_deinit()) 13701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: Pointer to private data or %NULL on failure 13711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 13721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is used to initialize per-group P2P module context. Currently, 13731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * this is only used to manage GO functionality and P2P clients do not need to 13741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * create an instance of this per-group information. 13751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 13761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct p2p_group * p2p_group_init(struct p2p_data *p2p, 13771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct p2p_group_config *config); 13781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 13791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 13801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_group_deinit - Deinitialize P2P group 1381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @group: P2P group context from p2p_group_init() 1382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1383116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_group_deinit(struct p2p_group *group); 1384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 1386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_group_notif_assoc - Notification of P2P client association with GO 1387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @group: P2P group context from p2p_group_init() 1388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @addr: Interface address of the P2P client 1389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ie: IEs from the (Re)association Request frame 1390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @len: Length of the ie buffer in octets 1391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Returns: 0 on success, -1 on failure 1392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int p2p_group_notif_assoc(struct p2p_group *group, const u8 *addr, 1394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const u8 *ie, size_t len); 1395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_group_assoc_resp_ie - Build P2P IE for (re)association response 1398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @group: P2P group context from p2p_group_init() 1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @status: Status value (P2P_SC_SUCCESS if association succeeded) 1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: P2P IE for (Re)association Response or %NULL on failure 1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * The caller is responsible for freeing the returned buffer with 1403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * wpabuf_free(). 1404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct wpabuf * p2p_group_assoc_resp_ie(struct p2p_group *group, u8 status); 1406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 1408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_group_notif_disassoc - Notification of P2P client disassociation from GO 1409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @group: P2P group context from p2p_group_init() 1410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @addr: Interface address of the P2P client 1411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void p2p_group_notif_disassoc(struct p2p_group *group, const u8 *addr); 1413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 1415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_group_notif_formation_done - Notification of completed group formation 1416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @group: P2P group context from p2p_group_init() 1417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void p2p_group_notif_formation_done(struct p2p_group *group); 1419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/** 14215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * p2p_group_notif_noa - Notification of NoA change 1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @group: P2P group context from p2p_group_init() 1423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @noa: Notice of Absence attribute payload, %NULL if none 1424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @noa_len: Length of noa buffer in octets 1425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure 1426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 1427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Notify the P2P group management about a new NoA contents. This will be 1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * inserted into the P2P IEs in Beacon and Probe Response frames with rest of 14295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * the group information. 1430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1431116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_group_notif_noa(struct p2p_group *group, const u8 *noa, 1432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t noa_len); 1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_group_match_dev_type - Match device types in group with requested type 14365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @group: P2P group context from p2p_group_init() 14375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @wps: WPS TLVs from Probe Request frame (concatenated WPS IEs) 14385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Returns: 1 on match, 0 on mismatch 1439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 14405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This function can be used to match the Requested Device Type attribute in 14415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * WPS IE with the device types of a group member for deciding whether a GO 14425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * should reply to a Probe Request frame. Match will be reported if the WPS IE 1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * is not requested any specific device type. 14445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 14455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int p2p_group_match_dev_type(struct p2p_group *group, struct wpabuf *wps); 1446 1447/** 1448 * p2p_group_match_dev_id - Match P2P Device Address in group with requested device id 1449 */ 1450int p2p_group_match_dev_id(struct p2p_group *group, struct wpabuf *p2p); 1451 1452/** 1453 * p2p_group_go_discover - Send GO Discoverability Request to a group client 1454 * @group: P2P group context from p2p_group_init() 1455 * Returns: 0 on success (frame scheduled); -1 if client was not found 1456 */ 1457int p2p_group_go_discover(struct p2p_group *group, const u8 *dev_id, 1458 const u8 *searching_dev, int rx_freq); 1459 1460 1461/* Generic helper functions */ 1462 1463/** 1464 * p2p_ie_text - Build text format description of P2P IE 1465 * @p2p_ie: P2P IE 1466 * @buf: Buffer for returning text 1467 * @end: Pointer to the end of the buf area 1468 * Returns: Number of octets written to the buffer or -1 on failure 1469 * 1470 * This function can be used to parse P2P IE contents into text format 1471 * field=value lines. 1472 */ 1473int p2p_ie_text(struct wpabuf *p2p_ie, char *buf, char *end); 1474 1475/** 1476 * p2p_scan_result_text - Build text format description of P2P IE 1477 * @ies: Information elements from scan results 1478 * @ies_len: ies buffer length in octets 1479 * @buf: Buffer for returning text 1480 * @end: Pointer to the end of the buf area 1481 * Returns: Number of octets written to the buffer or -1 on failure 1482 * 1483 * This function can be used to parse P2P IE contents into text format 1484 * field=value lines. 1485 */ 1486int p2p_scan_result_text(const u8 *ies, size_t ies_len, char *buf, char *end); 1487 1488/** 1489 * p2p_parse_dev_addr_in_p2p_ie - Parse P2P Device Address from a concatenated 1490 * P2P IE 1491 * @p2p_ie: P2P IE 1492 * @dev_addr: Buffer for returning P2P Device Address 1493 * Returns: 0 on success or -1 if P2P Device Address could not be parsed 1494 */ 1495int p2p_parse_dev_addr_in_p2p_ie(struct wpabuf *p2p_ie, u8 *dev_addr); 1496 1497/** 1498 * p2p_parse_dev_addr - Parse P2P Device Address from P2P IE(s) 1499 * @ies: Information elements from scan results 1500 * @ies_len: ies buffer length in octets 1501 * @dev_addr: Buffer for returning P2P Device Address 1502 * Returns: 0 on success or -1 if P2P Device Address could not be parsed 1503 */ 1504int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr); 1505 1506/** 1507 * p2p_assoc_req_ie - Build P2P IE for (Re)Association Request frame 1508 * @p2p: P2P module context from p2p_init() 1509 * @bssid: BSSID 1510 * @buf: Buffer for writing the P2P IE 1511 * @len: Maximum buf length in octets 1512 * @p2p_group: Whether this is for association with a P2P GO 1513 * @p2p_ie: Reassembled P2P IE data from scan results or %NULL if none 1514 * Returns: Number of octets written into buf or -1 on failure 1515 */ 1516int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf, 1517 size_t len, int p2p_group, struct wpabuf *p2p_ie); 1518 1519/** 1520 * p2p_scan_ie - Build P2P IE for Probe Request 1521 * @p2p: P2P module context from p2p_init() 1522 * @ies: Buffer for writing P2P IE 1523 * @dev_id: Device ID to search for or %NULL for any 1524 */ 1525void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id); 1526 1527/** 1528 * p2p_scan_ie_buf_len - Get maximum buffer length needed for p2p_scan_ie 1529 * @p2p: P2P module context from p2p_init() 1530 * Returns: Number of octets that p2p_scan_ie() may add to the buffer 1531 */ 1532size_t p2p_scan_ie_buf_len(struct p2p_data *p2p); 1533 1534/** 1535 * p2p_go_params - Generate random P2P group parameters 1536 * @p2p: P2P module context from p2p_init() 1537 * @params: Buffer for parameters 1538 * Returns: 0 on success, -1 on failure 1539 */ 1540int p2p_go_params(struct p2p_data *p2p, struct p2p_go_neg_results *params); 1541 1542/** 1543 * p2p_get_group_capab - Get Group Capability from P2P IE data 1544 * @p2p_ie: P2P IE(s) contents 1545 * Returns: Group Capability 1546 */ 1547u8 p2p_get_group_capab(const struct wpabuf *p2p_ie); 1548 1549/** 1550 * p2p_get_cross_connect_disallowed - Does WLAN AP disallows cross connection 1551 * @p2p_ie: P2P IE(s) contents 1552 * Returns: 0 if cross connection is allow, 1 if not 1553 */ 1554int p2p_get_cross_connect_disallowed(const struct wpabuf *p2p_ie); 1555 1556/** 1557 * p2p_get_go_dev_addr - Get P2P Device Address from P2P IE data 1558 * @p2p_ie: P2P IE(s) contents 1559 * Returns: Pointer to P2P Device Address or %NULL if not included 1560 */ 1561const u8 * p2p_get_go_dev_addr(const struct wpabuf *p2p_ie); 1562 1563/** 1564 * p2p_get_peer_info - Get P2P peer information 1565 * @p2p: P2P module context from p2p_init() 1566 * @addr: P2P Device Address of the peer or %NULL to indicate the first peer 1567 * @next: Whether to select the peer entry following the one indicated by addr 1568 * Returns: Pointer to peer info or %NULL if not found 1569 */ 1570const struct p2p_peer_info * p2p_get_peer_info(struct p2p_data *p2p, 1571 const u8 *addr, int next); 1572 1573/** 1574 * p2p_get_peer_info_txt - Get internal P2P peer information in text format 1575 * @info: Pointer to P2P peer info from p2p_get_peer_info() 1576 * @buf: Buffer for returning text 1577 * @buflen: Maximum buffer length 1578 * Returns: Number of octets written to the buffer or -1 on failure 1579 * 1580 * Note: This information is internal to the P2P module and subject to change. 1581 * As such, this should not really be used by external programs for purposes 1582 * other than debugging. 1583 */ 1584int p2p_get_peer_info_txt(const struct p2p_peer_info *info, 1585 char *buf, size_t buflen); 1586 1587/** 1588 * p2p_peer_known - Check whether P2P peer is known 1589 * @p2p: P2P module context from p2p_init() 1590 * @addr: P2P Device Address of the peer 1591 * Returns: 1 if the specified device is in the P2P peer table or 0 if not 1592 */ 1593int p2p_peer_known(struct p2p_data *p2p, const u8 *addr); 1594 1595/** 1596 * p2p_set_client_discoverability - Set client discoverability capability 1597 * @p2p: P2P module context from p2p_init() 1598 * @enabled: Whether client discoverability will be enabled 1599 * 1600 * This function can be used to disable (and re-enable) client discoverability. 1601 * This capability is enabled by default and should not be disabled in normal 1602 * use cases, i.e., this is mainly for testing purposes. 1603 */ 1604void p2p_set_client_discoverability(struct p2p_data *p2p, int enabled); 1605 1606/** 1607 * p2p_set_managed_oper - Set managed P2P Device operations capability 1608 * @p2p: P2P module context from p2p_init() 1609 * @enabled: Whether managed P2P Device operations will be enabled 1610 */ 1611void p2p_set_managed_oper(struct p2p_data *p2p, int enabled); 1612 1613int p2p_set_listen_channel(struct p2p_data *p2p, u8 reg_class, u8 channel); 1614 1615int p2p_set_ssid_postfix(struct p2p_data *p2p, const u8 *postfix, size_t len); 1616 1617int p2p_get_interface_addr(struct p2p_data *p2p, const u8 *dev_addr, 1618 u8 *iface_addr); 1619int p2p_get_dev_addr(struct p2p_data *p2p, const u8 *iface_addr, 1620 u8 *dev_addr); 1621 1622void p2p_set_peer_filter(struct p2p_data *p2p, const u8 *addr); 1623 1624/** 1625 * p2p_set_cross_connect - Set cross connection capability 1626 * @p2p: P2P module context from p2p_init() 1627 * @enabled: Whether cross connection will be enabled 1628 */ 1629void p2p_set_cross_connect(struct p2p_data *p2p, int enabled); 1630 1631int p2p_get_oper_freq(struct p2p_data *p2p, const u8 *iface_addr); 1632 1633/** 1634 * p2p_set_intra_bss_dist - Set intra BSS distribution 1635 * @p2p: P2P module context from p2p_init() 1636 * @enabled: Whether intra BSS distribution will be enabled 1637 */ 1638void p2p_set_intra_bss_dist(struct p2p_data *p2p, int enabled); 1639 1640int p2p_channels_includes_freq(const struct p2p_channels *channels, 1641 unsigned int freq); 1642 1643/** 1644 * p2p_supported_freq - Check whether channel is supported for P2P 1645 * @p2p: P2P module context from p2p_init() 1646 * @freq: Channel frequency in MHz 1647 * Returns: 0 if channel not usable for P2P, 1 if usable for P2P 1648 */ 1649int p2p_supported_freq(struct p2p_data *p2p, unsigned int freq); 1650 1651void p2p_update_channel_list(struct p2p_data *p2p, struct p2p_channels *chan); 1652 1653/** 1654 * p2p_set_best_channels - Update best channel information 1655 * @p2p: P2P module context from p2p_init() 1656 * @freq_24: Frequency (MHz) of best channel in 2.4 GHz band 1657 * @freq_5: Frequency (MHz) of best channel in 5 GHz band 1658 * @freq_overall: Frequency (MHz) of best channel overall 1659 */ 1660void p2p_set_best_channels(struct p2p_data *p2p, int freq_24, int freq_5, 1661 int freq_overall); 1662 1663/** 1664 * p2p_set_own_freq_preference - Set own preference for channel 1665 * @p2p: P2P module context from p2p_init() 1666 * @freq: Frequency (MHz) of the preferred channel or 0 if no preference 1667 * 1668 * This function can be used to set a preference on the operating channel based 1669 * on frequencies used on the other virtual interfaces that share the same 1670 * radio. If non-zero, this is used to try to avoid multi-channel concurrency. 1671 */ 1672void p2p_set_own_freq_preference(struct p2p_data *p2p, int freq); 1673 1674const u8 * p2p_get_go_neg_peer(struct p2p_data *p2p); 1675 1676/** 1677 * p2p_get_group_num_members - Get number of members in group 1678 * @group: P2P group context from p2p_group_init() 1679 * Returns: Number of members in the group 1680 */ 1681unsigned int p2p_get_group_num_members(struct p2p_group *group); 1682 1683/** 1684 * p2p_iterate_group_members - Iterate group members 1685 * @group: P2P group context from p2p_group_init() 1686 * @next: iteration pointer, must be a pointer to a void * that is set to %NULL 1687 * on the first call and not modified later 1688 * Returns: A P2P Interface Address for each call and %NULL for no more members 1689 */ 1690const u8 * p2p_iterate_group_members(struct p2p_group *group, void **next); 1691 1692/** 1693 * p2p_group_get_dev_addr - Get a P2P Device Address of a client in a group 1694 * @group: P2P group context from p2p_group_init() 1695 * @addr: P2P Interface Address of the client 1696 * Returns: P2P Device Address of the client if found or %NULL if no match 1697 * found 1698 */ 1699const u8 * p2p_group_get_dev_addr(struct p2p_group *group, const u8 *addr); 1700 1701/** 1702 * p2p_group_is_client_connected - Check whether a specific client is connected 1703 * @group: P2P group context from p2p_group_init() 1704 * @addr: P2P Device Address of the client 1705 * Returns: 1 if client is connected or 0 if not 1706 */ 1707int p2p_group_is_client_connected(struct p2p_group *group, const u8 *dev_addr); 1708 1709/** 1710 * p2p_get_peer_found - Get P2P peer info structure of a found peer 1711 * @p2p: P2P module context from p2p_init() 1712 * @addr: P2P Device Address of the peer or %NULL to indicate the first peer 1713 * @next: Whether to select the peer entry following the one indicated by addr 1714 * Returns: The first P2P peer info available or %NULL if no such peer exists 1715 */ 1716const struct p2p_peer_info * 1717p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next); 1718 1719/** 1720 * p2p_remove_wps_vendor_extensions - Remove WPS vendor extensions 1721 * @p2p: P2P module context from p2p_init() 1722 */ 1723void p2p_remove_wps_vendor_extensions(struct p2p_data *p2p); 1724 1725/** 1726 * p2p_add_wps_vendor_extension - Add a WPS vendor extension 1727 * @p2p: P2P module context from p2p_init() 1728 * @vendor_ext: The vendor extensions to add 1729 * Returns: 0 on success, -1 on failure 1730 * 1731 * The wpabuf structures in the array are owned by the P2P 1732 * module after this call. 1733 */ 1734int p2p_add_wps_vendor_extension(struct p2p_data *p2p, 1735 const struct wpabuf *vendor_ext); 1736 1737/** 1738 * p2p_set_oper_channel - Set the P2P operating channel 1739 * @p2p: P2P module context from p2p_init() 1740 * @op_reg_class: Operating regulatory class to set 1741 * @op_channel: operating channel to set 1742 * @cfg_op_channel : Whether op_channel is hardcoded in configuration 1743 * Returns: 0 on success, -1 on failure 1744 */ 1745int p2p_set_oper_channel(struct p2p_data *p2p, u8 op_reg_class, u8 op_channel, 1746 int cfg_op_channel); 1747 1748/** 1749 * p2p_set_pref_chan - Set P2P preferred channel list 1750 * @p2p: P2P module context from p2p_init() 1751 * @num_pref_chan: Number of entries in pref_chan list 1752 * @pref_chan: Preferred channels or %NULL to remove preferences 1753 * Returns: 0 on success, -1 on failure 1754 */ 1755int p2p_set_pref_chan(struct p2p_data *p2p, unsigned int num_pref_chan, 1756 const struct p2p_channel *pref_chan); 1757 1758/** 1759 * p2p_in_progress - Check whether a P2P operation is progress 1760 * @p2p: P2P module context from p2p_init() 1761 * Returns: 0 if P2P module is idle or 1 if an operation is in progress 1762 */ 1763int p2p_in_progress(struct p2p_data *p2p); 1764 1765#ifdef ANDROID_P2P 1766/** 1767 * p2p_search_in_progress - Check whether a P2P SEARCH is in progress 1768 * @p2p: P2P module context from p2p_init() 1769 * Returns: 0 if P2P module is idle or 1 if an operation is in progress 1770 */ 1771int p2p_search_in_progress(struct p2p_data *p2p); 1772 1773/** 1774 * p2p_search_pending - Check whether there is a deferred P2P SEARCH 1775 * @p2p: P2P module context from p2p_init() 1776 * Returns: 0 if there is no deferred P2P search or 1 if there is one 1777 */ 1778int p2p_search_pending(struct p2p_data *p2p); 1779#endif 1780 1781/** 1782 * p2p_other_scan_completed - Notify completion of non-P2P scan 1783 * @p2p: P2P module context from p2p_init() 1784 * Returns: 0 if P2P module is idle or 1 if an operation was started 1785 */ 1786int p2p_other_scan_completed(struct p2p_data *p2p); 1787 1788const char * p2p_wps_method_text(enum p2p_wps_method method); 1789 1790/** 1791 * p2p_set_config_timeout - Set local config timeouts 1792 * @p2p: P2P module context from p2p_init() 1793 * @go_timeout: Time in 10 ms units it takes to start the GO mode 1794 * @client_timeout: Time in 10 ms units it takes to start the client mode 1795 */ 1796void p2p_set_config_timeout(struct p2p_data *p2p, u8 go_timeout, 1797 u8 client_timeout); 1798 1799void p2p_increase_search_delay(struct p2p_data *p2p, unsigned int delay); 1800 1801int p2p_set_wfd_ie_beacon(struct p2p_data *p2p, struct wpabuf *ie); 1802int p2p_set_wfd_ie_probe_req(struct p2p_data *p2p, struct wpabuf *ie); 1803int p2p_set_wfd_ie_probe_resp(struct p2p_data *p2p, struct wpabuf *ie); 1804int p2p_set_wfd_ie_assoc_req(struct p2p_data *p2p, struct wpabuf *ie); 1805int p2p_set_wfd_ie_invitation(struct p2p_data *p2p, struct wpabuf *ie); 1806int p2p_set_wfd_ie_prov_disc_req(struct p2p_data *p2p, struct wpabuf *ie); 1807int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie); 1808int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie); 1809int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem); 1810int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem); 1811int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p, 1812 const struct wpabuf *elem); 1813struct wpabuf * wifi_display_encaps(struct wpabuf *subelems); 1814 1815/** 1816 * p2p_set_disc_int - Set min/max discoverable interval for p2p_find 1817 * @p2p: P2P module context from p2p_init() 1818 * @min_disc_int: minDiscoverableInterval (in units of 100 TU); default 1 1819 * @max_disc_int: maxDiscoverableInterval (in units of 100 TU); default 3 1820 * @max_disc_tu: Maximum number of TUs (1.024 ms) for discoverable interval; or 1821 * -1 not to limit 1822 * Returns: 0 on success, or -1 on failure 1823 * 1824 * This function can be used to configure minDiscoverableInterval and 1825 * maxDiscoverableInterval parameters for the Listen state during device 1826 * discovery (p2p_find). A random number of 100 TU units is picked for each 1827 * Listen state iteration from [min_disc_int,max_disc_int] range. 1828 * 1829 * max_disc_tu can be used to futher limit the discoverable duration. However, 1830 * it should be noted that use of this parameter is not recommended since it 1831 * would not be compliant with the P2P specification. 1832 */ 1833int p2p_set_disc_int(struct p2p_data *p2p, int min_disc_int, int max_disc_int, 1834 int max_disc_tu); 1835 1836#endif /* P2P_H */ 1837