X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/0834bba08ed4f1e507320306dc682d7e62371af5..699dd8b571f12a639d34834e107e87c0bb6e9311:/l2tplac.c diff --git a/l2tplac.c b/l2tplac.c index f073ecc..281bbc4 100644 --- a/l2tplac.c +++ b/l2tplac.c @@ -8,6 +8,7 @@ #include "md5.h" #include "l2tpns.h" #include "util.h" +#include "cluster.h" #include "l2tplac.h" @@ -236,7 +237,7 @@ void lac_save_rad_tag_tunnels(sessionidt s) if (pconfigrlns[idrlns].state == CONFRLNSFREE) { pconfigrlns[idrlns].ip = ptunnelrlns[idtag].tunnel_server_endpoint; - pconfigrlns[idrlns].port = L2TPPORT; //Default L2TP poart + pconfigrlns[idrlns].port = L2TPPORT; //Default L2TP port strcpy(pconfigrlns[idrlns].l2tp_secret, ptunnelrlns[idtag].tunnel_password); strcpy(pconfigrlns[idrlns].tunnel_assignment_id, ptunnelrlns[idtag].tunnel_assignment_id); @@ -444,7 +445,7 @@ void lac_calc_rlns_auth(tunnelidt t, uint8_t id, uint8_t *out) } // Forward session to LAC or Remote LNS -int lac_session_forward(uint8_t *buf, int len, sessionidt sess, uint16_t proto) +int lac_session_forward(uint8_t *buf, int len, sessionidt sess, uint16_t proto, in_addr_t s_addr, int sin_port) { uint16_t t = 0, s = 0; uint8_t *p = buf + 2; // First word L2TP options @@ -469,6 +470,19 @@ int lac_session_forward(uint8_t *buf, int len, sessionidt sess, uint16_t proto) return 0; } + if (!config->cluster_iam_master) + { + if ( (proto == PPPIPCP) || (proto == PPPLCP) || + (proto == PPPPAP) || (proto == PPPCHAP) || + (proto == PPPIPV6CP && config->ipv6_prefix.s6_addr[0]) || + (proto == PPPCCP) ) + { + session[sess].last_packet = time_now; + master_forward_packet(buf, len, s_addr, sin_port); + return 1; + } + } + if (*buf & 0x40) { // length p += 2;