]> git.stg.codes - stg.git/blob - projects/rlm_stg/realms.h
6b03bcd5014be0a85ae3f4e7624a23a56224144a
[stg.git] / projects / rlm_stg / realms.h
1 #ifndef REALMS_H
2 #define REALMS_H
3
4 /*
5  * realms.h     Structures, prototypes and global variables
6  *              for realms
7  *
8  * Version:     $Id: realms.h,v 1.1 2010/08/14 04:13:52 faust Exp $
9  *
10  */
11
12 #include <freeradius/ident.h>
13 RCSIDH(realms_h, "$Id: realms.h,v 1.1 2010/08/14 04:13:52 faust Exp $")
14
15 #define HOME_TYPE_INVALID (0)
16 #define HOME_TYPE_AUTH    (1)
17 #define HOME_TYPE_ACCT    (2)
18 #ifdef WITH_COA
19 #define HOME_TYPE_COA     (3)
20 #endif
21
22 #define HOME_PING_CHECK_NONE            (0)
23 #define HOME_PING_CHECK_STATUS_SERVER   (1)
24 #define HOME_PING_CHECK_REQUEST         (2)
25
26 #define HOME_STATE_ALIVE                (0)
27 #define HOME_STATE_ZOMBIE               (1)
28 #define HOME_STATE_IS_DEAD              (2)
29
30 typedef struct home_server {
31         const char      *name;
32
33         const char      *hostname;
34         const char      *server; /* for internal proxying */
35
36         fr_ipaddr_t     ipaddr;
37
38         int             port;
39         int             type;           /* auth/acct */
40
41         /*
42          *      Maybe also have list of source IP/ports, && socket?
43          */
44
45         const char      *secret;
46
47         fr_event_t      *ev;
48         struct timeval  when;
49
50         int             response_window;
51         int             no_response_fail;
52         int             max_outstanding; /* don't overload it */
53         int             currently_outstanding;
54         int             message_authenticator;
55
56         struct timeval  revive_time;
57         struct timeval  zombie_period_start;
58         int             zombie_period; /* unresponsive for T, mark it dead */
59
60         int             state;
61
62         int             ping_check;
63         const char      *ping_user_name;
64         const char      *ping_user_password;
65
66         int             ping_interval;
67         int             num_pings_to_alive;
68         int             num_received_pings;
69         int             ping_timeout;
70
71         int             revive_interval; /* if it doesn't support pings */
72         CONF_SECTION    *cs;
73 #ifdef WITH_COA
74         int                     coa_irt;
75         int                     coa_mrc;
76         int                     coa_mrt;
77         int                     coa_mrd;
78 #endif
79 #ifdef WITH_STATS
80         int             number;
81
82         fr_ipaddr_t     src_ipaddr; /* preferred source IP address */
83
84         fr_stats_t      stats;
85
86         fr_stats_ema_t  ema;
87 #endif
88 } home_server;
89
90
91 typedef enum home_pool_type_t {
92         HOME_POOL_INVALID = 0,
93         HOME_POOL_LOAD_BALANCE,
94         HOME_POOL_FAIL_OVER,
95         HOME_POOL_CLIENT_BALANCE,
96         HOME_POOL_CLIENT_PORT_BALANCE,
97         HOME_POOL_KEYED_BALANCE
98 } home_pool_type_t;
99
100
101 typedef struct home_pool_t {
102         const char              *name;
103         home_pool_type_t        type;
104
105         int                     server_type;
106         CONF_SECTION            *cs;
107
108         const char              *virtual_server; /* for pre/post-proxy */
109         
110         home_server             *fallback;
111
112         int                     num_home_servers;
113         home_server             *servers[1];
114 } home_pool_t;
115
116
117 typedef struct _realm {
118         const char              *name;
119
120         int                     striprealm;
121
122         home_pool_t             *auth_pool;
123         home_pool_t             *acct_pool;
124 } REALM;
125
126 int realms_init(CONF_SECTION *config);
127 void realms_free(void);
128 REALM *realm_find(const char *name); /* name is from a packet */
129 REALM *realm_find2(const char *name); /* ... with name taken from realm_find */
130
131 home_server *home_server_ldb(const char *realmname, home_pool_t *pool, REQUEST *request);
132 home_server *home_server_find(fr_ipaddr_t *ipaddr, int port);
133 int     home_server_create_listeners(void *head);
134 #ifdef WITH_COA
135 home_server *home_server_byname(const char *name, int type);
136 #endif
137 #ifdef WITH_STATS
138 home_server *home_server_bynumber(int number);
139 #endif
140 home_pool_t *home_pool_byname(const char *name, int type);
141
142 #endif /* REALMS_H */