allow username to be set when ungardening
[l2tpns.git] / l2tpns.h
index 0460a38..3783771 100644 (file)
--- 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.58 2005/03/10 03:31:25 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
@@ -202,7 +204,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 +215,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 +226,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 +382,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 +404,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 +472,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 +508,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 +592,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 +613,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);