don't build tests
[l2tpns.git] / l2tpns.h
index f527c61..523cf4d 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.72 2005/05/20 01:32:14 bodea Exp $
+// $Id: l2tpns.h,v 1.76 2005/06/04 15:42:36 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -23,6 +23,7 @@
 #define MAXTBFS                6000            // Maximum token bucket filters. Might need up to 2 * session.
 
 #define RADIUS_SHIFT   6
+#define        RADIUS_FDS      (1 << RADIUS_SHIFT)
 #define RADIUS_MASK    ((1 << RADIUS_SHIFT) - 1)
 #define MAXRADIUS      (1 << (8 + RADIUS_SHIFT))
 
@@ -173,10 +174,10 @@ typedef struct
        uint16_t nr;                    // next receive
        uint16_t ns;                    // next send
        uint32_t magic;                 // ppp magic number
-       uint32_t cin, cout;             // byte counts
        uint32_t pin, pout;             // packet counts
-       uint32_t total_cin;             // This counter is never reset while a session is open
-       uint32_t total_cout;            // This counter is never reset while a session is open
+       uint32_t cin, cout;             // byte counts
+       uint32_t cin_wrap, cout_wrap;   // byte counter wrap count (RADIUS accounting giagawords)
+       uint32_t cin_delta, cout_delta; // byte count changes (for dump_session())
        uint16_t throttle_in;           // upstream throttle rate (kbps)
        uint16_t throttle_out;          // downstream throttle rate
        uint8_t filter_in;              // input filter index (to ip_filters[N-1]; 0 if none)
@@ -201,7 +202,7 @@ typedef struct
        uint8_t walled_garden;          // is this session gardened?
        uint8_t ipv6prefixlen;          // IPv6 route prefix length
        struct in6_addr ipv6route;      // Static IPv6 route
-       char reserved[24];              // Space to expand structure without changing HB_VERSION
+       char reserved[16];              // Space to expand structure without changing HB_VERSION
 }
 sessiont;
 
@@ -217,6 +218,10 @@ sessiont;
 
 typedef struct
 {
+       // packet counters
+       uint32_t pin;
+       uint32_t pout;
+
        // byte counters
        uint32_t cin;
        uint32_t cout;
@@ -437,7 +442,6 @@ typedef struct
 
        char            config_file[128];
        int             reload_config;                  // flag to re-read config (set by cli)
-       int             cleanup_interval;               // interval between regular cleanups (in seconds)
        int             multi_read_count;               // amount of packets to read per fd in processing loop
 
        char            tundevice[10];                  // tun device name
@@ -452,12 +456,13 @@ typedef struct
        in_addr_t       radiusserver[MAXRADSERVER];     // radius servers
        uint16_t        radiusport[MAXRADSERVER];       // radius base ports
        uint8_t         numradiusservers;               // radius server count
-       short           num_radfds;                     // Number of radius filehandles allocated
 
        char            radius_authtypes_s[32];         // list of valid authentication types (chap, pap) in order of preference
        int             radius_authtypes;
        int             radius_authprefer;
 
+       int             allow_duplicate_users;          // allow multiple logins with the same username
+
        in_addr_t       default_dns1, default_dns2;
 
        unsigned long   rl_rate;                        // default throttle rate
@@ -474,7 +479,8 @@ typedef struct
        char            old_plugins[64][MAXPLUGINS];
 
        int             next_tbf;                       // Next HTB id available to use
-       int             scheduler_fifo;                 // If the system has multiple CPUs, use FIFO scheduling policy for this process.
+       int             scheduler_fifo;                 // If the system has multiple CPUs, use FIFO scheduling
+                                                       // policy for this process.
        int             lock_pages;                     // Lock pages into memory.
        int             icmp_rate;                      // Max number of ICMP unreachable per second to send
        int             max_packets;                    // DoS prevention: per session limit of packets/0.1s
@@ -493,6 +499,7 @@ typedef struct
        int             cluster_highest_sessionid;
        int             cluster_highest_tunnelid;
        clockt          cluster_last_hb;                // Last time we saw a heartbeat from the master.
+       int             cluster_last_hb_ver;            // Heartbeat version last seen from master
        int             cluster_num_changes;            // Number of changes queued.
 
        int             cluster_hb_interval;            // How often to send a heartbeat.
@@ -501,6 +508,10 @@ typedef struct
 
        struct in6_addr ipv6_prefix;                    // Our IPv6 network pool.
 
+
+       int             cluster_master_min_adv;         // Master advertises routes while the number of up to date
+                                                       // slaves is less than this value.
+
 #ifdef BGP
 #define BGP_NUM_PEERS  2
        uint16_t as_number;
@@ -609,6 +620,7 @@ void route6set(sessionidt s, struct in6_addr ip, int prefixlen, int add);
 sessionidt sessionbyip(in_addr_t ip);
 sessionidt sessionbyipv6(struct in6_addr ip);
 sessionidt sessionbyuser(char *username);
+void increment_counter(uint32_t *counter, uint32_t *wrap, uint32_t delta);
 void random_data(uint8_t *buf, int len);
 void sessionkill(sessionidt s, char *reason);
 void sessionshutdown(sessionidt s, char *reason, int result, int error);
@@ -674,12 +686,26 @@ if (count++ < max) { \
 extern configt *config;
 extern time_t basetime;                // Time when this process started.
 extern time_t time_now;                // Seconds since EPOCH.
+extern char main_quit;
 extern uint32_t last_id;
 extern struct Tstats *_statistics;
 extern in_addr_t my_address;
 extern int tun_write(uint8_t *data, int size);
 extern int clifd;
-
+extern int epollfd;
+
+struct event_data {
+       enum {
+               FD_TYPE_CONTROL,
+               FD_TYPE_CLI,
+               FD_TYPE_UDP,
+               FD_TYPE_TUN,
+               FD_TYPE_CLUSTER,
+               FD_TYPE_RADIUS,
+               FD_TYPE_BGP,
+       } type;
+       int index; // for RADIUS, BGP
+};
 
 #define TIME (config->current_time)