From: fendo Date: Tue, 12 Nov 2013 21:38:40 +0000 (+0100) Subject: Merge from master X-Git-Tag: 2.2.1-2sames3.14~1 X-Git-Url: http://git.sameswireless.fr/l2tpns.git/commitdiff_plain/dac7fe82bb8d933fb3a68cb9c0256dac6f4470ae?hp=30b561eb71683b52894abacf0a607d7d6932e4c1 Merge from master --- diff --git a/l2tpns.c b/l2tpns.c index 867730b..605cd2c 100644 --- a/l2tpns.c +++ b/l2tpns.c @@ -186,6 +186,7 @@ config_descriptt config_values[] = { CONFIG("grp_txrate_average_time", grp_txrate_average_time, INT), CONFIG("pppoe_only_equal_svc_name", pppoe_only_equal_svc_name, BOOL), CONFIG("multi_hostname", multi_hostname, STRING), + CONFIG("no_throttle_local_IP", no_throttle_local_IP, BOOL), { NULL, 0, 0, 0 } }; @@ -1557,12 +1558,15 @@ void processipout(uint8_t *buf, int len) if (sp->tbf_out) { - // Are we throttling this session? - if (config->cluster_iam_master) - tbf_queue_packet(sp->tbf_out, data, size); - else - master_throttle_packet(sp->tbf_out, data, size); - return; + if (!config->no_throttle_local_IP || !sessionbyip(ip_src)) + { + // Are we throttling this session? + if (config->cluster_iam_master) + tbf_queue_packet(sp->tbf_out, data, size); + else + master_throttle_packet(sp->tbf_out, data, size); + return; + } } if (sp->walled_garden && !config->cluster_iam_master) diff --git a/l2tpns.h b/l2tpns.h index d28f3e7..7dbf5b4 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -826,6 +826,7 @@ typedef struct 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) + int no_throttle_local_IP; // no throttle traffic from session to session in_addr_t bind_n_address[MAX_BINDADDR]; in_addr_t iftun_n_address[MAX_BINDADDR]; char bind_multi_address[256]; diff --git a/ppp.c b/ppp.c index 93e360e..0ffacd3 100644 --- a/ppp.c +++ b/ppp.c @@ -1738,7 +1738,7 @@ static void update_sessions_in_stat(sessionidt s, uint16_t l) // (i.e. this routine writes to p[-4]). void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) { - in_addr_t ip; + in_addr_t ip, ip_dst; CSTAT(processipin); @@ -1752,6 +1752,7 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) } ip = ntohl(*(uint32_t *)(p + 12)); + ip_dst = *(uint32_t *)(p + 16); if (l > MAXETHER) { @@ -1792,12 +1793,15 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) if (session[s].tbf_in) { - // Are we throttling this session? - if (config->cluster_iam_master) - tbf_queue_packet(session[s].tbf_in, p, l); - else - master_throttle_packet(session[s].tbf_in, p, l); - return; + if (!config->no_throttle_local_IP || !sessionbyip(ip_dst)) + { + // Are we throttling this session? + if (config->cluster_iam_master) + tbf_queue_packet(session[s].tbf_in, p, l); + else + master_throttle_packet(session[s].tbf_in, p, l); + return; + } } // send to ethernet