// L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.14 2004-08-02 03:38:01 fred_nerk Exp $
+// $Id: l2tpns.h,v 1.25 2004-10-30 07:17:41 bodea Exp $
#ifndef __L2TPNS_H__
#define __L2TPNS_H__
#include <sys/types.h>
#include <libcli.h>
-#define VERSION "2.0.1"
+#define VERSION "2.0.2"
// Limits
#define MAXTUNNEL 500 // could be up to 65535
#define RADIUS_SHIFT 5
#define RADIUS_MASK ((unsigned short)(((unsigned short)~0) >> (16 - RADIUS_SHIFT)))
-#define MAXRADIUS ((2 << (RADIUS_SHIFT - 1)) * 255)
+#define MAXRADIUS ((unsigned long)(1L << RADIUS_SHIFT) * 255)
#define T_UNDEF (0xffff) // A tunnel ID that won't ever be used. Mark session as undefined.
#define T_FREE (0) // A tunnel ID that won't ever be used. Mark session as free.
#define MAX_LOG_LENGTH 512 // Maximum size of log message
#define ECHO_TIMEOUT 60 // Time between last packet sent and LCP ECHO generation
#define IDLE_TIMEOUT 240 // Time between last packet sent and LCP ECHO generation
+#define BUSY_WAIT_TIME 3000 // 5 minutes in 1/10th seconds to wait for radius to cleanup on shutdown
// Constants
-#include "config.h"
-#ifndef PLUGINDIR
-#define PLUGINDIR LIBDIR // Plugins
+#ifndef ETCDIR
+#define ETCDIR "/etc/l2tpns"
#endif
-#ifndef PLUGINCONF
-#define PLUGINCONF ETCDIR // Plugin config dir
+#ifndef LIBDIR
+#define LIBDIR "/usr/lib/l2tpns"
#endif
-#ifndef DATADIR
-#define DATADIR "/tmp"
+#ifndef STATEDIR
+#define STATEDIR "/var/lib/l2tpns"
+#endif
+
+#ifndef PLUGINDIR
+#define PLUGINDIR LIBDIR // Plugins
+#endif
+
+#ifndef PLUGINCONF
+#define PLUGINCONF ETCDIR // Plugin config dir
#endif
#ifndef FLASHDIR
#define FLASHDIR ETCDIR
#endif
+#ifndef DATADIR
+#define DATADIR STATEDIR
+#endif
+
#define TUNDEVICE "/dev/net/tun"
#define STATEFILE DATADIR "/state.dump" // State dump file
#define CONFIGFILE FLASHDIR "/startup-config" // Configuration file
ProtocolRej,
EchoReq,
EchoReply,
- DiscardRequest
+ DiscardRequest,
+ IdentRequest
};
// Types
{
sessionidt next; // next session in linked list
sessionidt far; // far end session ID
- tunnelidt tunnel; // tunnel ID
+ tunnelidt tunnel; // near end tunnel ID
ipt ip; // IP of session set by RADIUS response (host byte order).
int ip_pool_index; // index to IP pool
- unsigned long sid; // session id for hsddb
+ unsigned long unique_id; // unique session id
u16 nr; // next receive
u16 ns; // next send
u32 magic; // ppp magic number
u16 tbf_in; // filter bucket for throttling in from the user.
u16 tbf_out; // filter bucket for throttling out to the user.
u8 l2tp_flags; // various bit flags from the ICCN on the l2tp tunnel.
+ u8 reserved_old_snoop; // No longer used - remove at some time
u8 walled_garden; // is this session gardened?
u8 flags1; // additional flags (currently unused);
char random_vector[MAXTEL];
u32 flags; // Various session flags.
ipt snoop_ip; // Interception destination IP
u16 snoop_port; // Interception destination port
- char reserved[28]; // Space to expand structure without changing HB_VERSION
+ u16 sid; // near end session id.
+ char reserved[20]; // Space to expand structure without changing HB_VERSION
}
sessiont;
ipt default_dns1, default_dns2;
- unsigned long rl_rate;
+ unsigned long rl_rate; // throttle rate
+ int num_tbfs; // number of throttle buckets
+
int save_state;
char accounting_dir[128];
ipt bind_address;
char *key;
int offset;
int size;
- enum { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IP } type;
+ enum { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IP, MAC } type;
};
// arp.c
u16 radiusnew(sessionidt s);
void radiusclear(u16 r, sessionidt s);
-// throttle.c
-int throttle_session(sessionidt s, int throttle);
-
-
-// rl.c
-void init_rl();
-u16 rl_create_tbf();
-u16 rl_get_tbf();
-void rl_done_tbf(u16 t);
-void rl_destroy_tbf(u16 t);
-
// l2tpns.c
clockt now(void);
void routeset(sessionidt, ipt ip, ipt mask, ipt gw, u8 add);
void inittun(void);
void initudp(void);
-void initdata(void);
+void initdata(int optdebug, char *optconfig);
void initippool();
sessionidt sessionbyip(ipt ip);
sessionidt sessionbyuser(char *username);
extern struct configt *config;
extern time_t basetime; // Time when this process started.
extern time_t time_now; // Seconds since EPOCH.
-extern u32 last_sid;
+extern u32 last_id;
extern struct Tstats *_statistics;
extern ipt my_address;
extern int tun_write(u8 *data, int size);