]>
Commit | Line | Data |
---|---|---|
a149fcc7 JM |
1 | /* |
2 | * wlantest - IEEE 802.11 protocol monitoring and testing tool | |
3 | * Copyright (c) 2010, Jouni Malinen <j@w1.fi> | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify | |
6 | * it under the terms of the GNU General Public License version 2 as | |
7 | * published by the Free Software Foundation. | |
8 | * | |
9 | * Alternatively, this software may be distributed under the terms of BSD | |
10 | * license. | |
11 | * | |
12 | * See README and COPYING for more details. | |
13 | */ | |
14 | ||
15 | #ifndef WLANTEST_H | |
16 | #define WLANTEST_H | |
17 | ||
d84d3893 | 18 | #include "utils/list.h" |
53650bca | 19 | #include "common/wpa_common.h" |
d84d3893 | 20 | |
b50111fb | 21 | struct ieee802_11_elems; |
d06df64d | 22 | struct radius_msg; |
d318c534 | 23 | struct ieee80211_hdr; |
b50111fb | 24 | |
d06df64d JM |
25 | #define MAX_RADIUS_SECRET_LEN 128 |
26 | ||
27 | struct wlantest_radius_secret { | |
28 | struct dl_list list; | |
29 | char secret[MAX_RADIUS_SECRET_LEN]; | |
30 | }; | |
d84d3893 | 31 | |
53650bca JM |
32 | struct wlantest_passphrase { |
33 | struct dl_list list; | |
34 | char passphrase[64]; | |
35 | u8 ssid[32]; | |
36 | size_t ssid_len; | |
37 | u8 bssid[ETH_ALEN]; | |
38 | }; | |
39 | ||
40 | struct wlantest_pmk { | |
41 | struct dl_list list; | |
42 | u8 pmk[32]; | |
43 | }; | |
44 | ||
422ef7d2 JM |
45 | struct wlantest_sta { |
46 | struct dl_list list; | |
47 | u8 addr[ETH_ALEN]; | |
d30edf54 JM |
48 | enum { |
49 | STATE1 /* not authenticated */, | |
50 | STATE2 /* authenticated */, | |
51 | STATE3 /* associated */ | |
52 | } state; | |
53 | u16 aid; | |
021a6fe4 | 54 | u8 rsnie[257]; /* WPA/RSN IE */ |
53650bca JM |
55 | u8 anonce[32]; /* ANonce from the previous EAPOL-Key msg 1/4 or 3/4 */ |
56 | u8 snonce[32]; /* SNonce from the previous EAPOL-Key msg 2/4 */ | |
57 | struct wpa_ptk ptk; /* Derived PTK */ | |
58 | int ptk_set; | |
47fe6880 JM |
59 | u8 rsc_tods[16 + 1][6]; |
60 | u8 rsc_fromds[16 + 1][6]; | |
0819b65b JM |
61 | u8 ap_sa_query_tr[2]; |
62 | u8 sta_sa_query_tr[2]; | |
422ef7d2 JM |
63 | }; |
64 | ||
d84d3893 JM |
65 | struct wlantest_bss { |
66 | struct dl_list list; | |
67 | u8 bssid[ETH_ALEN]; | |
68 | u16 capab_info; | |
69 | u8 ssid[32]; | |
70 | size_t ssid_len; | |
71 | int proberesp_seen; | |
72 | int parse_error_reported; | |
73 | u8 wpaie[257]; | |
74 | u8 rsnie[257]; | |
422ef7d2 | 75 | struct dl_list sta; /* struct wlantest_sta */ |
53650bca | 76 | struct dl_list pmk; /* struct wlantest_pmk */ |
4d9f9ee7 JM |
77 | u8 gtk[4][32]; |
78 | size_t gtk_len[4]; | |
2edd5c23 | 79 | u8 rsc[4][6]; |
4d9f9ee7 JM |
80 | u8 igtk[6][16]; |
81 | int igtk_set[6]; | |
bacc3128 | 82 | u8 ipn[6][6]; |
d84d3893 JM |
83 | }; |
84 | ||
d06df64d JM |
85 | struct wlantest_radius { |
86 | struct dl_list list; | |
87 | u32 srv; | |
88 | u32 cli; | |
89 | struct radius_msg *last_req; | |
90 | }; | |
91 | ||
a149fcc7 JM |
92 | struct wlantest { |
93 | int monitor_sock; | |
3215df77 | 94 | int monitor_wired; |
a149fcc7 | 95 | |
53650bca | 96 | struct dl_list passphrase; /* struct wlantest_passphrase */ |
d84d3893 | 97 | struct dl_list bss; /* struct wlantest_bss */ |
d06df64d JM |
98 | struct dl_list secret; /* struct wlantest_radius_secret */ |
99 | struct dl_list radius; /* struct wlantest_radius */ | |
100 | struct dl_list pmk; /* struct wlantest_pmk */ | |
d84d3893 | 101 | |
a149fcc7 JM |
102 | unsigned int rx_mgmt; |
103 | unsigned int rx_ctrl; | |
104 | unsigned int rx_data; | |
105 | unsigned int fcs_error; | |
106 | }; | |
107 | ||
108 | int read_cap_file(struct wlantest *wt, const char *fname); | |
3215df77 | 109 | int read_wired_cap_file(struct wlantest *wt, const char *fname); |
a149fcc7 | 110 | void wlantest_process(struct wlantest *wt, const u8 *data, size_t len); |
3215df77 | 111 | void wlantest_process_wired(struct wlantest *wt, const u8 *data, size_t len); |
a149fcc7 JM |
112 | u32 crc32(const u8 *frame, size_t frame_len); |
113 | int monitor_init(struct wlantest *wt, const char *ifname); | |
3215df77 | 114 | int monitor_init_wired(struct wlantest *wt, const char *ifname); |
a149fcc7 | 115 | void monitor_deinit(struct wlantest *wt); |
2d73f0a8 JM |
116 | void rx_mgmt(struct wlantest *wt, const u8 *data, size_t len); |
117 | void rx_data(struct wlantest *wt, const u8 *data, size_t len); | |
a149fcc7 | 118 | |
d84d3893 JM |
119 | struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid); |
120 | void bss_deinit(struct wlantest_bss *bss); | |
53650bca JM |
121 | void bss_update(struct wlantest *wt, struct wlantest_bss *bss, |
122 | struct ieee802_11_elems *elems); | |
d06df64d | 123 | void pmk_deinit(struct wlantest_pmk *pmk); |
d84d3893 | 124 | |
422ef7d2 JM |
125 | struct wlantest_sta * sta_get(struct wlantest_bss *bss, const u8 *addr); |
126 | void sta_deinit(struct wlantest_sta *sta); | |
021a6fe4 JM |
127 | void sta_update_assoc(struct wlantest_sta *sta, |
128 | struct ieee802_11_elems *elems); | |
422ef7d2 | 129 | |
d318c534 JM |
130 | u8 * ccmp_decrypt(const u8 *tk, const struct ieee80211_hdr *hdr, |
131 | const u8 *data, size_t data_len, size_t *decrypted_len); | |
2edd5c23 | 132 | void ccmp_get_pn(u8 *pn, const u8 *data); |
d318c534 | 133 | |
a149fcc7 | 134 | #endif /* WLANTEST_H */ |