]> git.ipfire.org Git - thirdparty/hostap.git/blame - wlantest/wlantest.h
wlantest: Add Group Key handshake processing
[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;
b50111fb 24
d06df64d
JM
25#define MAX_RADIUS_SECRET_LEN 128
26
27struct wlantest_radius_secret {
28 struct dl_list list;
29 char secret[MAX_RADIUS_SECRET_LEN];
30};
d84d3893 31
53650bca
JM
32struct 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
40struct wlantest_pmk {
41 struct dl_list list;
42 u8 pmk[32];
43};
44
422ef7d2
JM
45struct 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
65struct 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
85struct wlantest_radius {
86 struct dl_list list;
87 u32 srv;
88 u32 cli;
89 struct radius_msg *last_req;
90};
91
a149fcc7
JM
92struct 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
108int read_cap_file(struct wlantest *wt, const char *fname);
3215df77 109int read_wired_cap_file(struct wlantest *wt, const char *fname);
a149fcc7 110void wlantest_process(struct wlantest *wt, const u8 *data, size_t len);
3215df77 111void wlantest_process_wired(struct wlantest *wt, const u8 *data, size_t len);
a149fcc7
JM
112u32 crc32(const u8 *frame, size_t frame_len);
113int monitor_init(struct wlantest *wt, const char *ifname);
3215df77 114int monitor_init_wired(struct wlantest *wt, const char *ifname);
a149fcc7 115void monitor_deinit(struct wlantest *wt);
2d73f0a8
JM
116void rx_mgmt(struct wlantest *wt, const u8 *data, size_t len);
117void rx_data(struct wlantest *wt, const u8 *data, size_t len);
a149fcc7 118
d84d3893
JM
119struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid);
120void bss_deinit(struct wlantest_bss *bss);
53650bca
JM
121void bss_update(struct wlantest *wt, struct wlantest_bss *bss,
122 struct ieee802_11_elems *elems);
d06df64d 123void pmk_deinit(struct wlantest_pmk *pmk);
d84d3893 124
422ef7d2
JM
125struct wlantest_sta * sta_get(struct wlantest_bss *bss, const u8 *addr);
126void sta_deinit(struct wlantest_sta *sta);
021a6fe4
JM
127void sta_update_assoc(struct wlantest_sta *sta,
128 struct ieee802_11_elems *elems);
422ef7d2 129
d318c534
JM
130u8 * ccmp_decrypt(const u8 *tk, const struct ieee80211_hdr *hdr,
131 const u8 *data, size_t data_len, size_t *decrypted_len);
2edd5c23 132void ccmp_get_pn(u8 *pn, const u8 *data);
d318c534 133
a149fcc7 134#endif /* WLANTEST_H */