Import of WPA supplicant 0.4.9
[dragonfly.git] / contrib / wpa_supplicant-0.4.9 / radius_client.h
1 #ifndef RADIUS_CLIENT_H
2 #define RADIUS_CLIENT_H
3
4 #include "config_types.h"
5
6 struct radius_msg;
7
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;
15
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 */
33 };
34
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;
41
42         int retry_primary_interval;
43         int acct_interim_interval;
44
45         int msg_dumps;
46 };
47
48
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;
57
58 typedef enum {
59         RADIUS_RX_PROCESSED,
60         RADIUS_RX_QUEUED,
61         RADIUS_RX_UNKNOWN,
62         RADIUS_RX_INVALID_AUTHENTICATOR
63 } RadiusRxResult;
64
65 struct radius_client_data;
66
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);
78
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);
86
87 #endif /* RADIUS_CLIENT_H */