Fix: last_packet no updated in cluster mode

This commit is contained in:
fendo 2012-12-20 23:44:21 +01:00
parent 5111b3ae58
commit 699dd8b571
4 changed files with 20 additions and 5 deletions

View file

@ -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 tbf.o: tbf.c l2tpns.h util.h tbf.h
util.o: util.c l2tpns.h bgp.h util.o: util.c l2tpns.h bgp.h
bgp.o: bgp.c l2tpns.h bgp.h util.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 autosnoop.so: autosnoop.c l2tpns.h plugin.h
autothrottle.so: autothrottle.c l2tpns.h plugin.h autothrottle.so: autothrottle.c l2tpns.h plugin.h
garden.so: garden.c l2tpns.h plugin.h control.h garden.so: garden.c l2tpns.h plugin.h control.h

View file

@ -8,6 +8,7 @@
#include "md5.h" #include "md5.h"
#include "l2tpns.h" #include "l2tpns.h"
#include "util.h" #include "util.h"
#include "cluster.h"
#include "l2tplac.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 // 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; uint16_t t = 0, s = 0;
uint8_t *p = buf + 2; // First word L2TP options 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; 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) if (*buf & 0x40)
{ // length { // length
p += 2; p += 2;

View file

@ -12,7 +12,7 @@ typedef uint16_t confrlnsidt;
// l2tplac.c // l2tplac.c
void lac_initremotelnsdata(); 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); int lac_conf_forwardtoremotelns(sessionidt s, char * puser);
void lac_calc_rlns_auth(tunnelidt t, uint8_t id, uint8_t *out); 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); int lac_addremotelns(char *mask, char *IP_RemoteLNS, char *Port_RemoteLNS, char *SecretRemoteLNS);

View file

@ -258,7 +258,8 @@ static clockt now(double *f)
} }
// Time in milliseconds // 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; 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); LOG(5, s, t, "Forwarding data session to session %u\n", session[s].forwardtosession);
// Forward to LAC or Remote LNS session // 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; return;
} }
#endif /* LAC */ #endif /* LAC */