1845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/* 2845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * hostapd / RADIUS client 3845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Copyright (c) 2002-2005, Jouni Malinen <j@w1.fi> 4845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 5845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This program is free software; you can redistribute it and/or modify 6845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * it under the terms of the GNU General Public License version 2 as 7845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * published by the Free Software Foundation. 8845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 9845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Alternatively, this software may be distributed under the terms of BSD 10845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * license. 11845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 12845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * See README and COPYING for more details. 13845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 14845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 15845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef RADIUS_CLIENT_H 16845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define RADIUS_CLIENT_H 17845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 18845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#include "config_types.h" 19845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 20845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct radius_msg; 21845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 22845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct hostapd_radius_server { 23845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project /* MIB prefix for shared variables: 24845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @ = radiusAuth or radiusAcc depending on the type of the server */ 25845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project struct hostapd_ip_addr addr; /* @ServerAddress */ 26845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int port; /* @ClientServerPortNumber */ 27845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u8 *shared_secret; 28845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project size_t shared_secret_len; 29845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 30845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project /* Dynamic (not from configuration file) MIB data */ 31845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int index; /* @ServerIndex */ 32845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int round_trip_time; /* @ClientRoundTripTime; in hundredths of a 33845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * second */ 34845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 requests; /* @Client{Access,}Requests */ 35845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 retransmissions; /* @Client{Access,}Retransmissions */ 36845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 access_accepts; /* radiusAuthClientAccessAccepts */ 37845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 access_rejects; /* radiusAuthClientAccessRejects */ 38845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 access_challenges; /* radiusAuthClientAccessChallenges */ 39845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 responses; /* radiusAccClientResponses */ 40845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 malformed_responses; /* @ClientMalformed{Access,}Responses */ 41845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 bad_authenticators; /* @ClientBadAuthenticators */ 42845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 timeouts; /* @ClientTimeouts */ 43845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 unknown_types; /* @ClientUnknownTypes */ 44845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u32 packets_dropped; /* @ClientPacketsDropped */ 45845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project /* @ClientPendingRequests: length of hapd->radius->msgs for matching 46845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * msg_type */ 47845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project}; 48845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 49845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct hostapd_radius_servers { 50845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project /* RADIUS Authentication and Accounting servers in priority order */ 51845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project struct hostapd_radius_server *auth_servers, *auth_server; 52845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int num_auth_servers; 53845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project struct hostapd_radius_server *acct_servers, *acct_server; 54845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int num_acct_servers; 55845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 56845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int retry_primary_interval; 57845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int acct_interim_interval; 58845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 59845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project int msg_dumps; 60845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project}; 61845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 62845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 63845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projecttypedef enum { 64845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_AUTH, 65845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_ACCT, 66845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_ACCT_INTERIM /* used only with radius_client_send(); just like 67845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * RADIUS_ACCT, but removes any pending interim 68845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * RADIUS Accounting packages for the same STA 69845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * before sending the new interim update */ 70845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project} RadiusType; 71845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 72845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projecttypedef enum { 73845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_RX_PROCESSED, 74845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_RX_QUEUED, 75845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_RX_UNKNOWN, 76845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RADIUS_RX_INVALID_AUTHENTICATOR 77845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project} RadiusRxResult; 78845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 79845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct radius_client_data; 80845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 81845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint radius_client_register(struct radius_client_data *radius, 82845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RadiusType msg_type, 83845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RadiusRxResult (*handler) 84845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project (struct radius_msg *msg, struct radius_msg *req, 85845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project u8 *shared_secret, size_t shared_secret_len, 86845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project void *data), 87845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project void *data); 88845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint radius_client_send(struct radius_client_data *radius, 89845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project struct radius_msg *msg, 90845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project RadiusType msg_type, const u8 *addr); 91845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectu8 radius_client_get_id(struct radius_client_data *radius); 92845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 93845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid radius_client_flush(struct radius_client_data *radius, int only_auth); 94845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct radius_client_data * 95845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectradius_client_init(void *ctx, struct hostapd_radius_servers *conf); 96845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid radius_client_deinit(struct radius_client_data *radius); 97845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid radius_client_flush_auth(struct radius_client_data *radius, u8 *addr); 98845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint radius_client_get_mib(struct radius_client_data *radius, char *buf, 99845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project size_t buflen); 100845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct radius_client_data * 101845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectradius_client_reconfig(struct radius_client_data *old, void *ctx, 102845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project struct hostapd_radius_servers *oldconf, 103845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project struct hostapd_radius_servers *newconf); 104845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 105845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif /* RADIUS_CLIENT_H */ 106