X-Git-Url: https://git.harvie.cz/?a=blobdiff_plain;f=prometheus.c;h=282e0db069f0d2c2a60ab29db60fc985d7244802;hb=ab85aff7bf367a49bb28e3e2be0abfbc7c7a0363;hp=19f25ef37577a75fcc7f807d86bb2a9a5aeafa23;hpb=85baf101e98440f1e0182f802f0419aa92308e19;p=svn%2FPrometheus-QoS%2F.git diff --git a/prometheus.c b/prometheus.c index 19f25ef..282e0db 100644 --- a/prometheus.c +++ b/prometheus.c @@ -3,11 +3,11 @@ /* === Prometheus QoS - you can "steal fire" from your ISP === */ /* === "fair-per-IP" quality of service (QoS) utility === */ /* === requires Linux 2.4.x or 2.6.x with HTB support === */ -/* === Copyright(C) 2005-2007 Michael Polak (xChaos) === */ +/* === Copyright(C) 2005-2008 Michael Polak (xChaos) === */ /* === Credits: CZFree.Net, Martin Devera, Netdave, Aquarius === */ /* ============================================================= */ -/* Modified: xChaos, 20070502 +/* Modified: xChaos, 20080119 ludva, 20071227 Prometheus QoS is free software; you can redistribute it and/or @@ -20,9 +20,11 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with the Linux kernel source code; if not, write to - Michael Polak, Svojsikova 7, 169 00 Praha 6 Czech Republic */ + You should have received a copy of the GNU General Public License + along with Prometheus Qos; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + GNU General Public License is located in file COPYING */ #define STRLEN 256 #define FIRSTGROUPID 1024 @@ -31,7 +33,7 @@ #include "cll1.h" -const char *version="0.8.0"; +const char *version="0.7.7-1"; /*0.7.9 will be last development, 0.8.0 first stable */ /* ======= Help screen is hopefuly self-documenting part of code :-) ======= */ @@ -57,12 +59,12 @@ int filter_type=1; /*1 mark, 2 classify*/ char *mark="MARK"; char *mark_iptables="MARK --set-mark "; int dry_run=0; /* preview - use puts() instead of system() */ -char *config="/etc/prometheus.conf"; /* main configuration file */ -char *hosts="/etc/hosts"; /* line bandwidth definition file */ +char *config="/etc/prometheus/prometheus.conf"; /* main configuration file */ +char *hosts="/etc/prometheus/hosts"; /* line bandwidth definition file */ char *tc="/sbin/tc"; /* requires tc with HTB support */ -char *iptables="/usr/sbin/iptables"; /* requires iptables utility */ -char *iptablessave="/usr/sbin/iptables-save"; /* new */ -char *iptablesrestore="/usr/sbin/iptables-restore"; /* new */ +char *iptables="/sbin/iptables"; /* requires iptables utility */ +char *iptablessave="/sbin/iptables-save"; /* new */ +char *iptablesrestore="/sbin/iptables-restore"; /* new */ char *iptablesfile="/var/spool/prometheus.iptables"; /* new; file for iptables-restore*/ char *iptablespreamble="*mangle\n:PREROUTING ACCEPT [0:0]\n:POSTROUTING ACCEPT [0:0]\n:INPUT ACCEPT [0:0]\n:OUTPUT ACCEPT [0:0]\n:FORWARD ACCEPT [0:0]"; FILE *iptables_file=NULL; @@ -72,7 +74,7 @@ char *cmdlog="/var/log/prometheus"; /* command log filename */ char *credit="/var/run/prometheus.credit"; /* credit log file */ int enable_credit=1; /* enable credit file */ int use_credit=0; /* use credit file (if enabled)*/ -char *log_dir="/var/www/html/logs/"; /* log directory pathname */ +char *log_dir="/var/www/logs/"; /* log directory pathname */ char *log_url="logs/"; /* log directory URL prefix */ char *title="Hall of Fame - Greatest Suckers"; /* hall of fame title */ int hall_of_fame=1; /* enable hall of fame */ @@ -109,10 +111,10 @@ FILE *log_file=NULL; char *kwd="via-prometheus"; /* /etc/hosts comment, eg. #qos-64-128 */ -const idxtable_treshold1=24; /* this is no longer configurable */ -const idxtable_treshold2=12; /* this is no longer configurable */ -const idxtable_bitmask1=3; /* this is no longer configurable */ -const idxtable_bitmask2=3; /* this is no longer configurable */ +const int idxtable_treshold1=24; /* this is no longer configurable */ +const int idxtable_treshold2=12; /* this is no longer configurable */ +const int idxtable_bitmask1=3; /* this is no longer configurable */ +const int idxtable_bitmask2=3; /* this is no longer configurable */ /* not yet implemented: @@ -486,7 +488,7 @@ void get_traffic_statistics(void) else sscanf(ptr,"%Lu",&traffic); traffic+=(1<<19); traffic>>=20; break; - case 3: if(strncmp(ptr,"post_",5) && strncmp(ptr,"forw_",5) || commonflag) + case 3: if((strncmp(ptr,"post_",5) && strncmp(ptr,"forw_",5)) || commonflag) accept=eq(ptr,mark); /*if (filter_type==1) accept=eq(ptr,"MARK"); else accept=eq(ptr,"CLASSIFY");*/ break; @@ -637,7 +639,7 @@ program printf("\n\ Prometheus QoS - \"fair-per-IP\" Quality of Service setup utility.\n\ -Version %s - Copyright (C)2005-2007 Michael Polak (xChaos)\n\ +Version %s - Copyright (C)2005-2008 Michael Polak (xChaos)\n\ iptables-restore & burst tunning & classify modification 0.7d by Ludva\n\ Credits: CZFree.Net, Martin Devera, Netdave, Aquarius\n\n",version); @@ -877,7 +879,7 @@ Credits: CZFree.Net, Martin Devera, Netdave, Aquarius\n\n",version); if(ip_count>idxtable_treshold1 && !just_flush) { int idxcount=0, bitmask=32-idxtable_bitmask1; /* default net mask: 255.255.255.240 */ - char *subnet, *ptr, *buf; + char *subnet, *buf; /*-----------------------------------------------------------------*/ printf("Detected %d addresses - indexing iptables rules to improve performance...\n",ip_count); /*-----------------------------------------------------------------*/ @@ -1150,7 +1152,7 @@ Credits: CZFree.Net, Martin Devera, Netdave, Aquarius\n\n",version); #ifdef DEBUG printf("Total groups: %d Total bandwidth requested: %d k\nAGGREGATION: 1/%d\n",count,i,i/line); #endif - fprintf(f,"Line %d k",line); + fprintf(f,"Line %Ld k",line); fprintf(f,"%d%d k",total,i); every(keyword,keywords) @@ -1255,23 +1257,64 @@ Credits: CZFree.Net, Martin Devera, Netdave, Aquarius\n\n",version); fputs("\n\n",f); if(active_classes>10) - { - fputs("

