make MRU configurable, NAK config requests for larger values
[l2tpns.git] / l2tpns.h
index bc623ee..e60ed4a 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.81 2005/07/31 10:04:10 bodea Exp $
+// $Id: l2tpns.h,v 1.90 2005/09/15 09:34:49 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -15,7 +15,7 @@
 #include <sys/types.h>
 #include <libcli.h>
 
-#define VERSION        "2.1.2"
+#define VERSION        "2.1.7"
 
 // Limits
 #define MAXTUNNEL      500             // could be up to 65535
@@ -31,7 +31,8 @@
 #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        MAXETHER        (1500+18)       // max packet we try sending to tun
+#define MAXMRU         1500            // max MRU as defined by RFC1661
+#define        MAXETHER        (MAXMRU+18)     // max packet we try sending to tun
 #define        MAXTEL          96              // telephone number
 #define MAXUSER                128             // username
 #define MAXPASS                128             // password
@@ -286,6 +287,9 @@ typedef struct
                int nak_sent;
        } lcp, ipcp, ipv6cp, ccp;
 
+       // identifier for Protocol-Reject, Code-Reject
+       uint8_t lcp_ident;
+
        // authentication to use
        int lcp_authtype;
 
@@ -515,6 +519,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_mru;                        // MRU to advertise
 
        char            radiussecret[64];
        int             radius_accounting;
@@ -570,6 +575,7 @@ typedef struct
        int             cluster_last_hb_ver;            // Heartbeat version last seen from master
        int             cluster_num_changes;            // Number of changes queued.
 
+       int             cluster_mcast_ttl;              // TTL for multicast packets
        int             cluster_hb_interval;            // How often to send a heartbeat.
        int             cluster_hb_timeout;             // How many missed heartbeats trigger an election.
        uint64_t        cluster_table_version;          // # state changes processed by cluster
@@ -658,20 +664,20 @@ void sendarp(int ifr_idx, const unsigned char* mac, in_addr_t ip);
 
 
 // ppp.c
-void processpap(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void processchap(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void lcp_open(tunnelidt t, sessionidt s);
-void processlcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void processipcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void processipv6cp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void processipin(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void processipv6in(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void processccp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l);
-void sendchap(tunnelidt t, sessionidt s);
-uint8_t *makeppp(uint8_t *b, int size, uint8_t *p, int l, tunnelidt t, sessionidt s, uint16_t mtype);
-void sendlcp(tunnelidt t, sessionidt s, int authtype);
+void processpap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void processchap(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void lcp_open(sessionidt s, tunnelidt t);
+void processlcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void processipv6cp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void processipv6in(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void processccp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l);
+void sendchap(sessionidt s, tunnelidt t);
+uint8_t *makeppp(uint8_t *b, int size, uint8_t *p, int l, sessionidt s, tunnelidt t, uint16_t mtype);
+void sendlcp(sessionidt s, tunnelidt t);
 void send_ipin(sessionidt s, uint8_t *buf, int len);
-void sendccp(tunnelidt t, sessionidt s);
+void sendccp(sessionidt s, tunnelidt t);
 
 
 // radius.c
@@ -686,7 +692,7 @@ void processdae(uint8_t *buf, int len, struct sockaddr_in *addr, int alen);
 
 // l2tpns.c
 clockt backoff(uint8_t try);
-void send_ipv6_ra(tunnelidt t, sessionidt s, struct in6_addr *ip);
+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);
@@ -698,8 +704,8 @@ void sessionshutdown(sessionidt s, char *reason, int result, int error);
 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);
-void sendipcp(tunnelidt t, sessionidt s);
-void sendipv6cp(tunnelidt t, sessionidt s);
+void sendipcp(sessionidt s, tunnelidt t);
+void sendipv6cp(sessionidt s, tunnelidt t);
 void processudp(uint8_t *buf, int len, struct sockaddr_in *addr);
 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);
@@ -716,7 +722,7 @@ int cmd_show_hist_open(struct cli_def *cli, char *command, char **argv, int argc
 void _log(int level, sessionidt s, tunnelidt t, const char *format, ...) __attribute__((format (printf, 4, 5)));
 void _log_hex(int level, const char *title, const uint8_t *data, int maxsize);
 
-int sessionsetup(tunnelidt t, sessionidt s);
+int sessionsetup(sessionidt s, tunnelidt t);
 int run_plugins(int plugin_type, void *data);
 void rebuild_address_pool(void);
 void throttle_session(sessionidt s, int rate_in, int rate_out);