X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/ed90ea49e025e0c8083f9d98768d870e6a880f13..570d0d53855b9121b29c94bd20206e2158130997:/l2tpns.h diff --git a/l2tpns.h b/l2tpns.h index fe19bc6..0e0ad14 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.7 2004/06/23 03:52:24 fred_nerk Exp $ +// $Id: l2tpns.h,v 1.11 2004/07/08 16:54:35 bodea Exp $ #ifndef __L2TPNS_H__ #define __L2TPNS_H__ @@ -14,9 +14,8 @@ #include #include #include -#include "config.h" -#define VERSION "2.0.0" +#define VERSION "2.0.1" // Limits #define MAXTUNNEL 500 // could be up to 65535 @@ -31,7 +30,7 @@ #define T_FREE (0) // A tunnel ID that won't ever be used. Mark session as free. #define MAXCONTROL 1000 // max length control message we ever send... -#define MAXETHER (1500+18) // max packet we try sending to tap +#define MAXETHER (1500+18) // max packet we try sending to tun #define MAXTEL 96 // telephone number #define MAXPLUGINS 20 // maximum number of plugins to load #define MAXRADSERVER 10 // max radius servers @@ -43,6 +42,7 @@ #define IDLE_TIMEOUT 240 // Time between last packet sent and LCP ECHO generation // Constants +#include "config.h" #ifndef PLUGINDIR #define PLUGINDIR LIBDIR // Plugins #endif @@ -59,8 +59,7 @@ #define FLASHDIR ETCDIR #endif -#define TAPDEVICE "/dev/net/tun" -#define UDP 17 +#define TUNDEVICE "/dev/net/tun" #define STATEFILE DATADIR "/state.dump" // State dump file #define CONFIGFILE FLASHDIR "/startup-config" // Configuration file #define CLIUSERS FLASHDIR "/users" // CLI Users file @@ -106,6 +105,26 @@ typedef u16 tunnelidt; typedef u32 clockt; typedef u8 hasht[16]; +// CLI actions +struct cli_session_actions { + char action; + ipt snoop_ip; + u16 snoop_port; + int throttle; +}; + +#define CLI_SESS_KILL 0x01 +#define CLI_SESS_SNOOP 0x02 +#define CLI_SESS_NOSNOOP 0x04 +#define CLI_SESS_THROTTLE 0x08 +#define CLI_SESS_NOTHROTTLE 0x10 + +struct cli_tunnel_actions { + char action; +}; + +#define CLI_TUN_KILL 0x01 + // dump header: update number if internal format changes #define DUMP_MAGIC "L2TPNS#" VERSION "#" @@ -125,7 +144,6 @@ typedef struct controls // control message } controlt; -// 336 bytes per session typedef struct sessions { sessionidt next; // next session in linked list @@ -272,12 +290,12 @@ struct Tstats time_t start_time; time_t last_reset; - unsigned long tap_rx_packets; - unsigned long tap_tx_packets; - unsigned long tap_rx_bytes; - unsigned long tap_tx_bytes; - unsigned long tap_rx_errors; - unsigned long tap_tx_errors; + unsigned long tun_rx_packets; + unsigned long tun_tx_packets; + unsigned long tun_rx_bytes; + unsigned long tun_tx_bytes; + unsigned long tun_rx_errors; + unsigned long tun_tx_errors; unsigned long tunnel_rx_packets; unsigned long tunnel_tx_packets; @@ -289,11 +307,7 @@ struct Tstats unsigned long tunnel_retries; unsigned long radius_retries; - unsigned long arp_errors; - unsigned long arp_replies; - unsigned long arp_discarded; unsigned long arp_sent; - unsigned long arp_recv; unsigned long packets_snooped; @@ -311,9 +325,8 @@ struct Tstats unsigned long c_forwarded; unsigned long recv_forward; -#ifdef STAT_CALLS - unsigned long call_processtap; - unsigned long call_processarp; +#ifdef STATISTICS + unsigned long call_processtun; unsigned long call_processipout; unsigned long call_processudp; unsigned long call_sessionbyip; @@ -343,11 +356,19 @@ struct Tstats }; #ifdef STATISTICS -#define STAT(x) _statistics->x++ -#define INC_STAT(x,y) _statistics->x += y -#define GET_STAT(x) _statistics->x -#define SET_STAT(x, y) _statistics->x = y + +#ifdef STAT_CALLS +#define CSTAT(x) STAT(x) #else +#define CSTAT(x) +#endif + +#define STAT(x) (_statistics->x++) +#define INC_STAT(x,y) (_statistics->x += (y)) +#define GET_STAT(x) (_statistics->x) +#define SET_STAT(x, y) (_statistics->x = (y)) +#else +#define CSTAT(x) #define STAT(x) #define INC_STAT(x,y) #define GET_STAT(x) 0 @@ -359,14 +380,16 @@ struct configt int debug; // debugging level time_t start_time; // time when l2tpns was started char bandwidth[256]; // current bandwidth - clockt current_time; + clockt current_time; // 1/10ths of a second since the process started. + // means that we can only run a given process + // for 13 years without re-starting! 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 tapdevice[10]; // tap device name + char tundevice[10]; // tun device name char log_filename[128]; char l2tpsecret[64]; @@ -394,12 +417,12 @@ struct configt // Don't use this unless you have a dual processor machine! int icmp_rate; // Max number of ICMP unreachable per second to send - u32 cluster_address; // Multicast address of cluster. + u32 cluster_address; // Multicast address of cluster. // Send to this address to have everyone hear. char cluster_interface[64]; // Which interface to listen for multicast on. int cluster_iam_master; // Are we the cluster master??? int cluster_iam_uptodate; // Set if we've got a full set of state from the master. - u32 cluster_master_address; // The network address of the cluster master. + u32 cluster_master_address; // The network address of the cluster master. // Zero if i am the cluster master. int cluster_seq_number; // Sequence number of the next heartbeat we'll send out // (or the seq number we're next expecting if we're a slave). @@ -410,6 +433,9 @@ struct configt clockt cluster_last_hb; // Last time we saw a heartbeat from the master. int cluster_num_changes; // Number of changes queued. + int cluster_hb_interval; // How often to send a heartbeat. + int cluster_hb_timeout; // How many missed heartbeats trigger an election. + #ifdef BGP u16 as_number; char bgp_peer[2][64]; @@ -467,7 +493,7 @@ void rl_destroy_tbf(u16 t); clockt now(void); clockt backoff(u8 try); void routeset(sessionidt, ipt ip, ipt mask, ipt gw, u8 add); -void inittap(void); +void inittun(void); void initudp(void); void initdata(void); void initippool(); @@ -491,7 +517,7 @@ void sendipcp(tunnelidt t, sessionidt s); void processipout(u8 * buf, int len); void processarp(u8 * buf, int len); void processudp(u8 * buf, int len, struct sockaddr_in *addr); -void processtap(u8 * buf, int len); +void processtun(u8 * buf, int len); void processcontrol(u8 * buf, int len, struct sockaddr_in *addr); int assign_ip_address(sessionidt s); void free_ip_address(sessionidt s); @@ -513,9 +539,10 @@ int sessionsetup(tunnelidt t, sessionidt s); int cluster_send_session(int s); int cluster_send_tunnel(int t); int cluster_send_goodbye(); -void init_cli(); +void init_cli(char *hostname); void cli_do_file(FILE *fh); void cli_do(int sockfd); +int cli_arg_help(struct cli_def *cli, int cr_ok, char *entry, ...); #ifdef RINGBUFFER void ringbuffer_dump(FILE *stream); #endif @@ -561,4 +588,27 @@ extern u32 last_sid; extern struct Tstats *_statistics; extern ipt my_address; extern int tun_write(u8 *data, int size); + + +#define TIME (config->current_time) + +// macros for handling help in cli commands +#define CLI_HELP_REQUESTED (argc > 0 && argv[argc-1][strlen(argv[argc-1])-1] == '?') +#define CLI_HELP_NO_ARGS (argc > 1 || argv[0][1]) ? CLI_OK : cli_arg_help(cli, 1, NULL) + +// CVS identifiers (for "show version file") +extern char const *cvs_id_arp; +extern char const *cvs_id_cli; +extern char const *cvs_id_cluster; +extern char const *cvs_id_constants; +extern char const *cvs_id_control; +extern char const *cvs_id_icmp; +extern char const *cvs_id_l2tpns; +extern char const *cvs_id_ll; +extern char const *cvs_id_md5; +extern char const *cvs_id_ppp; +extern char const *cvs_id_radius; +extern char const *cvs_id_tbf; +extern char const *cvs_id_util; + #endif /* __L2TPNS_H__ */