add attribut >no_throttle_local_IP
This commit is contained in:
parent
6760f8ad5e
commit
6b70732490
3 changed files with 24 additions and 14 deletions
19
l2tpns.c
19
l2tpns.c
|
|
@ -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)))
|
||||||
{
|
{
|
||||||
|
|
@ -1534,12 +1536,15 @@ void processipout(uint8_t *buf, int len)
|
||||||
|
|
||||||
if (sp->tbf_out)
|
if (sp->tbf_out)
|
||||||
{
|
{
|
||||||
// Are we throttling this session?
|
if (!config->no_throttle_local_IP || !sessionbyip(ip_src))
|
||||||
if (config->cluster_iam_master)
|
{
|
||||||
tbf_queue_packet(sp->tbf_out, data, size);
|
// Are we throttling this session?
|
||||||
else
|
if (config->cluster_iam_master)
|
||||||
master_throttle_packet(sp->tbf_out, data, size);
|
tbf_queue_packet(sp->tbf_out, data, size);
|
||||||
return;
|
else
|
||||||
|
master_throttle_packet(sp->tbf_out, data, size);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sp->walled_garden && !config->cluster_iam_master)
|
if (sp->walled_garden && !config->cluster_iam_master)
|
||||||
|
|
|
||||||
1
l2tpns.h
1
l2tpns.h
|
|
@ -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];
|
||||||
|
|
|
||||||
18
ppp.c
18
ppp.c
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
@ -1789,12 +1790,15 @@ void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
|
||||||
|
|
||||||
if (session[s].tbf_in)
|
if (session[s].tbf_in)
|
||||||
{
|
{
|
||||||
// Are we throttling this session?
|
if (!config->no_throttle_local_IP || !sessionbyip(ip_dst))
|
||||||
if (config->cluster_iam_master)
|
{
|
||||||
tbf_queue_packet(session[s].tbf_in, p, l);
|
// Are we throttling this session?
|
||||||
else
|
if (config->cluster_iam_master)
|
||||||
master_throttle_packet(session[s].tbf_in, p, l);
|
tbf_queue_packet(session[s].tbf_in, p, l);
|
||||||
return;
|
else
|
||||||
|
master_throttle_packet(session[s].tbf_in, p, l);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// send to ethernet
|
// send to ethernet
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue