GIT.Harvie.CZ
/
svn
/
Prometheus-QoS
/
.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
there seems to be hardcoded maximum limit 10000 packets/sec in iptables
[svn/Prometheus-QoS/.git]
/
prometheus.c
diff --git
a/prometheus.c
b/prometheus.c
index 70b0953b5da168e415953e3ca0a418fabdbb37bf..279da9b75d28b4fd245b28ed4e6165eaae86fc91 100644
(file)
--- a/
prometheus.c
+++ b/
prometheus.c
@@
-7,7
+7,7
@@
/* Credit: CZFree.Net,Martin Devera,Netdave,Aquarius,Gandalf */
\r
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
\r
\r
/* Credit: CZFree.Net,Martin Devera,Netdave,Aquarius,Gandalf */
\r
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
\r
\r
-/* Modified by: xChaos, 2013
0124
\r
+/* Modified by: xChaos, 2013
1118
\r
ludva, 20080415
\r
\r
Prometheus QoS is free software; you can redistribute it and/or
\r
ludva, 20080415
\r
\r
Prometheus QoS is free software; you can redistribute it and/or
\r
@@
-29,7
+29,7
@@
#include "cll1-0.6.2.h"
\r
#include "ipstruct.h"
\r
\r
#include "cll1-0.6.2.h"
\r
#include "ipstruct.h"
\r
\r
-const char *version = "0.8.3-
i
";
\r
+const char *version = "0.8.3-
j
";
\r
\r
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
\r
/* Versions: 0.8.3 is development release, 0.8.4 will be "stable" */
\r
\r
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
\r
/* Versions: 0.8.3 is development release, 0.8.4 will be "stable" */
\r
@@
-118,10
+118,6
@@
int magic_treshold = 8; /* reduce ceil by X*magic_treshhold kbps (hard shapi
int keywordcount = 0;
\r
int class_count = 0;
\r
int ip_count = 0;
\r
int keywordcount = 0;
\r
int class_count = 0;
\r
int ip_count = 0;
\r
-/* not yet implemented:
\r
-int fixed_packets = 0; maximum number of pps per IP address (not class!)
\r
-int packet_limit = 5; maximum number of pps to htn CEIL, not rate !!!
\r
-*/
\r
FILE *log_file = NULL;
\r
char *kwd = "via-prometheus"; /* /etc/hosts comment, eg. #qos-64-128 */
\r
\r
FILE *log_file = NULL;
\r
char *kwd = "via-prometheus"; /* /etc/hosts comment, eg. #qos-64-128 */
\r
\r
@@
-132,7
+128,7
@@
const int idxtable_treshold2 = 12; /* this is no longer configurable */
const int idxtable_bitmask1 = 3; /* this is no longer configurable */
\r
const int idxtable_bitmask2 = 3; /* this is no longer configurable */
\r
\r
const int idxtable_bitmask1 = 3; /* this is no longer configurable */
\r
const int idxtable_bitmask2 = 3; /* this is no longer configurable */
\r
\r
-struct IP *ips = NULL, *ip, *sharedip;
\r
+struct IP *ips = NULL, *
networks = NULL, *
ip, *sharedip;
\r
struct Group *groups = NULL, *group;
\r
struct Keyword *keyword, *defaultkeyword=NULL, *keywords=NULL;
\r
\r
struct Group *groups = NULL, *group;
\r
struct Keyword *keyword, *defaultkeyword=NULL, *keywords=NULL;
\r
\r
@@
-154,6
+150,10
@@
void write_json_traffic(char *json);
void write_htmlandlogs(char *html, char *d, int total, int just_preview);
\r
/* implemented in htmlandlogs.c */
\r
\r
void write_htmlandlogs(char *html, char *d, int total, int just_preview);
\r
/* implemented in htmlandlogs.c */
\r
\r
+void analyse_topology(char *traceroute);
\r
+/* implemented in networks.c */
\r
+
\r
+
\r
const char *tr_odd_even(void)
\r
{
\r
row_odd_even = 1 - row_odd_even;
\r
const char *tr_odd_even(void)
\r
{
\r
row_odd_even = 1 - row_odd_even;
\r
@@
-337,10
+337,10
@@
void get_config(char *config_filename)
/* leaf discipline for keywords */
\r
for_each(keyword,keywords)
\r
{
\r
/* leaf discipline for keywords */
\r
for_each(keyword,keywords)
\r
{
\r
-
if(!strcmpi(keyword->leaf_discipline, ""))
\r
-
{
\r
-
keyword->leaf_discipline = qos_leaf;
\r
-
}
\r
+ if(!strcmpi(keyword->leaf_discipline, ""))
\r
+ {
\r
+ keyword->leaf_discipline = qos_leaf;
\r
+ }
\r
}
\r
\r
if(strcmpi(cnf, "mark"))
\r
}
\r
\r
if(strcmpi(cnf, "mark"))
\r
@@
-465,14
+465,16
@@
program
int i=0; /* just plain old Fortran style integer :-) */
\r
FILE *f=NULL; /* everything is just stream of bytes... */
\r
char *str, *ptr, *d; /* LET A$=B$ :-) */
\r
int i=0; /* just plain old Fortran style integer :-) */
\r
FILE *f=NULL; /* everything is just stream of bytes... */
\r
char *str, *ptr, *d; /* LET A$=B$ :-) */
\r
- char *substring;
\r
+ char *substring
, *limit_pkts
;
\r
\r
int parent = 1;
\r
\r
int parent = 1;
\r
+ int just_networks = FALSE;
\r
int just_flush = FALSE; /* deactivates all previous actions */
\r
int nodelay = FALSE;
\r
int just_preview = FALSE; /* preview - generate just stats */
\r
int start_shaping = FALSE; /* apply FUP - requires classmap file */
\r
int just_flush = FALSE; /* deactivates all previous actions */
\r
int nodelay = FALSE;
\r
int just_preview = FALSE; /* preview - generate just stats */
\r
int start_shaping = FALSE; /* apply FUP - requires classmap file */
\r
- int stop_shaping = FALSE; /* apply FUP - requires classmap file */
\r
+ int stop_shaping = FALSE; /* lift FUP - requires classmap file */
\r
+ int reduce_ceil = 0; /* allow only rate+(ceil-rate)/2, /4, etc. */
\r
int just_logs = FALSE; /* just parse logs */
\r
int run = FALSE;
\r
int total = 0;
\r
int just_logs = FALSE; /* just parse logs */
\r
int run = FALSE;
\r
int total = 0;
\r
@@
-496,9
+498,12
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
argument("-9") { run=TRUE; just_flush=9; }
\r
argument("-p") { run=TRUE; just_preview=TRUE; }
\r
argument("-q") { run=TRUE; just_preview=TRUE; stop_shaping=TRUE; }
\r
argument("-9") { run=TRUE; just_flush=9; }
\r
argument("-p") { run=TRUE; just_preview=TRUE; }
\r
argument("-q") { run=TRUE; just_preview=TRUE; stop_shaping=TRUE; }
\r
+ argument("-2") { run=TRUE; just_preview=TRUE; reduce_ceil=2; }
\r
+ argument("-4") { run=TRUE; just_preview=TRUE; reduce_ceil=4; }
\r
argument("-s") { run=TRUE; just_preview=TRUE; start_shaping=TRUE; }
\r
argument("-r") { run=TRUE; }
\r
argument("-n") { run=TRUE; nodelay=TRUE; }
\r
argument("-s") { run=TRUE; just_preview=TRUE; start_shaping=TRUE; }
\r
argument("-r") { run=TRUE; }
\r
argument("-n") { run=TRUE; nodelay=TRUE; }
\r
+ argument("-a") { run=TRUE; just_networks=TRUE; }
\r
argument("-l") { just_logs=TRUE; }
\r
argument("-m") { just_logs=TRUE; }
\r
argument("-y") { just_logs=TRUE; }
\r
argument("-l") { just_logs=TRUE; }
\r
argument("-m") { just_logs=TRUE; }
\r
argument("-y") { just_logs=TRUE; }
\r
@@
-533,7
+538,7
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
\r
if(althosts)
\r
{
\r
\r
if(althosts)
\r
{
\r
- hosts
=
althosts;
\r
+ hosts
=
althosts;
\r
}
\r
\r
if(just_flush<9)
\r
}
\r
\r
if(just_flush<9)
\r
@@
-552,26
+557,33
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
}
\r
\r
/*-----------------------------------------------------------------*/
\r
}
\r
\r
/*-----------------------------------------------------------------*/
\r
- printf("Parsing class defintion file %s ...\n", hosts);
\r
+ /* cll1.h - let's allocate brand new character buffer... */
\r
/*-----------------------------------------------------------------*/
\r
/*-----------------------------------------------------------------*/
\r
- parse_hosts(hosts);
\r
+ string(str, STRLEN);
\r
+ string(limit_pkts, STRLEN);
\r
\r
/*-----------------------------------------------------------------*/
\r
\r
/*-----------------------------------------------------------------*/
\r
- /* cll1.h - let's allocate brand new character buffer... */
\r
+ printf("Parsing class defintion file %s ...\n", hosts);
\r
/*-----------------------------------------------------------------*/
\r
/*-----------------------------------------------------------------*/
\r
- string(str,STRLEN);
\r
+ parse_hosts(hosts);
\r
+ if(just_networks)
\r
+ {
\r
+ analyse_topology("/usr/sbin/traceroute -n -m 10 -w 2 %s.%d");
\r
+ exit(-1);
\r
+ }
\r
\r
/*-----------------------------------------------------------------*/
\r
puts("Resolving shared connections ...");
\r
/*-----------------------------------------------------------------*/
\r
\r
/*-----------------------------------------------------------------*/
\r
puts("Resolving shared connections ...");
\r
/*-----------------------------------------------------------------*/
\r
- for_each(ip,ips) if(ip->sharing)
\r
+ for_each(ip,
ips) if(ip->sharing)
\r
{
\r
{
\r
- for_each(sharedip,ips) if(eq(sharedip->name, ip->sharing))
\r
+ for_each(sharedip,
ips) if(eq(sharedip->name, ip->sharing))
\r
{
\r
sharedip->traffic += ip->traffic;
\r
ip->traffic = 0;
\r
ip->mark = sharedip->mark;
\r
ip->lmsid = sharedip->lmsid;
\r
{
\r
sharedip->traffic += ip->traffic;
\r
ip->traffic = 0;
\r
ip->mark = sharedip->mark;
\r
ip->lmsid = sharedip->lmsid;
\r
+ ip->pps_limit = sharedip->pps_limit; /* no other way to do this */
\r
break;
\r
}
\r
if(not sharedip)
\r
break;
\r
}
\r
if(not sharedip)
\r
@@
-979,7
+991,7
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
\r
if(just_preview)
\r
{
\r
\r
if(just_preview)
\r
{
\r
- if(start_shaping || stop_shaping)
\r
+ if(start_shaping || stop_shaping
|| reduce_ceil
)
\r
{
\r
printf("Reading %s and applying Fair Use Policy rules ... \n", classmap);
\r
parse(classmap)
\r
{
\r
printf("Reading %s and applying Fair Use Policy rules ... \n", classmap);
\r
parse(classmap)
\r
@@
-992,7
+1004,7
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
if_exists(ip,ips,eq(ip->addr,_))
\r
{
\r
ip->mark=atoi(ptr);
\r
if_exists(ip,ips,eq(ip->addr,_))
\r
{
\r
ip->mark=atoi(ptr);
\r
- if(ip->max < ip->desired || stop_shaping) /* apply or disable FUP limit immediately.... */
\r
+ if(ip->max < ip->desired || stop_shaping
|| reduce_ceil
) /* apply or disable FUP limit immediately.... */
\r
{
\r
if(stop_shaping)
\r
{
\r
{
\r
if(stop_shaping)
\r
{
\r
@@
-1001,7
+1013,11
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
}
\r
else
\r
{
\r
}
\r
else
\r
{
\r
- printf("Applying limit for %-22s %-16s %04d ", ip->name, ip->addr, ip->mark);
\r
+ printf("Applying limit for %-22s %-16s %04d ", ip->name, ip->addr, ip->mark);
\r
+ if(reduce_ceil)
\r
+ {
\r
+ ip->max = ip->min + (ip->desired-ip->min)/reduce_ceil;
\r
+ }
\r
}
\r
printf("(down: %dk-%dk ", ip->min, ip->max);
\r
sprintf(str, "%s class change dev %s parent 1:%d classid 1:%d htb rate %dkbit ceil %dkbit burst %dk prio %d",
\r
}
\r
printf("(down: %dk-%dk ", ip->min, ip->max);
\r
sprintf(str, "%s class change dev %s parent 1:%d classid 1:%d htb rate %dkbit ceil %dkbit burst %dk prio %d",
\r
@@
-1051,6
+1067,10
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
{
\r
swchar='s';
\r
}
\r
{
\r
swchar='s';
\r
}
\r
+ else if(reduce_ceil)
\r
+ {
\r
+ swchar='0'+reduce_ceil; /* -2, -4 */
\r
+ }
\r
else if(stop_shaping)
\r
{
\r
swchar='q';
\r
else if(stop_shaping)
\r
{
\r
swchar='q';
\r
@@
-1107,26
+1127,36
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
chain_postrouting="POSTROUTING";
\r
}
\r
\r
chain_postrouting="POSTROUTING";
\r
}
\r
\r
+ /* packet limits - this will be optional in future, hardcoded for now */
\r
+ if(ip->pps_limit)
\r
+ {
\r
+ sprintf(limit_pkts, "-m limit --limit %d/s ", ip->pps_limit);
\r
+ }
\r
+ else
\r
+ {
\r
+ *limit_pkts = 0;
\r
+ }
\r
+
\r
#ifdef DEBUG
\r
#ifdef DEBUG
\r
- printf("%-22s %-16s %04d
", ip->name, ip->addr, ip->mark
);
\r
+ printf("%-22s %-16s %04d
%d/s\n", ip->name, ip->addr, ip->mark, ip->pps_limit
);
\r
#endif
\r
\r
#endif
\r
\r
- /* -------------------------------------------------------- mark download */
\r
-
\r
+ /* -------------------------------------------------------- mark download */
\r
sprintf(str, "-A %s -d %s/%d -o %s -j %s%d",
\r
sprintf(str, "-A %s -d %s/%d -o %s -j %s%d",
\r
- chain_postrouting, ip->addr, 32*(1+ip->v6),
lan, mark_iptables, ip->mark);
\r
- /* -m limit --limit 1/s */
\r
+ chain_postrouting, ip->addr, 32*(1+ip->v6),
\r
+ lan, mark_iptables, ip->mark);
\r
iptables_save_line(str, ip->v6);
\r
\r
if(qos_proxy)
\r
{
\r
sprintf(str, "-A %s -s %s -p tcp --sport %d -d %s/%d -o %s -j %s%d",
\r
iptables_save_line(str, ip->v6);
\r
\r
if(qos_proxy)
\r
{
\r
sprintf(str, "-A %s -s %s -p tcp --sport %d -d %s/%d -o %s -j %s%d",
\r
- chain_postrouting, proxy_ip, proxy_port, ip->addr, 32*(1+ip->v6), lan, mark_iptables, ip->mark);
\r
+ chain_postrouting, proxy_ip, proxy_port, ip->addr,
\r
+ 32*(1+ip->v6), lan, mark_iptables, ip->mark);
\r
iptables_save_line(str, ip->v6);
\r
}
\r
\r
iptables_save_line(str, ip->v6);
\r
}
\r
\r
- sprintf(str, "-A %s -d %s/%d -o %s -j ACCEPT",
\r
- chain_postrouting, ip->addr, 32*(1+ip->v6), lan);
\r
+ sprintf(str, "-A %s -d %s/%d -o %s
%s
-j ACCEPT",
\r
+ chain_postrouting, ip->addr, 32*(1+ip->v6), lan
, limit_pkts
);
\r
iptables_save_line(str, ip->v6);
\r
\r
/* -------------------------------------------------------- mark upload */
\r
iptables_save_line(str, ip->v6);
\r
\r
/* -------------------------------------------------------- mark upload */
\r
@@
-1134,8
+1164,8
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
chain_forward, ip->addr, 32*(1+ip->v6), wan, mark_iptables, ip->mark);
\r
iptables_save_line(str, ip->v6);
\r
\r
chain_forward, ip->addr, 32*(1+ip->v6), wan, mark_iptables, ip->mark);
\r
iptables_save_line(str, ip->v6);
\r
\r
- sprintf(str, "-A %s -s %s/%d -o %s -j ACCEPT",
\r
- chain_forward, ip->addr, 32*(1+ip->v6), wan);
\r
+ sprintf(str, "-A %s -s %s/%d -o %s
%s
-j ACCEPT",
\r
+ chain_forward, ip->addr, 32*(1+ip->v6), wan
, limit_pkts
);
\r
iptables_save_line(str, ip->v6);
\r
\r
if(ip->min)
\r
iptables_save_line(str, ip->v6);
\r
\r
if(ip->min)
\r
@@
-1146,7
+1176,7
@@
Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
#endif
\r
\r
sprintf(str, "%s class add dev %s parent 1:%d classid 1:%d htb rate %dkbit ceil %dkbit burst %dk prio %d",
\r
#endif
\r
\r
sprintf(str, "%s class add dev %s parent 1:%d classid 1:%d htb rate %dkbit ceil %dkbit burst %dk prio %d",
\r
- tc, lan, ip->group, ip->mark,
ip->min,
ip->max, burst, ip->prio);
\r
+ tc, lan, ip->group, ip->mark,
ip->min,
ip->max, burst, ip->prio);
\r
safe_run(str);
\r
\r
if(strcmpi(ip->keyword->leaf_discipline, "none"))
\r
safe_run(str);
\r
\r
if(strcmpi(ip->keyword->leaf_discipline, "none"))
\r
This page took
0.191822 seconds
and
4
git commands to generate.