Merge from Master
[l2tpns.git] / l2tpns.h
index 94784d2..a5a89f4 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -52,6 +52,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
@@ -256,6 +257,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
@@ -333,14 +342,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)
        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)
        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;
@@ -638,6 +646,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;
@@ -986,6 +995,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);