configure MRU in initlcp
[l2tpns.git] / l2tpns.h
index 20ec1fe..bb22e41 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.62 2005/04/18 04:18:15 bodea Exp $
+// $Id: l2tpns.h,v 1.66 2005/05/07 11:57:53 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -43,6 +43,7 @@
 #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
+#define DEFAULT_MRU    1458            // maximum packet size to avoid fragmentation when LNS ethernet MTU is 1500
 
 // Constants
 #ifndef ETCDIR
@@ -166,7 +167,7 @@ typedef struct
        tunnelidt tunnel;               // near end tunnel ID
        in_addr_t ip;                   // IP of session set by RADIUS response (host byte order).
        int ip_pool_index;              // index to IP pool
-       unsigned long unique_id;        // unique session id
+       uint32_t unique_id;             // unique session id
        uint16_t nr;                    // next receive
        uint16_t ns;                    // next send
        uint32_t magic;                 // ppp magic number
@@ -174,7 +175,6 @@ typedef struct
        uint32_t pin, pout;             // packet counts
        uint32_t total_cin;             // This counter is never reset while a session is open
        uint32_t total_cout;            // This counter is never reset while a session is open
-       uint32_t id;                    // session id
        uint16_t throttle_in;           // upstream throttle rate (kbps)
        uint16_t throttle_out;          // downstream throttle rate
        clockt opened;                  // when started
@@ -182,14 +182,12 @@ typedef struct
        time_t last_packet;             // Last packet from the user (used for idle timeouts)
        in_addr_t dns1, dns2;           // DNS servers
        routet route[MAXROUTE];         // static routes
-       uint16_t radius;                // which radius session is being used (0 for not waiting on authentication)
        uint16_t mru;                   // maximum receive unit
        uint16_t tbf_in;                // filter bucket for throttling in from the user.
        uint16_t tbf_out;               // filter bucket for throttling out to the user.
        uint8_t l2tp_flags;             // various bit flags from the ICCN on the l2tp tunnel.
-       uint8_t reserved_old_snoop;     // No longer used - remove at some time
+       uint32_t flags;                 // Various session flags.
        uint8_t walled_garden;          // is this session gardened?
-       uint8_t flags1;                 // additional flags (currently unused);
        char random_vector[MAXTEL];
        int random_vector_length;
        char user[MAXUSER];             // user (needed in seesion for radius stop messages)
@@ -197,10 +195,8 @@ typedef struct
        char calling[MAXTEL];           // calling number
        uint32_t tx_connect_speed;
        uint32_t rx_connect_speed;
-       uint32_t flags;                 // Various session flags.
        in_addr_t snoop_ip;             // Interception destination IP
        uint16_t snoop_port;            // Interception destination port
-       uint16_t sid;                   // near end session id.
        uint8_t filter_in;              // input filter index (to ip_filters[N-1]; 0 if none)
        uint8_t filter_out;             // output filter index
        struct in6_addr ipv6route;      // Static IPv6 route
@@ -229,6 +225,12 @@ typedef struct
        clockt last_packet_out;
        uint32_t packets_out;
        uint32_t packets_dropped;
+
+       // RADIUS session in use
+       uint16_t radius;
+
+       // interim RADIUS
+       time_t last_interim;
 } sessionlocalt;
 
 #define        SESSIONPFC      1       // PFC negotiated flags
@@ -317,8 +319,8 @@ enum
        RADIUSIPCP,             // sending IPCP to end user
        RADIUSSTART,            // sending start accounting to RADIUS server
        RADIUSSTOP,             // sending stop accounting to RADIUS server
+       RADIUSINTERIM,          // sending interim accounting to RADIUS server
        RADIUSWAIT,             // waiting timeout before available, in case delayed replies
-       RADIUSDEAD,             // errored while talking to radius server.
 };
 
 struct Tstats
@@ -446,6 +448,7 @@ typedef struct
 
        char            radiussecret[64];
        int             radius_accounting;
+       int             radius_interim;
        in_addr_t       radiusserver[MAXRADSERVER];     // radius servers
        uint16_t        radiusport[MAXRADSERVER];       // radius base ports
        uint8_t         numradiusservers;               // radius server count