#define MAXSESSION 60000 // could be up to 65535
#define MAXTBFS 6000 // Maximum token bucket filters. Might need up to 2 * session.
#define MAXSESSINGRP 12 // Maximum number of member links in grouped session
-#define MAXGRPINSESS 12 // Maximum number of member links in session group
#define MAXGROUPE 300 // could be up to 65535, Maximum number of grouped session
#define MAXROUTEINGRP 15 // max static routes per group
// Multi bind address constants
#define MAX_UDPFD 4
#define MAX_BINDADDR MAX_UDPFD
+// + 1 for the LAC Hostname
+#define MAX_NBHOSTNAME (MAX_UDPFD + 1)
// 4 + 1 for the udplac
#define INIT_TABUDPFD {-1, -1, -1, -1, -1}
#define INIT_TABUDPVAR {0, 0, 0, 0, 0}
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 coutgrp_delta;
+ char reserved[4]; // Space to expand structure without changing HB_VERSION
}
sessiont;
typedef struct
{
uint32_t tx_rate;
+ uint32_t prev_coutgrp;
sessionidt sid;
uint8_t weight;
}
-groupsessionidt;
+groupsesslistt;
typedef struct
{
+ int state; // current state (groupestate enum)
uint32_t time_changed;
groupidt prev;
sessionidt smax;
sessionidt smin;
- groupsessionidt sesslist[MAXSESSINGRP];
+ groupsesslistt sesslist[MAXSESSINGRP];
routet route[MAXROUTEINGRP]; // static routes
uint8_t nbroutesgrp;
uint8_t nbsession;
BUNDLEUNDEF, // Undefined
};
+enum
+{
+ GROUPEFREE, // Not in use
+ GROUPEOPEN, // Active bundle
+ GROUPEUNDEF // Undefined
+};
+
enum
{
NULLCLASS = 0, //End Point Discriminator classes
int num_tbfs; // number of throttle buckets
char accounting_dir[128];
+ int account_all_origin; // Accouting all origin (LAC data + Remote LNS Data + PPPOE data)
in_addr_t bind_address;
in_addr_t peer_address;
int send_garp; // Set to true to garp for vip address on startup
int cluster_undefined_sessions; // How many sessions we're yet to receive from the master.
int cluster_undefined_bundles; // How many bundles we're yet to receive from the master.
int cluster_undefined_tunnels; // How many tunnels we're yet to receive from the master.
+ int cluster_undefined_groupes; // How many groupes we're yet to receive from the master.
int cluster_highest_sessionid;
int cluster_highest_bundleid;
+ int cluster_highest_groupeid;
int cluster_highest_tunnelid;
clockt cluster_last_hb; // Last time we saw a heartbeat from the master.
int cluster_last_hb_ver; // Heartbeat version last seen from master
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 pppoe_only_equal_svc_name; // Accept only PADI with service-name equal to server
int disable_sending_hello; // Disable l2tp sending HELLO message for Apple compatibility.
int disable_no_spoof; // Disable no spoof (permit load balancing client --> internet)
int nbudpfd; // number UDP file handle
int nbmultiaddress; // number multi address to bind
int indexlacudpfd; // Index UDP LAC file handle (in udpfd[])
+ int nbmultihostname; // number hostname, normally the same number as the nbudpfd
+ int grp_txrate_average_time; // caculation txrate average time (default 10s)
in_addr_t bind_n_address[MAX_BINDADDR];
in_addr_t iftun_n_address[MAX_BINDADDR];
char bind_multi_address[256];
- int grp_txrate_average_time; // caculation txrate average time (default 10s)
+ char multi_hostname[512];
+ char multi_n_hostname[MAX_NBHOSTNAME][MAXHOSTNAME]; // list hostname
} configt;
enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IPv4, IPv6 };
void grp_setgrouproute(groupidt g, int add);
void grp_time_changed(void);
void grp_removesession(groupidt g, sessionidt s);
+int grp_cluster_load_groupe(groupidt g, groupsesst *new);
#undef LOG
#undef LOG_HEX
extern sessionlocalt *sess_local;
extern ippoolt *ip_address_pool;
extern groupsesst *grpsession;
-groupidt gnextgrpid;
+extern groupidt gnextgrpid;
#define sessionfree (session[0].next)