Removal MTU size limitation
[l2tpns.git] / l2tpns.h
index e962256..9520fd7 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -15,7 +15,7 @@
 #include <sys/types.h>
 #include <libcli.h>
 
 #include <sys/types.h>
 #include <libcli.h>
 
-#define VERSION        "2.2.1"
+#define VERSION        "2.2.1-2fdn3.13"
 
 // Limits
 #define MAXTUNNEL      500             // could be up to 65535
 
 // Limits
 #define MAXTUNNEL      500             // could be up to 65535
@@ -49,6 +49,7 @@
 #define MAXPLUGINS     20              // maximum number of plugins to load
 #define MAXRADSERVER   10              // max radius servers
 #define MAXROUTE       10              // max static routes per session
 #define MAXPLUGINS     20              // maximum number of plugins to load
 #define MAXRADSERVER   10              // max radius servers
 #define MAXROUTE       10              // max static routes per session
+#define MAXROUTE6      5               // max static Ipv6 routes per session
 #define MAXIPPOOL      131072          // max number of ip addresses in pool
 #define RINGBUFFER_SIZE        10000           // Number of ringbuffer entries to allocate
 #define MAX_LOG_LENGTH 512             // Maximum size of log message
 #define MAXIPPOOL      131072          // max number of ip addresses in pool
 #define RINGBUFFER_SIZE        10000           // Number of ringbuffer entries to allocate
 #define MAX_LOG_LENGTH 512             // Maximum size of log message
@@ -69,6 +70,8 @@
 // Multi bind address constants
 #define MAX_UDPFD 4
 #define MAX_BINDADDR MAX_UDPFD
 // Multi bind address constants
 #define MAX_UDPFD 4
 #define MAX_BINDADDR MAX_UDPFD
+// + 1 for the LAC Hostname
+#define MAX_NBHOSTNAME (MAX_UDPFD + 1)
 // 4 + 1 for the udplac
 #define INIT_TABUDPFD {-1, -1, -1, -1, -1}
 #define INIT_TABUDPVAR {0, 0, 0, 0, 0}
 // 4 + 1 for the udplac
 #define INIT_TABUDPFD {-1, -1, -1, -1, -1}
 #define INIT_TABUDPVAR {0, 0, 0, 0, 0}
@@ -250,6 +253,14 @@ typedef struct                     // route
 }
 routet;
 
 }
 routet;
 
+// structures
+typedef struct                 // route
+{
+       struct in6_addr ipv6route;      // Static IPv6 route
+       uint8_t ipv6prefixlen;          // IPv6 route prefix length
+}
+routet6;
+
 typedef struct controls                // control message
 {
        struct controls *next;  // next in queue
 typedef struct controls                // control message
 {
        struct controls *next;  // next in queue
@@ -327,10 +338,13 @@ typedef struct
        uint8_t walled_garden;          // is this session gardened?
        uint8_t classlen;               // class (needed for radius accounting messages)
        char class[MAXCLASS];
        uint8_t walled_garden;          // is this session gardened?
        uint8_t classlen;               // class (needed for radius accounting messages)
        char class[MAXCLASS];
-       uint8_t ipv6prefixlen;          // IPv6 route prefix length
-       struct in6_addr ipv6route;      // Static IPv6 route
        sessionidt forwardtosession;    // LNS id_session to forward
        uint8_t src_hwaddr[ETH_ALEN];   // MAC addr source (for pppoe sessions 6 bytes)
        sessionidt forwardtosession;    // LNS id_session to forward
        uint8_t src_hwaddr[ETH_ALEN];   // MAC addr source (for pppoe sessions 6 bytes)
+       uint32_t dhcpv6_prefix_iaid;    // prefix iaid requested by client
+       uint32_t dhcpv6_iana_iaid;              // iaid of iana requested by client
+       struct in6_addr ipv6address;    // Framed Ipv6 address
+       struct dhcp6_opt_clientid dhcpv6_client_id; // Size max (headers + DUID)
+       routet6 route6[MAXROUTE6];              // static IPv6 routes
        char reserved[4];               // Space to expand structure without changing HB_VERSION
 }
 sessiont;
        char reserved[4];               // Space to expand structure without changing HB_VERSION
 }
 sessiont;
@@ -592,6 +606,7 @@ struct Tstats
     uint32_t   call_processudp;
     uint32_t   call_sessionbyip;
     uint32_t   call_sessionbyipv6;
     uint32_t   call_processudp;
     uint32_t   call_sessionbyip;
     uint32_t   call_sessionbyipv6;
+    uint32_t   call_sessionbyipv6new;
     uint32_t   call_sessionbyuser;
     uint32_t   call_sendarp;
     uint32_t   call_sendipcp;
     uint32_t   call_sessionbyuser;
     uint32_t   call_sendarp;
     uint32_t   call_sendipcp;
@@ -618,6 +633,7 @@ struct Tstats
     uint32_t   call_radiussend;
     uint32_t   call_radiusretry;
     uint32_t    call_random_data;
     uint32_t   call_radiussend;
     uint32_t   call_radiusretry;
     uint32_t    call_random_data;
+    uint32_t    call_dhcpv6_process;
 #endif
 };
 
 #endif
 };
 
@@ -671,6 +687,7 @@ typedef struct
        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_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_keepalive;                  // send echoes regardless
 
        char            radiussecret[64];
        int             radius_accounting;
 
        char            radiussecret[64];
        int             radius_accounting;