\n",f); - fputs("\n",f); - find (sum,sums,sum->l>=total/4) - fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); - find (sum,sums,sum->i==10) - fprintf(f,"\n",(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); - find (sum,sums,sum->l>=total/2) - fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); - find (sum,sums,sum->i>=(active_classes+3)/4) - fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); - find (sum,sums,sum->i>=(active_classes+1)/2) - fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); - fprintf(f,"\n",active_classes,total); - fputs("
Enterprise Research and Planning (ERP)
Active ClassesData transfers
Top %d%d %%%Lu M%d %%
Top 10%d %%%Lu M%d %%
Top %d%d %%%Lu M%d %%
Top %d%d %%%Lu M%d %%
Top %d%d %%%Lu M%d %%
All %d100 %%%Lu M100 %%
\n",f); - } - fprintf(f,"Statistics generated by Prometheus QoS version %s
GPL+Copyright(C)2005 Michael Polak, Arachne Labs
\n",version); + { + fputs("

\n",f); + fputs("\n",f); + fputs("\n",f); + + find(sum,sums,sum->l>=total/4) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find(sum,sums,sum->i==10) + { + fprintf(f,"\n"); + fprintf(f,"\n",(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find(sum,sums,sum->l>=total/2) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find(sum,sums,sum->l>=4*total/5) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find (sum,sums,sum->i>=(active_classes+1)/5) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find(sum,sums,sum->i>=(active_classes+1)/4) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find(sum,sums,sum->i>=(active_classes+1)/2) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + find(sum,sums,sum->i>=4*(active_classes+1)/5) + { + fprintf(f,"\n"); + fprintf(f,"\n",sum->i,(100*sum->i+50)/active_classes,sum->l,(100*sum->l+50)/total); + } + + fprintf(f,"\n"); + fprintf(f,"\n",active_classes,total); + fputs("
Enterprise Research and Planning (ERP)
Analytic categoryActive ClassesData transfers
Top 25%% of traffic%d%d %%%Lu M%Ld %%
Top 10 downloaders10%d %%%Lu M%Ld %%
Top 50%% of traffic%d%d %%%Lu M%Ld %%
Top 80%% of traffic%d%d %%%Lu M%Ld %%
Top 20%% downloaders%d%d %%%Lu M%Ld %%
Top 25%% downloaders%d%d %%%Lu M%Ld %%
Top 50%% downloaders%d%d %%%Lu M%Ld %%
Top 80%% downloaders%d%d %%%Lu M%Ld %%
All users, all traffic%d100 %%%Lu M100 %%
\n",f); + } + fprintf(f,"Statistics generated by Prometheus QoS version %s
GPL+Copyright(C)2005-2008 Michael Polak, Arachne Labs
\n",version); fclose(f); }