Import of hostapd 0.4.9
[dragonfly.git] / contrib / hostapd-0.4.9 / radius_client.h
blobd21ca83faead045860d973d717771db98412356b
1 #ifndef RADIUS_CLIENT_H
2 #define RADIUS_CLIENT_H
4 #include "config_types.h"
6 struct radius_msg;
8 struct hostapd_radius_server {
9 /* MIB prefix for shared variables:
10 * @ = radiusAuth or radiusAcc depending on the type of the server */
11 struct hostapd_ip_addr addr; /* @ServerAddress */
12 int port; /* @ClientServerPortNumber */
13 u8 *shared_secret;
14 size_t shared_secret_len;
16 /* Dynamic (not from configuration file) MIB data */
17 int index; /* @ServerIndex */
18 int round_trip_time; /* @ClientRoundTripTime; in hundredths of a
19 * second */
20 u32 requests; /* @Client{Access,}Requests */
21 u32 retransmissions; /* @Client{Access,}Retransmissions */
22 u32 access_accepts; /* radiusAuthClientAccessAccepts */
23 u32 access_rejects; /* radiusAuthClientAccessRejects */
24 u32 access_challenges; /* radiusAuthClientAccessChallenges */
25 u32 responses; /* radiusAccClientResponses */
26 u32 malformed_responses; /* @ClientMalformed{Access,}Responses */
27 u32 bad_authenticators; /* @ClientBadAuthenticators */
28 u32 timeouts; /* @ClientTimeouts */
29 u32 unknown_types; /* @ClientUnknownTypes */
30 u32 packets_dropped; /* @ClientPacketsDropped */
31 /* @ClientPendingRequests: length of hapd->radius->msgs for matching
32 * msg_type */
35 struct hostapd_radius_servers {
36 /* RADIUS Authentication and Accounting servers in priority order */
37 struct hostapd_radius_server *auth_servers, *auth_server;
38 int num_auth_servers;
39 struct hostapd_radius_server *acct_servers, *acct_server;
40 int num_acct_servers;
42 int retry_primary_interval;
43 int acct_interim_interval;
45 int msg_dumps;
49 typedef enum {
50 RADIUS_AUTH,
51 RADIUS_ACCT,
52 RADIUS_ACCT_INTERIM /* used only with radius_client_send(); just like
53 * RADIUS_ACCT, but removes any pending interim
54 * RADIUS Accounting packages for the same STA
55 * before sending the new interim update */
56 } RadiusType;
58 typedef enum {
59 RADIUS_RX_PROCESSED,
60 RADIUS_RX_QUEUED,
61 RADIUS_RX_UNKNOWN,
62 RADIUS_RX_INVALID_AUTHENTICATOR
63 } RadiusRxResult;
65 struct radius_client_data;
67 int radius_client_register(struct radius_client_data *radius,
68 RadiusType msg_type,
69 RadiusRxResult (*handler)
70 (struct radius_msg *msg, struct radius_msg *req,
71 u8 *shared_secret, size_t shared_secret_len,
72 void *data),
73 void *data);
74 int radius_client_send(struct radius_client_data *radius,
75 struct radius_msg *msg,
76 RadiusType msg_type, u8 *addr);
77 u8 radius_client_get_id(struct radius_client_data *radius);
79 void radius_client_flush(struct radius_client_data *radius);
80 struct radius_client_data *
81 radius_client_init(void *ctx, struct hostapd_radius_servers *conf);
82 void radius_client_deinit(struct radius_client_data *radius);
83 void radius_client_flush_auth(struct radius_client_data *radius, u8 *addr);
84 int radius_client_get_mib(struct radius_client_data *radius, char *buf,
85 size_t buflen);
87 #endif /* RADIUS_CLIENT_H */