#include <signal.h>
#include <stdlib.h>
#include <netinet/in.h>
+#include <net/ethernet.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#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)
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;
int reload_config; // flag to re-read config (set by cli)
int multi_read_count; // amount of packets to read per fd in processing loop
- char tundevice[IFNAMSIZ]; // tun device name
+ char tundevicename[IFNAMSIZ]; // tun device name
char log_filename[128];
char l2tp_secret[64]; // L2TP shared secret
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
} configt;
enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IPv4, IPv6 };
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
};