- Use 2 seperate u16 values for throttle rate in/out
[l2tpns.git] / l2tpns.h
index cfeb860..3e7573e 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.19 2004-10-04 23:34:07 fred_nerk Exp $
+// $Id: l2tpns.h,v 1.26 2004-11-02 04:35:04 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -15,7 +15,7 @@
 #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 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(void);
+void initdata(int optdebug, char *optconfig);
 void initippool();
 sessionidt sessionbyip(ipt ip);
 sessionidt sessionbyuser(char *username);
@@ -547,7 +550,7 @@ 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 +567,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 +599,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)