Enable the server to originate CoA-Request && Disconnect-Request
[freeradius.git] / src / include / realms.h
index 846c18a..206be2f 100644 (file)
@@ -15,6 +15,9 @@ RCSIDH(realms_h, "$Id$")
 #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)
@@ -28,9 +31,9 @@ typedef struct home_server {
        const char      *name;
 
        const char      *hostname;
+       const char      *server; /* for internal proxying */
 
-       lrad_ipaddr_t   ipaddr;
-
+       fr_ipaddr_t     ipaddr;
 
        int             port;
        int             type;           /* auth/acct */
@@ -41,13 +44,14 @@ typedef struct home_server {
 
        const char      *secret;
 
-       lrad_event_t    *ev;
+       fr_event_t      *ev;
        struct timeval  when;
 
        int             response_window;
        int             max_outstanding; /* don't overload it */
        int             currently_outstanding;
 
+       struct timeval  revive_time;
        struct timeval  zombie_period_start;
        int             zombie_period; /* unresponsive for T, mark it dead */
 
@@ -63,6 +67,20 @@ typedef struct home_server {
        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_stats_t      stats;
+
+       fr_stats_ema_t  ema;
+#endif
 } home_server;
 
 
@@ -71,7 +89,8 @@ typedef enum home_pool_type_t {
        HOME_POOL_LOAD_BALANCE,
        HOME_POOL_FAIL_OVER,
        HOME_POOL_CLIENT_BALANCE,
-       HOME_POOL_CLIENT_PORT_BALANCE
+       HOME_POOL_CLIENT_PORT_BALANCE,
+       HOME_POOL_KEYED_BALANCE
 } home_pool_type_t;
 
 
@@ -80,6 +99,11 @@ typedef struct home_pool_t {
        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];
@@ -97,10 +121,17 @@ typedef struct _realm {
 
 int realms_init(CONF_SECTION *config);
 void realms_free(void);
-int realm_add(CONF_SECTION *cs);
-REALM *realm_find(const char *name);
+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(lrad_ipaddr_t *ipaddr, int port);
+home_server *home_server_find(fr_ipaddr_t *ipaddr, int port);
+#ifdef WITH_COA
+home_server *home_server_byname(const char *name);
+#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 */