@@ -696,6 +713,7 @@ typedef struct
        int             num_tbfs;                       // number of throttle buckets
 
        char            accounting_dir[128];
        int             num_tbfs;                       // number of throttle buckets
 
        char            accounting_dir[128];
+       int             account_all_origin; // Accouting all origin (LAC data + Remote LNS Data + PPPOE data)
        in_addr_t       bind_address;
        in_addr_t       peer_address;
        int             send_garp;                      // Set to true to garp for vip address on startup
        in_addr_t       bind_address;
        in_addr_t       peer_address;
        int             send_garp;                      // Set to true to garp for vip address on startup
@@ -773,14 +791,26 @@ typedef struct
        char pppoe_service_name[64];    // pppoe service name
        char pppoe_ac_name[64];
        uint8_t pppoe_hwaddr[ETH_ALEN]; // MAC addr of interface pppoe to bind
        char pppoe_service_name[64];    // pppoe service name
        char pppoe_ac_name[64];
        uint8_t pppoe_hwaddr[ETH_ALEN]; // MAC addr of interface pppoe to bind
+       int pppoe_only_equal_svc_name; // Accept only PADI with service-name equal to server
        int disable_sending_hello; // Disable l2tp sending HELLO message for Apple compatibility.
        int disable_no_spoof; // Disable no spoof (permit load balancing client --> internet)
        int nbudpfd; // number UDP file handle
        int nbmultiaddress; // number multi address to bind
        int indexlacudpfd;      // Index UDP LAC file handle (in udpfd[])
        int disable_sending_hello; // Disable l2tp sending HELLO message for Apple compatibility.
        int disable_no_spoof; // Disable no spoof (permit load balancing client --> internet)
        int nbudpfd; // number UDP file handle
        int nbmultiaddress; // number multi address to bind
        int indexlacudpfd;      // Index UDP LAC file handle (in udpfd[])
+       int nbmultihostname;    // number hostname, normally the same number as the nbudpfd
+       int no_throttle_local_IP;       // no throttle traffic from session to session
        in_addr_t bind_n_address[MAX_BINDADDR];
        in_addr_t iftun_n_address[MAX_BINDADDR];
        char bind_multi_address[256];
        in_addr_t bind_n_address[MAX_BINDADDR];
        in_addr_t iftun_n_address[MAX_BINDADDR];
        char bind_multi_address[256];
+       char multi_hostname[512];
+       char multi_n_hostname[MAX_NBHOSTNAME][MAXHOSTNAME];     // list hostname
+       struct in6_addr default_ipv6_dns1;
+       struct in6_addr default_ipv6_dns2;
+       uint32_t dhcp6_preferred_lifetime;              // preferred lifetime (see rfc3315)
+       uint32_t dhcp6_valid_lifetime;          // valid lifetime (see rfc3315)
+       uint32_t dhcp6_server_duid;             // DUID of dhcpv6 server (see rfc3315)
+       uint32_t dns6_lifetime;         // RDNSS lifetime default 1200 (see rfc6106, rfc4861) (MaxRtrAdvInterval <= Lifetime <= 2*MaxRtrAdvInterval)
+       char default_ipv6_domain_list[255];
 } configt;
 
 enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IPv4, IPv6 };
 } configt;
 
 enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IPv4, IPv6 };
@@ -924,6 +954,7 @@ void send_ipv6_ra(sessionidt s, tunnelidt t, struct in6_addr *ip);
 void route6set(sessionidt s, struct in6_addr ip, int prefixlen, int add);
 sessionidt sessionbyip(in_addr_t ip);
 sessionidt sessionbyipv6(struct in6_addr ip);
 void route6set(sessionidt s, struct in6_addr ip, int prefixlen, int add);
 sessionidt sessionbyip(in_addr_t ip);
 sessionidt sessionbyipv6(struct in6_addr ip);
+sessionidt sessionbyipv6new(struct in6_addr ip);
 sessionidt sessionbyuser(char *username);
 void increment_counter(uint32_t *counter, uint32_t *wrap, uint32_t delta);
 void random_data(uint8_t *buf, int len);
 sessionidt sessionbyuser(char *username);
 void increment_counter(uint32_t *counter, uint32_t *wrap, uint32_t delta);
 void random_data(uint8_t *buf, int len);
@@ -941,9 +972,9 @@ void processipout(uint8_t *buf, int len);
 void snoop_send_packet(uint8_t *packet, uint16_t size, in_addr_t destination, uint16_t port);
 int find_filter(char const *name, size_t len);
 int ip_filter(uint8_t *buf, int len, uint8_t filter);
 void snoop_send_packet(uint8_t *packet, uint16_t size, in_addr_t destination, uint16_t port);
 int find_filter(char const *name, size_t len);
 int ip_filter(uint8_t *buf, int len, uint8_t filter);
-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);
+int cmd_show_ipcache(struct cli_def *cli, const char *command, char **argv, int argc);
+int cmd_show_hist_idle(struct cli_def *cli, const char *command, char **argv, int argc);
+int cmd_show_hist_open(struct cli_def *cli, const char *command, char **argv, int argc);
 tunnelidt lac_new_tunnel();
 void lac_tunnelclear(tunnelidt t);
 void lac_send_SCCRQ(tunnelidt t, uint8_t * auth, unsigned int auth_len);
 tunnelidt lac_new_tunnel();
 void lac_tunnelclear(tunnelidt t);
 void lac_send_SCCRQ(tunnelidt t, uint8_t * auth, unsigned int auth_len);