18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant - IBSS RSN
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef IBSS_RSN_H
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define IBSS_RSN_H
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ibss_rsn;
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
14c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt/* not authenticated */
15c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt#define IBSS_RSN_AUTH_NOT_AUTHENTICATED	0x00
16c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt/* remote peer sent an EAPOL message */
17c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt#define IBSS_RSN_AUTH_EAPOL_BY_PEER	0x01
18c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt/* we sent an AUTH message with seq 1 */
19c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt#define IBSS_RSN_AUTH_BY_US		0x02
20c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt/* we sent an EAPOL message */
21c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt#define IBSS_RSN_AUTH_EAPOL_BY_US	0x04
22b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt/* PTK derived as supplicant */
23b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#define IBSS_RSN_SET_PTK_SUPP		0x08
24b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt/* PTK derived as authenticator */
25b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#define IBSS_RSN_SET_PTK_AUTH		0x10
26b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt/* PTK completion reported */
27b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#define IBSS_RSN_REPORTED_PTK		0x20
28c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ibss_rsn_peer {
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct ibss_rsn_peer *next;
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct ibss_rsn *ibss_rsn;
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 addr[ETH_ALEN];
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_sm *supp;
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	enum wpa_states supp_state;
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 supp_ie[80];
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t supp_ie_len;
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_state_machine *auth;
41c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt	int authentication_status;
4292c368d56f46a4e648b441085707c1381b5e5f63Dmitry Shmidt
43fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt	struct os_reltime own_auth_tx;
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ibss_rsn {
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_authenticator *auth_group;
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct ibss_rsn_peer *peers;
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 psk[PMK_LEN];
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ibss_rsn * ibss_rsn_init(struct wpa_supplicant *wpa_s);
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid ibss_rsn_deinit(struct ibss_rsn *ibss_rsn);
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint ibss_rsn_start(struct ibss_rsn *ibss_rsn, const u8 *addr);
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid ibss_rsn_stop(struct ibss_rsn *ibss_rsn, const u8 *peermac);
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint ibss_rsn_rx_eapol(struct ibss_rsn *ibss_rsn, const u8 *src_addr,
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      const u8 *buf, size_t len);
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid ibss_rsn_set_psk(struct ibss_rsn *ibss_rsn, const u8 *psk);
61c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidtvoid ibss_rsn_handle_auth(struct ibss_rsn *ibss_rsn, const u8 *auth_frame,
62c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt			  size_t len);
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* IBSS_RSN_H */
65