X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/be29ef6cb251dbcf421701a44333520a755aecae..20c047375304a710286509cc86c2fcb3e322c45c:/l2tpns.h?ds=inline diff --git a/l2tpns.h b/l2tpns.h index add806f..3d0be8f 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.55 2005-02-09 00:16:19 bodea Exp $ +// $Id: l2tpns.h,v 1.65 2005-05-05 10:02:08 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 @@ -51,10 +53,6 @@ #define LIBDIR "/usr/lib/l2tpns" #endif -#ifndef STATEDIR -#define STATEDIR "/var/lib/l2tpns" -#endif - #ifndef PLUGINDIR #define PLUGINDIR LIBDIR // Plugins #endif @@ -67,13 +65,8 @@ #define FLASHDIR ETCDIR #endif -#ifndef DATADIR -#define DATADIR STATEDIR -#endif - #define TUNDEVICE "/dev/net/tun" #define RANDOMDEVICE "/dev/urandom" // default, not as secure as /dev/random but non-blocking -#define STATEFILE DATADIR "/state.dump" // State dump file #define CONFIGFILE FLASHDIR "/startup-config" // Configuration file #define CLIUSERS FLASHDIR "/users" // CLI Users file #define IPPOOLFILE FLASHDIR "/ip_pool" // Address pool configuration @@ -150,9 +143,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 { @@ -176,7 +166,7 @@ typedef struct tunnelidt tunnel; // near end tunnel ID in_addr_t ip; // IP of session set by RADIUS response (host byte order). int ip_pool_index; // index to IP pool - unsigned long unique_id; // unique session id + uint32_t unique_id; // unique session id uint16_t nr; // next receive uint16_t ns; // next send uint32_t magic; // ppp magic number @@ -184,7 +174,6 @@ typedef struct 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 id; // session id uint16_t throttle_in; // upstream throttle rate (kbps) uint16_t throttle_out; // downstream throttle rate clockt opened; // when started @@ -192,25 +181,21 @@ typedef struct time_t last_packet; // Last packet from the user (used for idle timeouts) in_addr_t dns1, dns2; // DNS servers routet route[MAXROUTE]; // static routes - uint16_t radius; // which radius session is being used (0 for not waiting on authentication) uint16_t mru; // maximum receive unit uint16_t tbf_in; // filter bucket for throttling in from the user. uint16_t tbf_out; // filter bucket for throttling out to the user. uint8_t l2tp_flags; // various bit flags from the ICCN on the l2tp tunnel. - uint8_t reserved_old_snoop; // No longer used - remove at some time + uint32_t flags; // Various session flags. uint8_t walled_garden; // is this session gardened? - 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; uint32_t rx_connect_speed; - uint32_t flags; // Various session flags. in_addr_t snoop_ip; // Interception destination IP uint16_t snoop_port; // Interception destination port - 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 struct in6_addr ipv6route; // Static IPv6 route @@ -239,6 +224,12 @@ typedef struct clockt last_packet_out; uint32_t packets_out; uint32_t packets_dropped; + + // RADIUS session in use + uint16_t radius; + + // interim RADIUS + time_t last_interim; } sessionlocalt; #define SESSIONPFC 1 // PFC negotiated flags @@ -327,8 +318,8 @@ enum RADIUSIPCP, // sending IPCP to end user RADIUSSTART, // sending start accounting to RADIUS server RADIUSSTOP, // sending stop accounting to RADIUS server + RADIUSINTERIM, // sending interim accounting to RADIUS server RADIUSWAIT, // waiting timeout before available, in case delayed replies - RADIUSDEAD, // errored while talking to radius server. }; struct Tstats @@ -456,6 +447,7 @@ typedef struct char radiussecret[64]; int radius_accounting; + int radius_interim; in_addr_t radiusserver[MAXRADSERVER]; // radius servers uint16_t radiusport[MAXRADSERVER]; // radius base ports uint8_t numradiusservers; // radius server count @@ -617,7 +609,8 @@ 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);