]> git.ipfire.org Git - thirdparty/hostap.git/blame - wlantest/wlantest.h
wlantest: Add support for WPA key handshakes
[thirdparty/hostap.git] / wlantest / wlantest.h
CommitLineData
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 21struct ieee802_11_elems;
d06df64d 22struct radius_msg;
d318c534 23struct ieee80211_hdr;
327f7160 24struct wlantest_bss;
b50111fb 25
d06df64d
JM
26#define MAX_RADIUS_SECRET_LEN 128
27
28struct wlantest_radius_secret {
29 struct dl_list list;
30 char secret[MAX_RADIUS_SECRET_LEN];
31};
d84d3893 32
53650bca
JM
33struct 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
41struct wlantest_pmk {
42 struct dl_list list;
43 u8 pmk[32];
44};
45
422ef7d2
JM
46struct 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
72struct 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
98struct wlantest_radius {
99 struct dl_list list;
100 u32 srv;
101 u32 cli;
102 struct radius_msg *last_req;
103};
104
a149fcc7
JM
105struct 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
125int read_cap_file(struct wlantest *wt, const char *fname);
3215df77 126int read_wired_cap_file(struct wlantest *wt, const char *fname);
64f45d07
JM
127int write_pcap_init(struct wlantest *wt, const char *fname);
128void write_pcap_deinit(struct wlantest *wt);
129void write_pcap_captured(struct wlantest *wt, const u8 *buf, size_t len);
130void write_pcap_decrypted(struct wlantest *wt, const u8 *buf1, size_t len1,
131 const u8 *buf2, size_t len2);
a149fcc7 132void wlantest_process(struct wlantest *wt, const u8 *data, size_t len);
3215df77 133void wlantest_process_wired(struct wlantest *wt, const u8 *data, size_t len);
a149fcc7
JM
134u32 crc32(const u8 *frame, size_t frame_len);
135int monitor_init(struct wlantest *wt, const char *ifname);
3215df77 136int monitor_init_wired(struct wlantest *wt, const char *ifname);
a149fcc7 137void monitor_deinit(struct wlantest *wt);
2d73f0a8
JM
138void rx_mgmt(struct wlantest *wt, const u8 *data, size_t len);
139void rx_data(struct wlantest *wt, const u8 *data, size_t len);
a149fcc7 140
d84d3893
JM
141struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid);
142void bss_deinit(struct wlantest_bss *bss);
53650bca
JM
143void bss_update(struct wlantest *wt, struct wlantest_bss *bss,
144 struct ieee802_11_elems *elems);
d06df64d 145void pmk_deinit(struct wlantest_pmk *pmk);
d84d3893 146
422ef7d2
JM
147struct wlantest_sta * sta_get(struct wlantest_bss *bss, const u8 *addr);
148void sta_deinit(struct wlantest_sta *sta);
021a6fe4
JM
149void sta_update_assoc(struct wlantest_sta *sta,
150 struct ieee802_11_elems *elems);
422ef7d2 151
d318c534
JM
152u8 * ccmp_decrypt(const u8 *tk, const struct ieee80211_hdr *hdr,
153 const u8 *data, size_t data_len, size_t *decrypted_len);
2edd5c23 154void ccmp_get_pn(u8 *pn, const u8 *data);
d318c534 155
2924b0eb
JM
156u8 * 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 */