byte counters are sent to the master frequently which resets the idle
[l2tpns.git] / l2tpns.h
index 4fd351b..723579f 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.21 2004-10-25 15:07:52 bodea Exp $
+// $Id: l2tpns.h,v 1.28 2004-11-03 13:23:59 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -15,7 +15,7 @@
 #include <sys/types.h>
 #include <libcli.h>
 
-#define VERSION        "2.0.2"
+#define VERSION        "2.0.3"
 
 // Limits
 #define MAXTUNNEL      500             // could be up to 65535
 #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_TIMEOUT      3000    // 5 minutes in 1/10th seconds to wait for radius to cleanup on shutdown
+#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
@@ -111,7 +122,8 @@ struct cli_session_actions {
        char action;
        ipt snoop_ip;
        u16 snoop_port;
-       int throttle;
+       int throttle_in;
+       int throttle_out;
 };
 
 #define CLI_SESS_KILL          0x01
@@ -161,7 +173,8 @@ typedef struct sessions
        u32 total_cin;                  // This counter is never reset while a session is open
        u32 total_cout;                 // This counter is never reset while a session is open
        u32 id;                         // session id
-       u32 throttle;                   // non-zero if this session is throttled.
+       u16 throttle_in;                // upstream throttle rate (kbps)
+       u16 throttle_out;               // downstream throttle rate
        clockt opened;                  // when started
        clockt die;                     // being closed, when to finally free
        time_t last_packet;             // Last packet from the user (used for idle timeouts)
@@ -408,7 +421,9 @@ struct configt
 
        ipt             default_dns1, default_dns2;
 
-       unsigned long   rl_rate;
+       unsigned long   rl_rate;                        // default throttle rate
+       int             num_tbfs;                       // number of throttle buckets
+
        int             save_state;
        char            accounting_dir[128];
        ipt             bind_address;
@@ -448,7 +463,6 @@ struct configt
        char            bgp_peer[2][64];
        u16             bgp_peer_as[2];
 #endif
-       char            hostname[256];                  // our hostname - set to gethostname() by default
 };
 
 struct config_descriptt
@@ -485,17 +499,6 @@ void radiusretry(u16 r);
 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);
@@ -503,7 +506,7 @@ clockt backoff(u8 try);
 void routeset(sessionidt, ipt ip, ipt mask, ipt gw, u8 add);
 void inittun(void);
 void initudp(void);
-void initdata(int optdebug, const char *optconfig);
+void initdata(int optdebug, char *optconfig);
 void initippool();
 sessionidt sessionbyip(ipt ip);
 sessionidt sessionbyuser(char *username);
@@ -536,18 +539,20 @@ int cmd_show_ipcache(struct cli_def *cli, char *command, char **argv, int argc);
 int cmd_show_hist_idle(struct cli_def *cli, char *command, char **argv, int argc);
 int cmd_show_hist_open(struct cli_def *cli, char *command, char **argv, int argc);
 
-#define log _log
-#ifndef log_hex
-#define log_hex(a,b,c,d) do{if (a <= config->debug) _log_hex(a,0,0,0,b,c,d);}while (0)
-#endif
+#undef log
+#undef log_hex
+#define log(D, a, s, t, f, ...)        ({ if (D <= config->debug) _log(D, a, s, t, f, ## __VA_ARGS__); })
+#define log_hex(D, t, d, s)    ({ if (D <= config->debug) _log_hex(D, t, d, s); })
+
 void _log(int level, ipt address, sessionidt s, tunnelidt t, const char *format, ...) __attribute__((format (printf, 5, 6)));
-void _log_hex(int level, ipt address, sessionidt s, tunnelidt t, const char *title, const char *data, int maxsize);
+void _log_hex(int level, const char *title, const char *data, int maxsize);
+
 void build_chap_response(char *challenge, u8 id, u16 challenge_length, char **challenge_response);
 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, ...);
@@ -564,7 +569,7 @@ void host_unreachable(ipt destination, u16 id, ipt source, char *packet, int pac
 void fix_address_pool(int sid);
 void rebuild_address_pool(void);
 void send_ipin(sessionidt s, u8 * buf, int len);
-int throttle_session(sessionidt s, int throttle);
+void throttle_session(sessionidt s, int rate_in, int rate_out);
 int load_session(sessionidt, sessiont *);
 void become_master(void);      // We're the master; kick off any required master initializations.
 extern tunnelt *tunnel;
@@ -596,6 +601,7 @@ extern u32 last_id;
 extern struct Tstats *_statistics;
 extern ipt my_address;
 extern int tun_write(u8 *data, int size);
+extern int clifd;
 
 
 #define TIME (config->current_time)