#ifndef REALMS_H #define REALMS_H /* * realms.h Structures, prototypes and global variables * for realms * * Version: $Id: realms.h,v 1.1 2010/08/14 04:13:52 faust Exp $ * */ #include RCSIDH(realms_h, "$Id: realms.h,v 1.1 2010/08/14 04:13:52 faust Exp $") #define HOME_TYPE_INVALID (0) #define HOME_TYPE_AUTH (1) #define HOME_TYPE_ACCT (2) #ifdef WITH_COA #define HOME_TYPE_COA (3) #endif #define HOME_PING_CHECK_NONE (0) #define HOME_PING_CHECK_STATUS_SERVER (1) #define HOME_PING_CHECK_REQUEST (2) #define HOME_STATE_ALIVE (0) #define HOME_STATE_ZOMBIE (1) #define HOME_STATE_IS_DEAD (2) typedef struct home_server { const char *name; const char *hostname; const char *server; /* for internal proxying */ fr_ipaddr_t ipaddr; int port; int type; /* auth/acct */ /* * Maybe also have list of source IP/ports, && socket? */ const char *secret; fr_event_t *ev; struct timeval when; int response_window; int no_response_fail; int max_outstanding; /* don't overload it */ int currently_outstanding; int message_authenticator; struct timeval revive_time; struct timeval zombie_period_start; int zombie_period; /* unresponsive for T, mark it dead */ int state; int ping_check; const char *ping_user_name; const char *ping_user_password; int ping_interval; int num_pings_to_alive; int num_received_pings; int ping_timeout; int revive_interval; /* if it doesn't support pings */ CONF_SECTION *cs; #ifdef WITH_COA int coa_irt; int coa_mrc; int coa_mrt; int coa_mrd; #endif #ifdef WITH_STATS int number; fr_ipaddr_t src_ipaddr; /* preferred source IP address */ fr_stats_t stats; fr_stats_ema_t ema; #endif } home_server; typedef enum home_pool_type_t { HOME_POOL_INVALID = 0, HOME_POOL_LOAD_BALANCE, HOME_POOL_FAIL_OVER, HOME_POOL_CLIENT_BALANCE, HOME_POOL_CLIENT_PORT_BALANCE, HOME_POOL_KEYED_BALANCE } home_pool_type_t; typedef struct home_pool_t { const char *name; home_pool_type_t type; int server_type; CONF_SECTION *cs; const char *virtual_server; /* for pre/post-proxy */ home_server *fallback; int num_home_servers; home_server *servers[1]; } home_pool_t; typedef struct _realm { const char *name; int striprealm; home_pool_t *auth_pool; home_pool_t *acct_pool; } REALM; int realms_init(CONF_SECTION *config); void realms_free(void); REALM *realm_find(const char *name); /* name is from a packet */ REALM *realm_find2(const char *name); /* ... with name taken from realm_find */ home_server *home_server_ldb(const char *realmname, home_pool_t *pool, REQUEST *request); home_server *home_server_find(fr_ipaddr_t *ipaddr, int port); int home_server_create_listeners(void *head); #ifdef WITH_COA home_server *home_server_byname(const char *name, int type); #endif #ifdef WITH_STATS home_server *home_server_bynumber(int number); #endif home_pool_t *home_pool_byname(const char *name, int type); #endif /* REALMS_H */