// L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.10 2004/07/07 09:09:53 bodea Exp $
+// $Id: l2tpns.h,v 1.15 2004/08/02 05:40:21 fred_nerk Exp $
#ifndef __L2TPNS_H__
#define __L2TPNS_H__
#include <sys/types.h>
#include <libcli.h>
-#define VERSION "2.0.0"
+#define VERSION "2.0.1"
// Limits
#define MAXTUNNEL 500 // could be up to 65535
#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
#define FLASHDIR ETCDIR
#endif
-#define TAPDEVICE "/dev/net/tun"
+#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
#define ACCT_TIME 3000 // 5 minute accounting interval
#define L2TPPORT 1701 // L2TP port
#define RADPORT 1645 // old radius port...
-#define RADAPORT 1646 // old radius accounting port
#define PKTARP 0x0806 // ARP packet type
#define PKTIP 0x0800 // IP packet type
#define PSEUDOMAC 0x0200 // pseudo MAC prefix (local significant MAC)
ProtocolRej,
EchoReq,
EchoReply,
- DiscardRequest
+ DiscardRequest,
+ IdentRequest
};
// Types
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 "#"
#define SESSIONPFC 1 // PFC negotiated flags
#define SESSIONACFC 2 // ACFC negotiated flags
+#define SESSIONLCPACK 4 // LCP negotiated
// 168 bytes per tunnel
typedef struct tunnels
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;
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;
unsigned long c_forwarded;
unsigned long recv_forward;
#ifdef STATISTICS
- unsigned long call_processtap;
- unsigned long call_processarp;
+ unsigned long call_processtun;
unsigned long call_processipout;
unsigned long call_processudp;
unsigned long call_sessionbyip;
int debug; // debugging level
time_t start_time; // time when l2tpns was started
char bandwidth[256]; // current bandwidth
+ char pid_file[256]; // file to write PID to on startup
+ int wrote_pid;
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!
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];
char radiussecret[64];
int radius_accounting;
ipt radiusserver[MAXRADSERVER]; // radius servers
+ u16 radiusport[MAXRADSERVER]; // radius base ports
u8 numradiusservers; // radius server count
short num_radfds; // Number of radius filehandles allocated
char old_plugins[64][MAXPLUGINS];
int next_tbf; // Next HTB id available to use
- int scheduler_fifo; // If 1, will force scheduler to use SCHED_FIFO.
- // Don't use this unless you have a dual processor machine!
- int icmp_rate; // Max number of ICMP unreachable per second to send
+ int scheduler_fifo; // If the system has multiple CPUs, use FIFO scheduling policy for this process.
+ int lock_pages; // Lock pages into memory.
+ int icmp_rate; // Max number of ICMP unreachable per second to send>
u32 cluster_address; // Multicast address of cluster.
// Send to this address to have everyone hear.
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();
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);