X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/e55b28c1072ab3a97df1d6a69b293fc34af3a591..d083896164182a8032d78d038091c14e09921202:/l2tpns.h?ds=inline

diff --git a/l2tpns.h b/l2tpns.h
index 0460a38..dcaa6ed 100644
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.53 2005/01/13 07:57:39 bodea Exp $
+// $Id: l2tpns.h,v 1.59 2005/03/10 05:46:55 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -19,7 +19,7 @@
 
 // Limits
 #define MAXTUNNEL	500		// could be up to 65535
-#define MAXSESSION	50000		// could be up to 65535
+#define MAXSESSION	60000		// could be up to 65535
 #define MAXTBFS		6000		// Maximum token bucket filters. Might need up to 2 * session.
 
 #define RADIUS_SHIFT	5
@@ -32,6 +32,8 @@
 #define	MAXCONTROL	1000		// max length control message we ever send...
 #define	MAXETHER	(1500+18)	// max packet we try sending to tun
 #define	MAXTEL		96		// telephone number
+#define MAXUSER		128		// username
+#define MAXPASS		128		// password
 #define MAXPLUGINS	20		// maximum number of plugins to load
 #define MAXRADSERVER	10		// max radius servers
 #define	MAXROUTE	10		// max static routes per session
@@ -150,9 +152,6 @@ struct cli_tunnel_actions {
 
 #define CLI_TUN_KILL		0x01
 
-// dump header: update number if internal format changes
-#define DUMP_MAGIC "L2TPNS#" VERSION "#"
-
 // structures
 typedef struct			// route
 {
@@ -202,7 +201,7 @@ typedef struct
 	uint8_t flags1;			// additional flags (currently unused);
 	char random_vector[MAXTEL];
 	int random_vector_length;
-	char user[129];			// user (needed in seesion for radius stop messages) (can we reduce this? --mo)
+	char user[MAXUSER];		// user (needed in seesion for radius stop messages)
 	char called[MAXTEL];		// called number
 	char calling[MAXTEL];		// calling number
 	uint32_t tx_connect_speed;
@@ -213,7 +212,9 @@ typedef struct
 	uint16_t sid;			// near end session id.
 	uint8_t filter_in;		// input filter index (to ip_filters[N-1]; 0 if none)
 	uint8_t filter_out;		// output filter index
-	char reserved[18];		// Space to expand structure without changing HB_VERSION
+	struct in6_addr ipv6route;	// Static IPv6 route
+	uint8_t ipv6prefixlen;		// IPv6 route prefix length
+	char reserved[1];		// Space to expand structure without changing HB_VERSION
 }
 sessiont;
 
@@ -222,6 +223,7 @@ sessiont;
 #define SF_CCP_ACKED	4	// CCP negotiated
 #define SF_IPV6CP_ACKED	8	// IPv6 negotiated
 #define SF_IPV6_NACKED	16	// IPv6 rejected
+#define SF_IPV6_ROUTED	32	// advertised v6 route
 
 #define AUTHPAP		1	// allow PAP
 #define AUTHCHAP	2	// allow CHAP
@@ -377,11 +379,14 @@ struct Tstats
 #ifdef STATISTICS
     uint32_t	call_processtun;
     uint32_t	call_processipout;
+    uint32_t	call_processipv6out;
     uint32_t	call_processudp;
     uint32_t	call_sessionbyip;
+    uint32_t	call_sessionbyipv6;
     uint32_t	call_sessionbyuser;
     uint32_t	call_sendarp;
     uint32_t	call_sendipcp;
+    uint32_t	call_processipv6cp;
     uint32_t	call_tunnelsend;
     uint32_t	call_sessionkill;
     uint32_t	call_sessionshutdown;
@@ -396,6 +401,7 @@ struct Tstats
     uint32_t	call_processlcp;
     uint32_t	call_processipcp;
     uint32_t	call_processipin;
+    uint32_t	call_processipv6in;
     uint32_t	call_processccp;
     uint32_t	call_sendchap;
     uint32_t	call_processrad;
@@ -463,7 +469,6 @@ typedef struct
 	unsigned long	rl_rate;			// default throttle rate
 	int		num_tbfs;			// number of throttle buckets
 
-	int		save_state;
 	char		accounting_dir[128];
 	in_addr_t	bind_address;
 	in_addr_t	peer_address;
@@ -500,6 +505,8 @@ typedef struct
 	int		cluster_hb_timeout;		// How many missed heartbeats trigger an election.
 	uint64_t	cluster_table_version;		// # state changes processed by cluster
 
+	struct in6_addr ipv6_prefix;			// Our IPv6 network pool.
+
 #ifdef BGP
 #define BGP_NUM_PEERS	2
 	uint16_t as_number;
@@ -582,7 +589,9 @@ void processpap(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
 void processchap(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
 void processlcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
 void processipcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
+void processipv6cp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
 void processipin(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
+void processipv6in(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
 void processccp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
 void sendchap(tunnelidt t, sessionidt s);
 uint8_t *makeppp(uint8_t *b, int size, uint8_t *p, int l, tunnelidt t, sessionidt s, uint16_t mtype);
@@ -601,9 +610,13 @@ void radiusclear(uint16_t r, sessionidt s);
 
 // l2tpns.c
 clockt backoff(uint8_t try);
+void send_ipv6_ra(tunnelidt t, sessionidt s, struct in6_addr *ip);
+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 random_data(uint8_t *buf, int len);
+void sessionkill(sessionidt s, char *reason);
 void sessionshutdown(sessionidt s, char *reason);
 void send_garp(in_addr_t ip);
 void tunnelsend(uint8_t *buf, uint16_t l, tunnelidt t);