X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/b9723a06cc114a4a7b2932f951950eb49a7b8973..f09aa50116225d537aca6a8944e39036b0501333:/l2tpns.h?ds=sidebyside

diff --git a/l2tpns.h b/l2tpns.h
index f527c61..235a2c8 100644
--- 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.78 2005/06/12 06:10:29 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -15,7 +15,7 @@
 #include <sys/types.h>
 #include <libcli.h>
 
-#define VERSION	"2.1.0"
+#define VERSION	"2.1.1"
 
 // Limits
 #define MAXTUNNEL	500		// could be up to 65535
@@ -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);
@@ -660,12 +672,12 @@ if (count++ < max) { \
 	void *array[20]; \
 	char **strings; \
 	int size, i; \
-	LOG(0, 0, t, "Backtrace follows"); \
+	LOG(0, 0, t, "Backtrace follows:\n"); \
 	size = backtrace(array, 10); \
 	strings = backtrace_symbols(array, size); \
 	if (strings) for (i = 0; i < size; i++) \
 	{ \
-		LOG(0, 0, t, "%s\n", strings[i]); \
+		LOG(0, 0, t, " %s\n", strings[i]); \
 	} \
 	free(strings); \
 }
@@ -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)