5 * realms.h Structures, prototypes and global variables
12 #include <freeradius-devel/ident.h>
13 RCSIDH(realms_h, "$Id$")
19 #define HOME_TYPE_INVALID (0)
20 #define HOME_TYPE_AUTH (1)
21 #define HOME_TYPE_ACCT (2)
23 #define HOME_TYPE_COA (3)
26 #define HOME_PING_CHECK_NONE (0)
27 #define HOME_PING_CHECK_STATUS_SERVER (1)
28 #define HOME_PING_CHECK_REQUEST (2)
30 #define HOME_STATE_ALIVE (0)
31 #define HOME_STATE_ZOMBIE (1)
32 #define HOME_STATE_IS_DEAD (2)
33 #define HOME_STATE_UNKNOWN (3)
35 typedef struct fr_socket_limit_t {
44 typedef struct home_server {
48 const char *server; /* for internal proxying */
49 const char *parent_server;
54 int type; /* auth/acct */
57 fr_socket_limit_t limit;
59 fr_ipaddr_t src_ipaddr; /* preferred source IP address */
67 int max_outstanding; /* don't overload it */
68 int currently_outstanding;
70 time_t last_packet_sent;
71 time_t last_packet_recv;
72 struct timeval revive_time;
73 struct timeval zombie_period_start;
74 int zombie_period; /* unresponsive for T, mark it dead */
79 const char *ping_user_name;
80 const char *ping_user_password;
83 int num_pings_to_alive;
85 int num_received_pings;
88 int revive_interval; /* if it doesn't support pings */
97 fr_tls_server_conf_t *tls;
110 typedef enum home_pool_type_t {
111 HOME_POOL_INVALID = 0,
112 HOME_POOL_LOAD_BALANCE,
114 HOME_POOL_CLIENT_BALANCE,
115 HOME_POOL_CLIENT_PORT_BALANCE,
116 HOME_POOL_KEYED_BALANCE
120 typedef struct home_pool_t {
122 home_pool_type_t type;
127 const char *virtual_server; /* for pre/post-proxy */
129 home_server *fallback;
131 time_t time_all_dead;
133 int num_home_servers;
134 home_server *servers[1];
138 typedef struct _realm {
143 home_pool_t *auth_pool;
144 home_pool_t *acct_pool;
146 home_pool_t *coa_pool;
150 int realms_init(CONF_SECTION *config);
151 void realms_free(void);
152 REALM *realm_find(const char *name); /* name is from a packet */
153 REALM *realm_find2(const char *name); /* ... with name taken from realm_find */
154 int realms_home_server_add(home_server *home, CONF_SECTION *cs, int dual);
155 int realms_pool_add(home_pool_t *pool, CONF_SECTION *cs);
156 int realms_realm_add( REALM *r, CONF_SECTION *cs);
159 void home_server_update_request(home_server *home, REQUEST *request);
160 home_server *home_server_ldb(const char *realmname, home_pool_t *pool, REQUEST *request);
161 home_server *home_server_find(fr_ipaddr_t *ipaddr, int port, int proto);
163 home_server *home_server_byname(const char *name, int type);
166 home_server *home_server_bynumber(int number);
168 home_pool_t *home_pool_byname(const char *name, int type);
174 #endif /* REALMS_H */