1 #ifndef RADIUS_CLIENT_H
2 #define RADIUS_CLIENT_H
4 #include "config_types.h"
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 */
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
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
35 struct hostapd_radius_servers
{
36 /* RADIUS Authentication and Accounting servers in priority order */
37 struct hostapd_radius_server
*auth_servers
, *auth_server
;
39 struct hostapd_radius_server
*acct_servers
, *acct_server
;
42 int retry_primary_interval
;
43 int acct_interim_interval
;
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 */
62 RADIUS_RX_INVALID_AUTHENTICATOR
65 struct radius_client_data
;
67 int radius_client_register(struct radius_client_data
*radius
,
69 RadiusRxResult (*handler
)
70 (struct radius_msg
*msg
, struct radius_msg
*req
,
71 u8
*shared_secret
, size_t shared_secret_len
,
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
,
87 #endif /* RADIUS_CLIENT_H */