From 699dd8b571f12a639d34834e107e87c0bb6e9311 Mon Sep 17 00:00:00 2001 From: fendo Date: Thu, 20 Dec 2012 23:44:21 +0100 Subject: [PATCH] Fix: last_packet no updated in cluster mode --- Makefile | 2 +- l2tplac.c | 16 +++++++++++++++- l2tplac.h | 2 +- l2tpns.c | 5 +++-- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 36ba2e1..6af8491 100644 --- a/Makefile +++ b/Makefile @@ -129,7 +129,7 @@ radius.o: radius.c md5.h constants.h l2tpns.h plugin.h util.h cluster.h \ tbf.o: tbf.c l2tpns.h util.h tbf.h util.o: util.c l2tpns.h bgp.h bgp.o: bgp.c l2tpns.h bgp.h util.h -l2tplac.o: l2tplac.c md5.h l2tpns.h util.h l2tplac.h +l2tplac.o: l2tplac.c md5.h l2tpns.h util.h cluster.h l2tplac.h autosnoop.so: autosnoop.c l2tpns.h plugin.h autothrottle.so: autothrottle.c l2tpns.h plugin.h garden.so: garden.c l2tpns.h plugin.h control.h diff --git a/l2tplac.c b/l2tplac.c index 3851fa0..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" @@ -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; diff --git a/l2tplac.h b/l2tplac.h index 3b3f583..6177b0a 100644 --- a/l2tplac.h +++ b/l2tplac.h @@ -12,7 +12,7 @@ typedef uint16_t confrlnsidt; // l2tplac.c void lac_initremotelnsdata(); -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); int lac_conf_forwardtoremotelns(sessionidt s, char * puser); void lac_calc_rlns_auth(tunnelidt t, uint8_t id, uint8_t *out); int lac_addremotelns(char *mask, char *IP_RemoteLNS, char *Port_RemoteLNS, char *SecretRemoteLNS); diff --git a/l2tpns.c b/l2tpns.c index 9dbde7a..d9a9bd3 100644 --- a/l2tpns.c +++ b/l2tpns.c @@ -258,7 +258,8 @@ static clockt now(double *f) } // Time in milliseconds - time_now_ms = (t.tv_sec * 1000) + (t.tv_usec/1000); + // TODO FOR MLPPP DEV + //time_now_ms = (t.tv_sec * 1000) + (t.tv_usec/1000); return (t.tv_sec - basetime) * 10 + t.tv_usec / 100000 + 1; } @@ -3224,7 +3225,7 @@ void processudp(uint8_t *buf, int len, struct sockaddr_in *addr) { LOG(5, s, t, "Forwarding data session to session %u\n", session[s].forwardtosession); // Forward to LAC or Remote LNS session - lac_session_forward(buf, len, s, proto); + lac_session_forward(buf, len, s, proto, addr->sin_addr.s_addr, addr->sin_port); return; } #endif /* LAC */ -- 2.20.1