xref: /dflybsd-src/contrib/wpa_supplicant/src/radius/radius_client.h (revision 6d49e1aea1f916afb9e202b8d2ad09cfab6e48c3)
1*6d49e1aeSJan Lentfer /*
2*6d49e1aeSJan Lentfer  * hostapd / RADIUS client
3*6d49e1aeSJan Lentfer  * Copyright (c) 2002-2005, Jouni Malinen <j@w1.fi>
4*6d49e1aeSJan Lentfer  *
5*6d49e1aeSJan Lentfer  * This program is free software; you can redistribute it and/or modify
6*6d49e1aeSJan Lentfer  * it under the terms of the GNU General Public License version 2 as
7*6d49e1aeSJan Lentfer  * published by the Free Software Foundation.
8*6d49e1aeSJan Lentfer  *
9*6d49e1aeSJan Lentfer  * Alternatively, this software may be distributed under the terms of BSD
10*6d49e1aeSJan Lentfer  * license.
11*6d49e1aeSJan Lentfer  *
12*6d49e1aeSJan Lentfer  * See README and COPYING for more details.
13*6d49e1aeSJan Lentfer  */
14*6d49e1aeSJan Lentfer 
15*6d49e1aeSJan Lentfer #ifndef RADIUS_CLIENT_H
16*6d49e1aeSJan Lentfer #define RADIUS_CLIENT_H
17*6d49e1aeSJan Lentfer 
18*6d49e1aeSJan Lentfer #include "ip_addr.h"
19*6d49e1aeSJan Lentfer 
20*6d49e1aeSJan Lentfer struct radius_msg;
21*6d49e1aeSJan Lentfer 
22*6d49e1aeSJan Lentfer struct hostapd_radius_server {
23*6d49e1aeSJan Lentfer 	/* MIB prefix for shared variables:
24*6d49e1aeSJan Lentfer 	 * @ = radiusAuth or radiusAcc depending on the type of the server */
25*6d49e1aeSJan Lentfer 	struct hostapd_ip_addr addr; /* @ServerAddress */
26*6d49e1aeSJan Lentfer 	int port; /* @ClientServerPortNumber */
27*6d49e1aeSJan Lentfer 	u8 *shared_secret;
28*6d49e1aeSJan Lentfer 	size_t shared_secret_len;
29*6d49e1aeSJan Lentfer 
30*6d49e1aeSJan Lentfer 	/* Dynamic (not from configuration file) MIB data */
31*6d49e1aeSJan Lentfer 	int index; /* @ServerIndex */
32*6d49e1aeSJan Lentfer 	int round_trip_time; /* @ClientRoundTripTime; in hundredths of a
33*6d49e1aeSJan Lentfer 			      * second */
34*6d49e1aeSJan Lentfer 	u32 requests; /* @Client{Access,}Requests */
35*6d49e1aeSJan Lentfer 	u32 retransmissions; /* @Client{Access,}Retransmissions */
36*6d49e1aeSJan Lentfer 	u32 access_accepts; /* radiusAuthClientAccessAccepts */
37*6d49e1aeSJan Lentfer 	u32 access_rejects; /* radiusAuthClientAccessRejects */
38*6d49e1aeSJan Lentfer 	u32 access_challenges; /* radiusAuthClientAccessChallenges */
39*6d49e1aeSJan Lentfer 	u32 responses; /* radiusAccClientResponses */
40*6d49e1aeSJan Lentfer 	u32 malformed_responses; /* @ClientMalformed{Access,}Responses */
41*6d49e1aeSJan Lentfer 	u32 bad_authenticators; /* @ClientBadAuthenticators */
42*6d49e1aeSJan Lentfer 	u32 timeouts; /* @ClientTimeouts */
43*6d49e1aeSJan Lentfer 	u32 unknown_types; /* @ClientUnknownTypes */
44*6d49e1aeSJan Lentfer 	u32 packets_dropped; /* @ClientPacketsDropped */
45*6d49e1aeSJan Lentfer 	/* @ClientPendingRequests: length of hapd->radius->msgs for matching
46*6d49e1aeSJan Lentfer 	 * msg_type */
47*6d49e1aeSJan Lentfer };
48*6d49e1aeSJan Lentfer 
49*6d49e1aeSJan Lentfer struct hostapd_radius_servers {
50*6d49e1aeSJan Lentfer 	/* RADIUS Authentication and Accounting servers in priority order */
51*6d49e1aeSJan Lentfer 	struct hostapd_radius_server *auth_servers, *auth_server;
52*6d49e1aeSJan Lentfer 	int num_auth_servers;
53*6d49e1aeSJan Lentfer 	struct hostapd_radius_server *acct_servers, *acct_server;
54*6d49e1aeSJan Lentfer 	int num_acct_servers;
55*6d49e1aeSJan Lentfer 
56*6d49e1aeSJan Lentfer 	int retry_primary_interval;
57*6d49e1aeSJan Lentfer 	int acct_interim_interval;
58*6d49e1aeSJan Lentfer 
59*6d49e1aeSJan Lentfer 	int msg_dumps;
60*6d49e1aeSJan Lentfer 
61*6d49e1aeSJan Lentfer 	struct hostapd_ip_addr client_addr;
62*6d49e1aeSJan Lentfer 	int force_client_addr;
63*6d49e1aeSJan Lentfer };
64*6d49e1aeSJan Lentfer 
65*6d49e1aeSJan Lentfer 
66*6d49e1aeSJan Lentfer typedef enum {
67*6d49e1aeSJan Lentfer 	RADIUS_AUTH,
68*6d49e1aeSJan Lentfer 	RADIUS_ACCT,
69*6d49e1aeSJan Lentfer 	RADIUS_ACCT_INTERIM /* used only with radius_client_send(); just like
70*6d49e1aeSJan Lentfer 			     * RADIUS_ACCT, but removes any pending interim
71*6d49e1aeSJan Lentfer 			     * RADIUS Accounting packages for the same STA
72*6d49e1aeSJan Lentfer 			     * before sending the new interim update */
73*6d49e1aeSJan Lentfer } RadiusType;
74*6d49e1aeSJan Lentfer 
75*6d49e1aeSJan Lentfer typedef enum {
76*6d49e1aeSJan Lentfer 	RADIUS_RX_PROCESSED,
77*6d49e1aeSJan Lentfer 	RADIUS_RX_QUEUED,
78*6d49e1aeSJan Lentfer 	RADIUS_RX_UNKNOWN,
79*6d49e1aeSJan Lentfer 	RADIUS_RX_INVALID_AUTHENTICATOR
80*6d49e1aeSJan Lentfer } RadiusRxResult;
81*6d49e1aeSJan Lentfer 
82*6d49e1aeSJan Lentfer struct radius_client_data;
83*6d49e1aeSJan Lentfer 
84*6d49e1aeSJan Lentfer int radius_client_register(struct radius_client_data *radius,
85*6d49e1aeSJan Lentfer 			   RadiusType msg_type,
86*6d49e1aeSJan Lentfer 			   RadiusRxResult (*handler)
87*6d49e1aeSJan Lentfer 			   (struct radius_msg *msg, struct radius_msg *req,
88*6d49e1aeSJan Lentfer 			    const u8 *shared_secret, size_t shared_secret_len,
89*6d49e1aeSJan Lentfer 			    void *data),
90*6d49e1aeSJan Lentfer 			   void *data);
91*6d49e1aeSJan Lentfer int radius_client_send(struct radius_client_data *radius,
92*6d49e1aeSJan Lentfer 		       struct radius_msg *msg,
93*6d49e1aeSJan Lentfer 		       RadiusType msg_type, const u8 *addr);
94*6d49e1aeSJan Lentfer u8 radius_client_get_id(struct radius_client_data *radius);
95*6d49e1aeSJan Lentfer 
96*6d49e1aeSJan Lentfer void radius_client_flush(struct radius_client_data *radius, int only_auth);
97*6d49e1aeSJan Lentfer struct radius_client_data *
98*6d49e1aeSJan Lentfer radius_client_init(void *ctx, struct hostapd_radius_servers *conf);
99*6d49e1aeSJan Lentfer void radius_client_deinit(struct radius_client_data *radius);
100*6d49e1aeSJan Lentfer void radius_client_flush_auth(struct radius_client_data *radius, u8 *addr);
101*6d49e1aeSJan Lentfer int radius_client_get_mib(struct radius_client_data *radius, char *buf,
102*6d49e1aeSJan Lentfer 			  size_t buflen);
103*6d49e1aeSJan Lentfer struct radius_client_data *
104*6d49e1aeSJan Lentfer radius_client_reconfig(struct radius_client_data *old, void *ctx,
105*6d49e1aeSJan Lentfer 		       struct hostapd_radius_servers *oldconf,
106*6d49e1aeSJan Lentfer 		       struct hostapd_radius_servers *newconf);
107*6d49e1aeSJan Lentfer 
108*6d49e1aeSJan Lentfer #endif /* RADIUS_CLIENT_H */
109