]>
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; |
327f7160 | 24 | struct wlantest_bss; |
b50111fb | 25 | |
d06df64d JM |
26 | #define MAX_RADIUS_SECRET_LEN 128 |
27 | ||
28 | struct wlantest_radius_secret { | |
29 | struct dl_list list; | |
30 | char secret[MAX_RADIUS_SECRET_LEN]; | |
31 | }; | |
d84d3893 | 32 | |
53650bca JM |
33 | struct wlantest_passphrase { |
34 | struct dl_list list; | |
35 | char passphrase[64]; | |
36 | u8 ssid[32]; | |
37 | size_t ssid_len; | |
38 | u8 bssid[ETH_ALEN]; | |
39 | }; | |
40 | ||
41 | struct wlantest_pmk { | |
42 | struct dl_list list; | |
43 | u8 pmk[32]; | |
44 | }; | |
45 | ||
422ef7d2 JM |
46 | struct wlantest_sta { |
47 | struct dl_list list; | |
327f7160 | 48 | struct wlantest_bss *bss; |
422ef7d2 | 49 | u8 addr[ETH_ALEN]; |
d30edf54 JM |
50 | enum { |
51 | STATE1 /* not authenticated */, | |
52 | STATE2 /* authenticated */, | |
53 | STATE3 /* associated */ | |
54 | } state; | |
55 | u16 aid; | |
021a6fe4 | 56 | u8 rsnie[257]; /* WPA/RSN IE */ |
327f7160 JM |
57 | int proto; |
58 | int pairwise_cipher; | |
59 | int group_cipher; | |
60 | int key_mgmt; | |
61 | int rsn_capab; | |
53650bca JM |
62 | u8 anonce[32]; /* ANonce from the previous EAPOL-Key msg 1/4 or 3/4 */ |
63 | u8 snonce[32]; /* SNonce from the previous EAPOL-Key msg 2/4 */ | |
64 | struct wpa_ptk ptk; /* Derived PTK */ | |
65 | int ptk_set; | |
47fe6880 JM |
66 | u8 rsc_tods[16 + 1][6]; |
67 | u8 rsc_fromds[16 + 1][6]; | |
0819b65b JM |
68 | u8 ap_sa_query_tr[2]; |
69 | u8 sta_sa_query_tr[2]; | |
422ef7d2 JM |
70 | }; |
71 | ||
d84d3893 JM |
72 | struct wlantest_bss { |
73 | struct dl_list list; | |
74 | u8 bssid[ETH_ALEN]; | |
75 | u16 capab_info; | |
76 | u8 ssid[32]; | |
77 | size_t ssid_len; | |
78 | int proberesp_seen; | |
79 | int parse_error_reported; | |
80 | u8 wpaie[257]; | |
81 | u8 rsnie[257]; | |
327f7160 JM |
82 | int proto; |
83 | int pairwise_cipher; | |
84 | int group_cipher; | |
85 | int mgmt_group_cipher; | |
86 | int key_mgmt; | |
87 | int rsn_capab; | |
422ef7d2 | 88 | struct dl_list sta; /* struct wlantest_sta */ |
53650bca | 89 | struct dl_list pmk; /* struct wlantest_pmk */ |
4d9f9ee7 JM |
90 | u8 gtk[4][32]; |
91 | size_t gtk_len[4]; | |
2edd5c23 | 92 | u8 rsc[4][6]; |
4d9f9ee7 JM |
93 | u8 igtk[6][16]; |
94 | int igtk_set[6]; | |
bacc3128 | 95 | u8 ipn[6][6]; |
d84d3893 JM |
96 | }; |
97 | ||
d06df64d JM |
98 | struct wlantest_radius { |
99 | struct dl_list list; | |
100 | u32 srv; | |
101 | u32 cli; | |
102 | struct radius_msg *last_req; | |
103 | }; | |
104 | ||
a149fcc7 JM |
105 | struct wlantest { |
106 | int monitor_sock; | |
3215df77 | 107 | int monitor_wired; |
a149fcc7 | 108 | |
53650bca | 109 | struct dl_list passphrase; /* struct wlantest_passphrase */ |
d84d3893 | 110 | struct dl_list bss; /* struct wlantest_bss */ |
d06df64d JM |
111 | struct dl_list secret; /* struct wlantest_radius_secret */ |
112 | struct dl_list radius; /* struct wlantest_radius */ | |
113 | struct dl_list pmk; /* struct wlantest_pmk */ | |
d84d3893 | 114 | |
a149fcc7 JM |
115 | unsigned int rx_mgmt; |
116 | unsigned int rx_ctrl; | |
117 | unsigned int rx_data; | |
118 | unsigned int fcs_error; | |
64f45d07 JM |
119 | |
120 | void *write_pcap; /* pcap_t* */ | |
121 | void *write_pcap_dumper; /* pcpa_dumper_t */ | |
122 | struct timeval write_pcap_time; | |
a149fcc7 JM |
123 | }; |
124 | ||
125 | int read_cap_file(struct wlantest *wt, const char *fname); | |
3215df77 | 126 | int read_wired_cap_file(struct wlantest *wt, const char *fname); |
64f45d07 JM |
127 | int write_pcap_init(struct wlantest *wt, const char *fname); |
128 | void write_pcap_deinit(struct wlantest *wt); | |
129 | void write_pcap_captured(struct wlantest *wt, const u8 *buf, size_t len); | |
130 | void write_pcap_decrypted(struct wlantest *wt, const u8 *buf1, size_t len1, | |
131 | const u8 *buf2, size_t len2); | |
a149fcc7 | 132 | void wlantest_process(struct wlantest *wt, const u8 *data, size_t len); |
3215df77 | 133 | void wlantest_process_wired(struct wlantest *wt, const u8 *data, size_t len); |
a149fcc7 JM |
134 | u32 crc32(const u8 *frame, size_t frame_len); |
135 | int monitor_init(struct wlantest *wt, const char *ifname); | |
3215df77 | 136 | int monitor_init_wired(struct wlantest *wt, const char *ifname); |
a149fcc7 | 137 | void monitor_deinit(struct wlantest *wt); |
2d73f0a8 JM |
138 | void rx_mgmt(struct wlantest *wt, const u8 *data, size_t len); |
139 | void rx_data(struct wlantest *wt, const u8 *data, size_t len); | |
a149fcc7 | 140 | |
d84d3893 JM |
141 | struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid); |
142 | void bss_deinit(struct wlantest_bss *bss); | |
53650bca JM |
143 | void bss_update(struct wlantest *wt, struct wlantest_bss *bss, |
144 | struct ieee802_11_elems *elems); | |
d06df64d | 145 | void pmk_deinit(struct wlantest_pmk *pmk); |
d84d3893 | 146 | |
422ef7d2 JM |
147 | struct wlantest_sta * sta_get(struct wlantest_bss *bss, const u8 *addr); |
148 | void sta_deinit(struct wlantest_sta *sta); | |
021a6fe4 JM |
149 | void sta_update_assoc(struct wlantest_sta *sta, |
150 | struct ieee802_11_elems *elems); | |
422ef7d2 | 151 | |
d318c534 JM |
152 | u8 * ccmp_decrypt(const u8 *tk, const struct ieee80211_hdr *hdr, |
153 | const u8 *data, size_t data_len, size_t *decrypted_len); | |
2edd5c23 | 154 | void ccmp_get_pn(u8 *pn, const u8 *data); |
d318c534 | 155 | |
2924b0eb JM |
156 | u8 * tkip_decrypt(const u8 *tk, const struct ieee80211_hdr *hdr, |
157 | const u8 *data, size_t data_len, size_t *decrypted_len); | |
158 | ||
a149fcc7 | 159 | #endif /* WLANTEST_H */ |