// L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.90 2005/09/15 09:34:49 bodea Exp $
+// $Id: l2tpns.h,v 1.95 2005/10/12 07:16:13 bodea Exp $
#ifndef __L2TPNS_H__
#define __L2TPNS_H__
#include <sys/types.h>
#include <libcli.h>
-#define VERSION "2.1.7"
+#define VERSION "2.1.10"
// Limits
#define MAXTUNNEL 500 // could be up to 65535
#define T_FREE (0) // A tunnel ID that won't ever be used. Mark session as free.
#define MAXCONTROL 1000 // max length control message we ever send...
-#define MAXMRU 1500 // max MRU as defined by RFC1661
-#define MAXETHER (MAXMRU+18) // max packet we try sending to tun
+#define MINMTU 576 // minimum recommended MTU (rfc1063)
+#define PPPMTU 1500 // default PPP MTU
+#define MAXMTU 2600 // arbitrary maximum MTU
+#define MAXETHER (MAXMTU+18) // max packet we try sending to tun
#define MAXTEL 96 // telephone number
#define MAXUSER 128 // username
#define MAXPASS 128 // password
#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 1452 // maximum packet size to avoid fragmentation when LNS ethernet MTU is 1500
// Constants
#ifndef ETCDIR
// authentication to use
int lcp_authtype;
+ // our MRU
+ uint16_t ppp_mru;
+
// DoS prevention
clockt last_packet_out;
uint32_t packets_out;
uint16_t ns; // next send
int state; // current state (tunnelstate enum)
clockt last; // when last control message sent (used for resend timeout)
- clockt retry; // when to try resenting pending control
+ clockt retry; // when to try resending pending control
clockt die; // being closed, when to finally free
clockt lastrec; // when the last control message was received
char hostname[128]; // tunnel hostname
char tundevice[10]; // tun device name
char log_filename[128];
- char l2tpsecret[64];
+
+ char l2tp_secret[64]; // L2TP shared secret
+ int l2tp_mtu; // MTU of interface used for L2TP
char random_device[256]; // random device path, defaults to RANDOMDEVICE
int ppp_restart_time; // timeout for PPP restart
int ppp_max_configure; // max lcp configure requests to send
int ppp_max_failure; // max lcp configure naks to send
- int ppp_mru; // MRU to advertise
char radiussecret[64];
int radius_accounting;
void filter_session(sessionidt s, int filter_in, int filter_out);
void send_garp(in_addr_t ip);
void tunnelsend(uint8_t *buf, uint16_t l, tunnelidt t);
+int tun_write(uint8_t *data, int size);
+void adjust_tcp_mss(sessionidt s, tunnelidt t, uint8_t *buf, int len, uint8_t *tcp);
void sendipcp(sessionidt s, tunnelidt t);
void sendipv6cp(sessionidt s, tunnelidt t);
void processudp(uint8_t *buf, int len, struct sockaddr_in *addr);
extern uint32_t last_id;
extern struct Tstats *_statistics;
extern in_addr_t my_address;
-extern int tun_write(uint8_t *data, int size);
extern int clifd;
extern int epollfd;
#define TIME (config->current_time)
+extern uint16_t MRU;
+extern uint16_t MSS;
+
// macros for handling help in cli commands
#define CLI_HELP_REQUESTED (argc > 0 && argv[argc-1][strlen(argv[argc-1])-1] == '?')
#define CLI_HELP_NO_ARGS (argc > 1 || argv[0][1]) ? CLI_OK : cli_arg_help(cli, 1, NULL)