add attribut >no_throttle_local_IP

This commit is contained in:
fendo 2013-11-12 21:33:42 +01:00
parent 6760f8ad5e
commit 6b70732490
3 changed files with 24 additions and 14 deletions

View file

@ -188,6 +188,7 @@ config_descriptt config_values[] = {
CONFIG("bind_multi_address", bind_multi_address, STRING), CONFIG("bind_multi_address", bind_multi_address, STRING),
CONFIG("pppoe_only_equal_svc_name", pppoe_only_equal_svc_name, BOOL), CONFIG("pppoe_only_equal_svc_name", pppoe_only_equal_svc_name, BOOL),
CONFIG("multi_hostname", multi_hostname, STRING), CONFIG("multi_hostname", multi_hostname, STRING),
CONFIG("no_throttle_local_IP", no_throttle_local_IP, BOOL),
{ NULL, 0, 0, 0 } { NULL, 0, 0, 0 }
}; };
@ -1417,7 +1418,7 @@ void processipout(uint8_t *buf, int len)
sessionidt s; sessionidt s;
sessiont *sp; sessiont *sp;
tunnelidt t; tunnelidt t;
in_addr_t ip; in_addr_t ip, ip_src;
uint8_t *data = buf; // Keep a copy of the originals. uint8_t *data = buf; // Keep a copy of the originals.
int size = len; int size = len;
@ -1450,6 +1451,7 @@ void processipout(uint8_t *buf, int len)
return; return;
} }
ip_src = *(uint32_t *)(buf + 12);
ip = *(uint32_t *)(buf + 16); ip = *(uint32_t *)(buf + 16);
if (!(s = sessionbyip(ip))) if (!(s = sessionbyip(ip)))
{ {
@ -1533,6 +1535,8 @@ void processipout(uint8_t *buf, int len)
} }
if (sp->tbf_out) if (sp->tbf_out)
{
if (!config->no_throttle_local_IP || !sessionbyip(ip_src))
{ {
// Are we throttling this session? // Are we throttling this session?
if (config->cluster_iam_master) if (config->cluster_iam_master)
@ -1541,6 +1545,7 @@ void processipout(uint8_t *buf, int len)
master_throttle_packet(sp->tbf_out, data, size); master_throttle_packet(sp->tbf_out, data, size);
return; return;
} }
}
if (sp->walled_garden && !config->cluster_iam_master) if (sp->walled_garden && !config->cluster_iam_master)
{ {

View file

@ -783,6 +783,7 @@ typedef struct
int nbmultiaddress; // number multi address to bind int nbmultiaddress; // number multi address to bind
int indexlacudpfd; // Index UDP LAC file handle (in udpfd[]) int indexlacudpfd; // Index UDP LAC file handle (in udpfd[])
int nbmultihostname; // number hostname, normally the same number as the nbudpfd int nbmultihostname; // number hostname, normally the same number as the nbudpfd
int no_throttle_local_IP; // no throttle traffic from session to session
in_addr_t bind_n_address[MAX_BINDADDR]; in_addr_t bind_n_address[MAX_BINDADDR];
in_addr_t iftun_n_address[MAX_BINDADDR]; in_addr_t iftun_n_address[MAX_BINDADDR];
char bind_multi_address[256]; char bind_multi_address[256];

6
ppp.c
View file

@ -1735,7 +1735,7 @@ static void update_sessions_in_stat(sessionidt s, uint16_t l)
// (i.e. this routine writes to p[-4]). // (i.e. this routine writes to p[-4]).
void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
{ {
in_addr_t ip; in_addr_t ip, ip_dst;
CSTAT(processipin); CSTAT(processipin);
@ -1749,6 +1749,7 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
} }
ip = ntohl(*(uint32_t *)(p + 12)); ip = ntohl(*(uint32_t *)(p + 12));
ip_dst = *(uint32_t *)(p + 16);
if (l > MAXETHER) if (l > MAXETHER)
{ {
@ -1788,6 +1789,8 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
l += 4; l += 4;
if (session[s].tbf_in) if (session[s].tbf_in)
{
if (!config->no_throttle_local_IP || !sessionbyip(ip_dst))
{ {
// Are we throttling this session? // Are we throttling this session?
if (config->cluster_iam_master) if (config->cluster_iam_master)
@ -1796,6 +1799,7 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
master_throttle_packet(session[s].tbf_in, p, l); master_throttle_packet(session[s].tbf_in, p, l);
return; return;
} }
}
// send to ethernet // send to ethernet
if (tun_write(p, l) < 0) if (tun_write(p, l) < 0)