X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/f9243ffec5567b4ee24d349fb3866cc111e0c9a7..ec4f5a95de78fd6dea23e8a20ace3144e4e3eea6:/l2tpns.h?ds=sidebyside diff --git a/l2tpns.h b/l2tpns.h index ba9a56f..092c683 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,9 @@ #define MAXSESSION 60000 // could be up to 65535 #define MAXTBFS 6000 // Maximum token bucket filters. Might need up to 2 * session. +// Tunnel Id reserved for pppoe +#define TUNNEL_ID_PPPOE 1 + #define RADIUS_SHIFT 6 #define RADIUS_FDS (1 << RADIUS_SHIFT) #define RADIUS_MASK ((1 << RADIUS_SHIFT) - 1) @@ -60,7 +64,7 @@ #define MAXFRAGLEN 1496 // Maximum length for Multilink fragment (The multilink may contain only one link) #define MAXFRAGNUM 512 // Maximum number of Multilink fragment in a bundle (must be in the form of 2^X) // it's not expected to have a space for more than 10 unassembled packets = 10 * MAXBUNDLESES -#define MAXFRAGNUM_MASK 511 // Must be equal to MAXFRAGNUM-1 +#define MAXFRAGNUM_MASK (MAXFRAGNUM - 1) // Must be equal to MAXFRAGNUM-1 // Constants #ifndef ETCDIR @@ -243,10 +247,7 @@ typedef struct controls // control message { struct controls *next; // next in queue uint16_t length; // length - union { - uint8_t buf[MAXCONTROL]; - uint16_t buf16[MAXCONTROL/2]; - } __attribute__ ((__transparent_union__)); + uint8_t buf[MAXCONTROL]; } controlt; @@ -323,9 +324,11 @@ typedef struct struct in6_addr ipv6route; // Static IPv6 route #ifdef LAC sessionidt forwardtosession; // LNS id_session to forward - char reserved[10]; // Space to expand structure without changing HB_VERSION + uint8_t src_hwaddr[ETH_ALEN]; // MAC addr source (for pppoe sessions 6 bytes) + char reserved[4]; // Space to expand structure without changing HB_VERSION #else - char reserved[12]; // Space to expand structure without changing HB_VERSION + uint8_t src_hwaddr[ETH_ALEN]; // MAC addr source (for pppoe sessions 6 bytes) + char reserved[6]; // Space to expand structure without changing HB_VERSION #endif } sessiont; @@ -350,9 +353,9 @@ bundlet; typedef struct { - fragmentt fragment[MAXFRAGNUM]; - uint8_t reassembled_frame[MAXETHER]; // The reassembled frame - uint16_t re_frame_len; // The reassembled frame length + fragmentt fragment[MAXFRAGNUM]; + uint8_t reassembled_frame[MAXETHER]; // The reassembled frame + uint16_t re_frame_len; // The reassembled frame length uint16_t re_frame_begin_index, re_frame_end_index; // reassembled frame begin index, end index respectively uint16_t start_index, end_index; // start and end sequence numbers available on the fragments array respectively uint32_t M; // Minumum frame sequence number received over all bundle members @@ -764,10 +767,17 @@ typedef struct in_addr_t iftun_address; #ifdef LAC int disable_lac_func; + int auth_tunnel_change_addr_src; int highest_rlnsid; uint16_t bind_portremotelns; in_addr_t bind_address_remotelns; #endif + char pppoe_if_to_bind[IFNAMSIZ]; // Name pppoe interface 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 disable_sending_hello; // Disable l2tp sending HELLO message for Apple compatibility. + int disable_no_spoof; // Disable no spoof (permit load balancing client --> internet) } configt; enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IPv4, IPv6 }; @@ -887,6 +897,7 @@ 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, uint8_t prio, bundleidt bid, uint8_t mp_bits); +uint8_t *opt_makeppp(uint8_t *p, int l, sessionidt s, tunnelidt t, uint16_t mtype, uint8_t prio, bundleidt bid, uint8_t mp_bits); void sendlcp(sessionidt s, tunnelidt t); void send_ipin(sessionidt s, uint8_t *buf, int len); void sendccp(sessionidt s, tunnelidt t); @@ -989,18 +1000,20 @@ extern int epollfd; struct event_data { enum { - FD_TYPE_CLI, - FD_TYPE_CLUSTER, - FD_TYPE_TUN, - FD_TYPE_UDP, - FD_TYPE_CONTROL, - FD_TYPE_DAE, + FD_TYPE_CLI, + FD_TYPE_CLUSTER, + FD_TYPE_TUN, + FD_TYPE_UDP, + FD_TYPE_CONTROL, + FD_TYPE_DAE, FD_TYPE_RADIUS, FD_TYPE_BGP, FD_TYPE_NETLINK, #ifdef LAC FD_TYPE_UDPLAC, #endif + FD_TYPE_PPPOEDISC, + FD_TYPE_PPPOESESS } type; int index; // for RADIUS, BGP };