1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef WPA_CLIENT_H
17 #define WPA_CLIENT_H
18 
19 #include <stdint.h>
20 #include <stdbool.h>
21 
22 #ifdef __cplusplus
23 #if __cplusplus
24 extern "C" {
25 #endif
26 #endif
27 
28 #define ETH_ADDR_LEN 6
29 #ifndef IFNAMSIZ
30 #define IFNAMSIZ 16
31 #endif
32 #define WIFI_REASON_LENGTH 32
33 #define WIFI_SSID_LENGTH 132
34 
35 #define WIFI_P2P_DEVICE_TYPE_LENGTH 64
36 #define WIFI_P2P_DEVICE_NAME_LENGTH 128
37 #define WIFI_P2P_WFD_DEVICE_INFO_LENGTH 128
38 #define WIFI_P2P_PASSWORD_SIZE 128
39 #define WIFI_P2P_GROUP_IFNAME_LENGTH 128
40 #define WIFI_PIN_CODE_LENGTH 8
41 #define WIFI_P2P_TLVS_LENGTH 256
42 #define WIFI_BSSID_LEN 6
43 #define WPA_VENDOR_DATA_LEN 256
44 #define WPA_VENDOR_SSID_LEN 32
45 #define WPA_VENDOR_PSK_LEN 64
46 
47 typedef enum {
48     WPA_EVENT_DISCONNECT = 0,
49     WPA_EVENT_CONNECT,
50     WPA_EVENT_BSSID_CHANGE,
51     WPA_EVENT_STATE_CHANGED,
52     WPA_EVENT_TEMP_DISABLE,
53     WPA_EVENT_ASSOCIATE_REJECT,
54     WPA_EVENT_WPS_OVERLAP,
55     WPA_EVENT_WPS_TIMEMOUT,
56     WPA_EVENT_RECV_SCAN_RESULT,
57     WPA_EVENT_DEVICE_FOUND,
58     WPA_EVENT_DEVICE_LOST,
59     WPA_EVENT_GO_NEGOTIATION_REQUEST,
60     WPA_EVENT_GO_NEGOTIATION_COMPLETED,
61     WPA_EVENT_INVITATION_RECEIVED,
62     WPA_EVENT_INVITATION_RESULT,
63     WPA_EVENT_GROUP_FORMATION_SUCCESS,
64     WPA_EVENT_GROUP_FORMATION_FAILURE,
65     WPA_EVENT_GROUP_START,
66     WPA_EVENT_GROUP_REMOVED,
67     WPA_EVENT_PROVISION_DISCOVERY_COMPLETED,
68     WPA_EVENT_FIND_STOPPED,
69     WPA_EVENT_SERV_DISC_REQ,
70     WPA_EVENT_SERV_DISC_RESP,
71     WPA_EVENT_STA_CONNECT_STATE,
72     WPA_EVENT_IFACE_CREATED,
73     WPA_EVENT_STA_AUTH_REJECT,
74     WPA_EVENT_STA_NOTIFY,
75     WPA_EVENT_VENDOR_EXT,
76     WPA_EVENT_AUTH_TIMEOUT,
77 } WpaCallBackEventType;
78 
79 enum WpaClientType {
80     /* 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 | 1<<10 ... | 1<<29 */
81     WIFI_WPA_TO_HAL_CLIENT = (1 << 29) - 1,
82     WIFI_WPA_CLIENT_BUTT
83 };
84 
85 struct WpaDisconnectParam {
86     unsigned char bssid[WIFI_BSSID_LEN];
87     int  reasonCode;
88     int locallyGenerated;
89 };
90 
91 struct WpaConnectParam {
92     unsigned char bssid[WIFI_BSSID_LEN];
93     int  networkId;
94 };
95 
96 struct WpaBssidChangedParam {
97     unsigned char bssid[WIFI_BSSID_LEN];
98     unsigned char reason[WIFI_REASON_LENGTH];
99 };
100 
101 struct WpaStateChangedParam {
102     int status;
103     unsigned char bssid[WIFI_BSSID_LEN];
104     int  networkId;
105     unsigned char ssid[WIFI_SSID_LENGTH];
106 };
107 
108 struct WpaTempDisabledParam {
109     int  networkId;
110     unsigned char ssid[WIFI_SSID_LENGTH];
111     int authFailures;
112     int duration;
113     unsigned char reason[WIFI_REASON_LENGTH];
114 };
115 
116 struct WpaAssociateRejectParam {
117     unsigned char bssid[WIFI_BSSID_LEN];
118     int statusCode;
119     int timeOut;
120 };
121 
122 struct WpaAuthRejectParam {
123     unsigned char bssid[WIFI_BSSID_LEN];
124     unsigned short authType;
125     unsigned short authTransaction;
126     unsigned short statusCode;
127 };
128 
129 struct WpaRecvScanResultParam {
130     unsigned int scanId;
131 };
132 
133 struct P2pDeviceInfoParam {
134     unsigned char srcAddress[ETH_ADDR_LEN];
135     unsigned char p2pDeviceAddress[ETH_ADDR_LEN];
136     unsigned char primaryDeviceType[WIFI_P2P_DEVICE_TYPE_LENGTH];
137     unsigned char deviceName[WIFI_P2P_DEVICE_NAME_LENGTH];
138     int configMethods;
139     int deviceCapabilities;
140     int groupCapabilities;
141     unsigned char wfdDeviceInfo[WIFI_P2P_WFD_DEVICE_INFO_LENGTH];
142     unsigned int wfdLength;
143     unsigned char operSsid[WIFI_P2P_DEVICE_NAME_LENGTH];
144 };
145 
146 struct P2pDeviceLostParam {
147     unsigned char p2pDeviceAddress[ETH_ADDR_LEN];
148     int  networkId;
149 };
150 
151 struct P2pGoNegotiationRequestParam {
152     unsigned char srcAddress[ETH_ADDR_LEN];
153     int passwordId;
154 };
155 
156 struct P2pGoNegotiationCompletedParam {
157     int status;
158 };
159 
160 struct P2pInvitationReceivedParam {
161     int type; /* 0:Received, 1:Accepted */
162     int persistentNetworkId;
163     int operatingFrequency;
164     unsigned char srcAddress[ETH_ADDR_LEN];
165     unsigned char goDeviceAddress[ETH_ADDR_LEN];
166     unsigned char bssid[ETH_ADDR_LEN];
167 };
168 
169 struct P2pInvitationResultParam {
170     int status;
171     unsigned char bssid[ETH_ADDR_LEN];
172 };
173 
174 struct P2pGroupStartedParam {
175     int isGo;
176     int isPersistent;
177     int frequency;
178     unsigned char groupIfName[WIFI_P2P_GROUP_IFNAME_LENGTH];
179     unsigned char ssid[WIFI_SSID_LENGTH];
180     unsigned char psk[WIFI_P2P_PASSWORD_SIZE];
181     unsigned char passphrase[WIFI_P2P_PASSWORD_SIZE];
182     unsigned char goDeviceAddress[ETH_ADDR_LEN];
183     unsigned char goRandomDeviceAddress[ETH_ADDR_LEN];
184 };
185 
186 struct P2pGroupRemovedParam {
187     int isGo;
188     unsigned char groupIfName[WIFI_P2P_GROUP_IFNAME_LENGTH];
189 };
190 
191 struct P2pProvisionDiscoveryCompletedParam {
192     int isRequest;
193     int provDiscStatusCode;
194     int configMethods;
195     unsigned char p2pDeviceAddress[ETH_ADDR_LEN];
196     unsigned char generatedPin[WIFI_PIN_CODE_LENGTH];
197 };
198 
199 struct P2pServDiscRespParam {
200     int updateIndicator;
201     unsigned char srcAddress[ETH_ADDR_LEN];
202     unsigned char tlvs[WIFI_P2P_TLVS_LENGTH];
203 };
204 
205 struct P2pStaConnectStateParam {
206     int state;
207     unsigned char srcAddress[ETH_ADDR_LEN];
208     unsigned char p2pDeviceAddress[ETH_ADDR_LEN];
209 };
210 
211 struct P2pServDiscReqInfoParam {
212     int freq;
213     int dialogToken;
214     int updateIndic;
215     unsigned char mac[ETH_ADDR_LEN];
216     unsigned char tlvs[WIFI_P2P_TLVS_LENGTH];
217 };
218 
219 struct P2pIfaceCreatedParam {
220     int isGo;
221 };
222 
223 typedef int32_t (*OnReceiveFunc)(uint32_t event, void *data, const char *ifName);
224 
225 struct WpaCallbackEvent {
226     uint32_t eventType; /* eventmap */
227     char ifName[IFNAMSIZ + 1];
228     OnReceiveFunc onRecFunc;
229 };
230 
231 struct WpaVendorExtInfo {
232     int type;
233     int freq;
234     int width;
235     int id;
236     int status;
237     int reason;
238     unsigned char ssid[WPA_VENDOR_SSID_LEN];
239     unsigned char psk[WPA_VENDOR_PSK_LEN];
240     unsigned char devAddr[ETH_ADDR_LEN];
241     unsigned char data[WPA_VENDOR_DATA_LEN];
242 };
243 
244 void WpaEventReport(const char *ifName, uint32_t event, void *data);
245 int32_t WpaRegisterEventCallback(OnReceiveFunc onRecFunc, uint32_t eventType, const char *ifName);
246 int32_t WpaUnregisterEventCallback(OnReceiveFunc onRecFunc, uint32_t eventType, const char *ifName);
247 void ReleaseEventCallback(void);
248 #endif
249