// L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.94 2005/10/11 07:06:56 bodea Exp $
+// $Id: l2tpns.h,v 1.101 2005/12/05 13:56:12 bodea Exp $
#ifndef __L2TPNS_H__
#define __L2TPNS_H__
#include <sys/types.h>
#include <libcli.h>
-#define VERSION "2.1.9"
+#define VERSION "2.1.13"
// Limits
#define MAXTUNNEL 500 // could be up to 65535
// reset state machine counters
#define initialise_restart_count(_s, _fsm) \
- sess_local[_s]._fsm.conf_sent = sess_local[_s]._fsm.nak_sent
+ sess_local[_s]._fsm.conf_sent = sess_local[_s]._fsm.nak_sent = 0
+
+// increment ConfReq counter and reset timer
+#define restart_timer(_s, _fsm) ({ \
+ sess_local[_s]._fsm.conf_sent++; \
+ sess_local[_s]._fsm.restart = \
+ time_now + config->ppp_restart_time; \
+})
// stop timer on change to state where timer does not run
#define change_state(_s, _fsm, _new) ({ \
sessionidt next; // next session in linked list
sessionidt far; // far end session ID
tunnelidt tunnel; // near end tunnel ID
- uint8_t l2tp_flags; // various bit flags from the ICCN on the l2tp tunnel.
+ uint8_t flags; // session flags: see SESSION_*
struct {
uint8_t phase; // PPP phase
uint8_t lcp:4; // LCP state
uint8_t ipcp:4; // IPCP state
uint8_t ipv6cp:4; // IPV6CP state
uint8_t ccp:4; // CCP state
- uint8_t pad; // unused
} ppp;
+ char pad[2]; // unused
in_addr_t ip; // IP of session set by RADIUS response (host byte order).
int ip_pool_index; // index to IP pool
uint32_t unique_id; // unique session id
// interim RADIUS
time_t last_interim;
+
+ // last LCP Echo
+ time_t last_echo;
} sessionlocalt;
-#define SESSIONPFC 1 // PFC negotiated flags
-#define SESSIONACFC 2 // ACFC negotiated flags
+// session flags
+#define SESSION_PFC (1 << 0) // use Protocol-Field-Compression
+#define SESSION_ACFC (1 << 1) // use Address-and-Control-Field-Compression
+#define SESSION_STARTED (1 << 2) // RADIUS Start record sent
// 168 bytes per tunnel
typedef struct