radius_client.h
Go to the documentation of this file.00001
00016 #ifndef RADIUS_CLIENT_H
00017 #define RADIUS_CLIENT_H
00018
00019 #include "ip_addr.h"
00020
00021 struct radius_msg;
00022
00035 struct hostapd_radius_server {
00040 struct hostapd_ip_addr addr;
00041
00046 int port;
00047
00052 u8 *shared_secret;
00053
00058 size_t shared_secret_len;
00059
00060
00061
00066 int index;
00067
00073 int round_trip_time;
00074
00079 u32 requests;
00080
00085 u32 retransmissions;
00086
00091 u32 access_accepts;
00092
00097 u32 access_rejects;
00098
00103 u32 access_challenges;
00104
00109 u32 responses;
00110
00115 u32 malformed_responses;
00116
00121 u32 bad_authenticators;
00122
00127 u32 timeouts;
00128
00133 u32 unknown_types;
00134
00139 u32 packets_dropped;
00140 };
00141
00146 struct hostapd_radius_servers {
00151 struct hostapd_radius_server *auth_servers;
00152
00157 int num_auth_servers;
00158
00163 struct hostapd_radius_server *auth_server;
00164
00169 struct hostapd_radius_server *acct_servers;
00170
00175 int num_acct_servers;
00176
00181 struct hostapd_radius_server *acct_server;
00182
00194 int retry_primary_interval;
00195
00200 int msg_dumps;
00201
00206 struct hostapd_ip_addr client_addr;
00207
00212 int force_client_addr;
00213 };
00214
00215
00220 typedef enum {
00224 RADIUS_AUTH,
00225
00230 RADIUS_ACCT,
00231
00240 RADIUS_ACCT_INTERIM
00241 } RadiusType;
00242
00247 typedef enum {
00248 RADIUS_RX_PROCESSED,
00249 RADIUS_RX_QUEUED,
00250 RADIUS_RX_UNKNOWN,
00251 RADIUS_RX_INVALID_AUTHENTICATOR
00252 } RadiusRxResult;
00253
00254 struct radius_client_data;
00255
00256 int radius_client_register(struct radius_client_data *radius,
00257 RadiusType msg_type,
00258 RadiusRxResult (*handler)
00259 (struct radius_msg *msg, struct radius_msg *req,
00260 const u8 *shared_secret, size_t shared_secret_len,
00261 void *data),
00262 void *data);
00263 int radius_client_send(struct radius_client_data *radius,
00264 struct radius_msg *msg,
00265 RadiusType msg_type, const u8 *addr);
00266 u8 radius_client_get_id(struct radius_client_data *radius);
00267
00268 #ifdef CONFIG_NO_RADIUS
00269 static inline void radius_client_flush(struct radius_client_data *radius,
00270 int only_auth)
00271 {
00272 }
00273
00274 static inline struct radius_client_data *
00275 radius_client_init(void *ctx, struct hostapd_radius_servers *conf)
00276 {
00277 return (void *) -1;
00278 }
00279
00280 static inline void radius_client_deinit(struct radius_client_data *radius)
00281 {
00282 }
00283
00284 static inline void radius_client_flush_auth(struct radius_client_data *radius,
00285 const u8 *addr)
00286 {
00287 }
00288
00289 static inline int radius_client_get_mib(struct radius_client_data *radius,
00290 char *buf, size_t buflen)
00291 {
00292 return 0;
00293 }
00294 #else
00295 void radius_client_flush(struct radius_client_data *radius, int only_auth);
00296 struct radius_client_data *
00297 radius_client_init(void *ctx, struct hostapd_radius_servers *conf);
00298 void radius_client_deinit(struct radius_client_data *radius);
00299 void radius_client_flush_auth(struct radius_client_data *radius,
00300 const u8 *addr);
00301 int radius_client_get_mib(struct radius_client_data *radius, char *buf,
00302 size_t buflen);
00303 #endif
00304
00305 #endif
00306