1/*
2 * wpa_supplicant - IBSS RSN
3 * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9#ifndef IBSS_RSN_H
10#define IBSS_RSN_H
11
12struct ibss_rsn;
13
14/* not authenticated */
15#define IBSS_RSN_AUTH_NOT_AUTHENTICATED	0x00
16/* remote peer sent an EAPOL message */
17#define IBSS_RSN_AUTH_EAPOL_BY_PEER	0x01
18/* we sent an AUTH message with seq 1 */
19#define IBSS_RSN_AUTH_BY_US		0x02
20/* we sent an EAPOL message */
21#define IBSS_RSN_AUTH_EAPOL_BY_US	0x04
22/* PTK derived as supplicant */
23#define IBSS_RSN_SET_PTK_SUPP		0x08
24/* PTK derived as authenticator */
25#define IBSS_RSN_SET_PTK_AUTH		0x10
26/* PTK completion reported */
27#define IBSS_RSN_REPORTED_PTK		0x20
28
29struct ibss_rsn_peer {
30	struct ibss_rsn_peer *next;
31	struct ibss_rsn *ibss_rsn;
32
33	u8 addr[ETH_ALEN];
34
35	struct wpa_sm *supp;
36	enum wpa_states supp_state;
37	u8 supp_ie[80];
38	size_t supp_ie_len;
39
40	struct wpa_state_machine *auth;
41	int authentication_status;
42
43	struct os_reltime own_auth_tx;
44};
45
46struct ibss_rsn {
47	struct wpa_supplicant *wpa_s;
48	struct wpa_authenticator *auth_group;
49	struct ibss_rsn_peer *peers;
50	u8 psk[PMK_LEN];
51};
52
53
54struct ibss_rsn * ibss_rsn_init(struct wpa_supplicant *wpa_s);
55void ibss_rsn_deinit(struct ibss_rsn *ibss_rsn);
56int ibss_rsn_start(struct ibss_rsn *ibss_rsn, const u8 *addr);
57void ibss_rsn_stop(struct ibss_rsn *ibss_rsn, const u8 *peermac);
58int ibss_rsn_rx_eapol(struct ibss_rsn *ibss_rsn, const u8 *src_addr,
59		      const u8 *buf, size_t len);
60void ibss_rsn_set_psk(struct ibss_rsn *ibss_rsn, const u8 *psk);
61void ibss_rsn_handle_auth(struct ibss_rsn *ibss_rsn, const u8 *auth_frame,
62			  size_t len);
63
64#endif /* IBSS_RSN_H */
65