#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
{
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;
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
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 };
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);