X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/4d7677820087558df4836c006509903fa0f6d83b..804d90bb9838fa1aca73192c14e0d7c57615ad1e:/l2tpns.h diff --git a/l2tpns.h b/l2tpns.h index f27f02e..9b2eb53 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.52 2005-01-10 07:17:37 bodea Exp $ +// $Id: l2tpns.h,v 1.61 2005-03-10 06:18:47 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 @@ -236,7 +238,7 @@ typedef struct clockt last_packet_out; uint32_t packets_out; uint32_t packets_dropped; -} sessioncountt; +} sessionlocalt; #define SESSIONPFC 1 // PFC negotiated flags #define SESSIONACFC 2 // ACFC negotiated flags @@ -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,10 +610,14 @@ 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 sessionshutdown(sessionidt s, char *reason); +void sessionkill(sessionidt s, char *reason); +void sessionshutdown(sessionidt s, char *reason, int result, int error); void send_garp(in_addr_t ip); void tunnelsend(uint8_t *buf, uint16_t l, tunnelidt t); void sendipcp(tunnelidt t, sessionidt s); @@ -644,7 +657,7 @@ void host_unreachable(in_addr_t destination, uint16_t id, in_addr_t source, char extern tunnelt *tunnel; extern sessiont *session; -extern sessioncountt *sess_count; +extern sessionlocalt *sess_local; extern ippoolt *ip_address_pool; #define sessionfree (session[0].next)