/*
 * wpa_supplicant - IBSS RSN
 * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
 *
 * This software may be distributed under the terms of the BSD license.
 * See README for more details.
 */

#ifndef IBSS_RSN_H
#define IBSS_RSN_H

struct ibss_rsn;

/* not authenticated */
#define IBSS_RSN_AUTH_NOT_AUTHENTICATED	0x00
/* remote peer sent an EAPOL message */
#define IBSS_RSN_AUTH_EAPOL_BY_PEER	0x01
/* we sent an AUTH message with seq 1 */
#define IBSS_RSN_AUTH_BY_US		0x02
/* we sent an EAPOL message */
#define IBSS_RSN_AUTH_EAPOL_BY_US	0x04
/* PTK derived as supplicant */
#define IBSS_RSN_SET_PTK_SUPP		0x08
/* PTK derived as authenticator */
#define IBSS_RSN_SET_PTK_AUTH		0x10
/* PTK completion reported */
#define IBSS_RSN_REPORTED_PTK		0x20

struct ibss_rsn_peer {
	struct ibss_rsn_peer *next;
	struct ibss_rsn *ibss_rsn;

	u8 addr[ETH_ALEN];

	struct wpa_sm *supp;
	enum wpa_states supp_state;
	u8 supp_ie[80];
	size_t supp_ie_len;

	struct wpa_state_machine *auth;
	int authentication_status;

	struct os_time own_auth_tx;
};

struct ibss_rsn {
	struct wpa_supplicant *wpa_s;
	struct wpa_authenticator *auth_group;
	struct ibss_rsn_peer *peers;
	u8 psk[PMK_LEN];
};


struct ibss_rsn * ibss_rsn_init(struct wpa_supplicant *wpa_s);
void ibss_rsn_deinit(struct ibss_rsn *ibss_rsn);
int ibss_rsn_start(struct ibss_rsn *ibss_rsn, const u8 *addr);
void ibss_rsn_stop(struct ibss_rsn *ibss_rsn, const u8 *peermac);
int ibss_rsn_rx_eapol(struct ibss_rsn *ibss_rsn, const u8 *src_addr,
		      const u8 *buf, size_t len);
void ibss_rsn_set_psk(struct ibss_rsn *ibss_rsn, const u8 *psk);
void ibss_rsn_handle_auth(struct ibss_rsn *ibss_rsn, const u8 *auth_frame,
			  size_t len);

#endif /* IBSS_RSN_H */
