104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt/*
204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * RADIUS Dynamic Authorization Server (DAS)
304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * Copyright (c) 2012, Jouni Malinen <j@w1.fi>
404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt *
504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * This software may be distributed under the terms of the BSD license.
604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * See README for more details.
704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt */
804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#ifndef RADIUS_DAS_H
1004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#define RADIUS_DAS_H
1104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
1204949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct radius_das_data;
1304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
1404949598a23f501be6eec21697465fd46a28840aDmitry Shmidtenum radius_das_res {
1504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	RADIUS_DAS_SUCCESS,
1604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	RADIUS_DAS_NAS_MISMATCH,
17432d603c922e970f55866c63212d29c997438977Dmitry Shmidt	RADIUS_DAS_SESSION_NOT_FOUND,
18432d603c922e970f55866c63212d29c997438977Dmitry Shmidt	RADIUS_DAS_MULTI_SESSION_MATCH,
1904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt};
2004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
2104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct radius_das_attrs {
2213ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt	/* NAS identification attributes */
2313ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt	const u8 *nas_ip_addr;
2413ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt	const u8 *nas_identifier;
2513ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt	size_t nas_identifier_len;
2613ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt	const u8 *nas_ipv6_addr;
2713ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt
2813ca8d8ea51a1aa5e24c6c956473a11b0c7daed4Dmitry Shmidt	/* Session identification attributes */
2904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	const u8 *sta_addr;
3004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	const u8 *user_name;
3104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	size_t user_name_len;
3204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	const u8 *acct_session_id;
3304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	size_t acct_session_id_len;
34432d603c922e970f55866c63212d29c997438977Dmitry Shmidt	const u8 *acct_multi_session_id;
35432d603c922e970f55866c63212d29c997438977Dmitry Shmidt	size_t acct_multi_session_id_len;
3604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	const u8 *cui;
3704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	size_t cui_len;
3804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt};
3904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
4004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct radius_das_conf {
4104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	int port;
4204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	const u8 *shared_secret;
4304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	size_t shared_secret_len;
4404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	const struct hostapd_ip_addr *client_addr;
4504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	unsigned int time_window;
4604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	int require_event_timestamp;
4704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	void *ctx;
4804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	enum radius_das_res (*disconnect)(void *ctx,
4904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt					  struct radius_das_attrs *attr);
5004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt};
5104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
5204949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct radius_das_data *
5304949598a23f501be6eec21697465fd46a28840aDmitry Shmidtradius_das_init(struct radius_das_conf *conf);
5404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
5504949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid radius_das_deinit(struct radius_das_data *data);
5604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
5704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif /* RADIUS_DAS_H */
58