json formatting
[svn/Prometheus-QoS/.git] / prometheus.c
index 26d6b0800ea51021c2edd30b7a00f5293f115d54..d241618fcc351c084294e9e9e293cc637bd6617e 100644 (file)
@@ -7,7 +7,7 @@
 /*  Credit: CZFree.Net,Martin Devera,Netdave,Aquarius,Gandalf  */\r
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r
 \r
-/* Modified by: xChaos, 20120511\r
+/* Modified by: xChaos, 20120516\r
                  ludva, 20080415\r
  \r
    Prometheus QoS is free software; you can redistribute it and/or\r
@@ -33,7 +33,7 @@
 \r
 #include "cll1-0.6.2.h"\r
 \r
-const char *version = "0.8.3-c";\r
+const char *version = "0.8.3-d";\r
 \r
 /* Version numbers: 0.8.3 is development releases ("beta"), 0.8.4 will be "stable" */\r
 /* Debian(RPM) package versions/patchlevels: 0.7.9-2, 0.8.0-1, 0.8.0-2, etc. */\r
@@ -44,10 +44,10 @@ const char *stats_html_signature = "<span class=\"small\">Statistics generated b
 \r
 /* ======= All path names are defined here (for RPM patch) =======  */\r
 \r
-char              *tc = "/sbin/tc"; /* requires tc with HTB support */\r
-char        *iptables = "/sbin/iptables"; /* requires iptables utility */\r
-char    *iptablessave = "/sbin/iptables-save"; /* not yet required */\r
-char *iptablesrestore = "/sbin/iptables-restore";  /* requires iptables-restore */\r
+const char        *tc = "/sbin/tc"; /* requires tc with HTB support */\r
+const char  *iptables = "/sbin/iptables"; /* requires iptables utility */\r
+const char *iptablessave = "/sbin/iptables-save"; /* not yet required */\r
+const char *iptablesrestore = "/sbin/iptables-restore";  /* requires iptables-restore */\r
 const char        *ls = "/bin/ls"; /* this is not user configurable :-) */\r
 \r
 char          *config = "/etc/prometheus/prometheus.conf"; /* main configuration file */\r
@@ -55,8 +55,10 @@ char           *hosts = "/etc/prometheus/hosts"; /* per-IP bandwidth definition
 \r
 char    *iptablesfile = "/var/spool/prometheus.iptables"; /* temporary file for iptables-restore*/\r
 char          *credit = "/var/lib/misc/prometheus.credit"; /* credit log file */\r
-char            *html = "/var/www/traffic.html"; /* hall of fame filename */\r
+char        *classmap = "/var/lib/misc/prometheus.classes"; /* credit log file */\r
+char            *html = "/var/www/traffic.html"; /* hall of fame - html version */\r
 char         *preview = "/var/www/preview.html"; /* hall of fame preview */\r
+char            *json = "/var/www/traffic.json"; /* hall of fame - json version */\r
 char          *cmdlog = "/var/log/prometheuslog"; /* command log filename */\r
 char         *log_dir = "/var/www/logs/"; /* log directory pathname, ended with slash */\r
 char         *log_url = "/logs/"; /* log directory relative URI prefix (partial URL) */\r
@@ -67,6 +69,7 @@ char         *lms_url = "/lms/?m=customerinfo&amp;id=";
 int use_jquery_popups = 1;\r
 int      row_odd_even = 0; /*<tr class="odd/even"> */\r
 \r
+\r
 const char *tr_odd_even(void)\r
 {\r
  row_odd_even = 1 - row_odd_even;\r
@@ -424,7 +427,7 @@ void get_config(char *config_filename)
   option("iptables",iptables);\r
   option("iptables-save",iptablessave); /* new */\r
   option("iptables-restore",iptablesrestore); /* new */\r
-  option("iptables-file",iptablesfile); /* new */\r
+  option("iptables-in-filename",iptablesfile); /* new */\r
   option("hosts",hosts);\r
   option("lan-interface",lan);\r
   option("wan-interface",wan);\r
@@ -435,9 +438,11 @@ void get_config(char *config_filename)
   ioption("hall-of-fame-enable",hall_of_fame);\r
   option("hall-of-fame-title",title);\r
   option("hall-of-fame-filename",html);\r
+  option("json-filename",json);\r
   option("hall-of-fame-preview",preview);\r
   option("log-filename",cmdlog);\r
   option("credit-filename",credit);\r
+  option("classmap-filename",classmap);\r
   ioption("credit-enable",enable_credit);\r
   option("log-traffic-directory",log_dir);\r
   option("log-traffic-html-directory",html_log_dir);\r
@@ -474,7 +479,7 @@ void get_config(char *config_filename)
  done;\r
  printf("\n");\r
  \r
- /*leaf discipline for keywords*/\r
+ /* leaf discipline for keywords */\r
  for_each(keyword,keywords)\r
  {\r
     if(!strcmpi(keyword->leaf_discipline, ""))\r
@@ -651,8 +656,7 @@ void get_traffic_statistics(void)
      }\r
     }  \r
   }\r
-\r
- free(cmd);\r
+  free(cmd);\r
 }\r
  \r
 /* ========== This function executes, logs OR ALSO prints command ========== */\r
@@ -684,7 +688,7 @@ void run_restore(void)
  string(restor,STRLEN);\r
 \r
  /*-----------------------------------------------------------------*/\r
- printf("Running %s <%s ...\n",iptablesrestore,iptablesfile);\r
+ printf("Running %s <%s ...\n", iptablesrestore, iptablesfile);\r
  /*-----------------------------------------------------------------*/\r
  \r
  save_line("COMMIT");\r
@@ -895,9 +899,9 @@ void parse_ip_log(int argc, char **argv)
   }\r
  }\r
  sprintf(str,"%s/%s-%s.html",html_log_dir,year,month);\r
- printf("Writing %s ...",str);\r
+ printf("Writing %s ... ",str);\r
  f=fopen(str,"w");\r
- if(f)\r
+ if(f > 0)\r
  {\r
   fprintf(f, "<table class=\"decorated last\"><thead>\n\\r
 <tr><th colspan=\"2\">%s %s</th>\n\\r
@@ -934,11 +938,11 @@ void parse_ip_log(int argc, char **argv)
     iplog->l=total;\r
    }\r
   }\r
-  fprintf(f,"<tr>\\r
+  fprintf(f,"</tbody><thead><tr>\\r
   <td colspan=\"4\" style=\"text-align: left\">Total:</td>\\r
   <td style=\"text-align: right\"><strong>%ld&nbsp;GB</strong></td>\\r
   <td style=\"text-align: right\"><strong>%Ld&nbsp;kb/s</strong></td></tr>\n", total, line);\r
-  fputs("</tbody></table>\n", f);\r
+  fputs("</thead></table>\n", f);\r
 \r
   row_odd_even = 0;\r
   if(i>10)\r
@@ -1028,10 +1032,37 @@ void parse_ip_log(int argc, char **argv)
 \r
   fprintf(f, stats_html_signature, version);\r
   fclose(f);\r
-  puts(" done.");\r
+  puts("done.");\r
+ }\r
+ else\r
+ {\r
+  perror(str);\r
+ }\r
+}\r
+\r
+void append_log(struct IP *self) /*using global variables*/\r
+{\r
+ char *d, *str;\r
+ FILE *f; \r
+\r
+ date(d); /* this is typical cll1.h macro - prints current date */ \r
+ string(str,STRLEN); \r
+ sprintf(str,"%s/%s.log", log_dir, self->name);\r
+ f=fopen(str,"a");\r
+ if(f > 0)\r
+ {\r
+  fprintf(f,"%ld\t%s\t%Lu\t%Lu\t%Lu\t%Lu\t%d\t%d\t%d\t%d\t%s",\r
+            time(NULL), self->name, self->traffic, self->direct, self->proxy,\r
+            self->upload, self->min, self->max, self->desired, self->lmsid, d); /* d = date*/\r
+  fclose(f);\r
+ }\r
+ else\r
+ {\r
+  perror(str);\r
  }\r
 }\r
 \r
+\r
 /*-----------------------------------------------------------------*/\r
 /* Are you looking for int main(int argc, char **argv) ? :-))      */\r
 /*-----------------------------------------------------------------*/\r
@@ -1448,7 +1479,10 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
  if(just_flush)\r
  {\r
   fclose(iptables_file);\r
-  if(log_file) fclose(log_file);\r
+  if(log_file)\r
+  { \r
+   fclose(log_file);\r
+  }\r
   puts("Just flushed iptables and tc classes - now exiting ...");\r
   exit(0);\r
  }\r
@@ -1593,20 +1627,33 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
  else if(!dry_run && !just_flush)\r
  {\r
   /*-----------------------------------------------------------------*/\r
-  printf("Writing data transfer database ...\n");\r
+  printf("Writing daily statistics  %s ... ", json);\r
   /*-----------------------------------------------------------------*/\r
-  f=fopen("/var/run/prometheus.previous","w");\r
-  if(f)\r
+  f=fopen(json, "w");\r
+  if(f > 0)\r
   {\r
-   for_each(ip,ips)\r
+   int jsoncount=0;\r
+   fprintf(f, "{\n");\r
+   for_each(ip, ips)\r
    {\r
+    if(jsoncount)\r
+    {\r
+     fprintf(f, ",\n");\r
+    }\r
     if(ip->traffic || ip->direct || ip->proxy || ip->upload)\r
     {\r
-     fprintf(f,"%s %Lu %Lu %Lu %Lu\n",\r
-               ip->addr, ip->traffic, ip->direct, ip->proxy, ip->upload);\r
+     fprintf(f, " %d:{ \"ip\":\"%s\", \"total\":%Lu, \"down\":%Lu, \"proxy\":%Lu, \"up\":%Lu }",\r
+                ip->lmsid, ip->addr, ip->traffic, ip->direct, ip->proxy, ip->upload);\r
     }\r
+    jsoncount++;\r
    }\r
+   fprintf(f, "}\n");\r
    fclose(f);\r
+   puts("done.");\r
+  }\r
+  else\r
+  {\r
+   perror(json);\r
   }\r
   f=fopen(html,"w");\r
   ptr=html;\r
@@ -1646,9 +1693,9 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    fprintf(f, "<td style=\"text-align: right\">%d</td><td style=\"text-align: right\">%d&nbsp;kb/s</td>",\r
               group->count, group->desired);\r
 \r
-   for_each(keyword, keywords)\r
+   for_each(keyword, keywords) if(keyword->ip_count)\r
    {\r
-    fprintf(f,"<td style=\"text-align: right\"><span style=\"color:#%s\">%d&nbsp;Mb/s</span></td>",\r
+    fprintf(f,"<td style=\"text-align: right\"><span style=\"color:#%s\">%d&nbsp;MB</span></td>",\r
               keyword->html_color, group->min*keyword->data_limit);\r
    }   \r
    i += group->desired; \r
@@ -1659,17 +1706,19 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    printf("Total groups: %d Total bandwidth requested: %d kb/s\nAGGREGATION: 1/%d\n",\r
           count, i, i/line);\r
 #endif\r
-   fprintf(f,"<tr><th colspan=\"2\" style=\"text-align: left\">Line %Ld kb/s</td>",line);\r
+   fprintf(f,"</tr></tbody>\n\\r
+<thead><tr>\n\\r
+<th colspan=\"2\" style=\"text-align: left\">Line %Ld kb/s</td>",line);\r
    fprintf(f,"<th style=\"text-align: right\">%d</td><th style=\"text-align: right\">%d kb/s</td>",total,i);\r
 \r
-   for_each(keyword, keywords)\r
+   for_each(keyword, keywords) if(keyword->ip_count)\r
    {\r
     fprintf(f,"<th style=\"text-align: right\">%d IPs</th>",keyword->ip_count);\r
    }\r
    fprintf(f,"</tr><tr><th colspan=\"4\">Aggregation 1/%d</th>\n", (int)(0.5+i/line));\r
    fprintf(f,"<th colspan=\"%d\">%d traffic classes</th></tr>\n", keywordcount, total);\r
 \r
-   fputs("</tbody></table>\n",f);\r
+   fputs("</thead></table>\n",f);\r
  }\r
  else if(!dry_run && !just_flush)\r
  {\r
@@ -1682,7 +1731,6 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
   unsigned long long total_traffic=0, total_direct=0, total_proxy=0, total_upload=0, tmp_sum=0;\r
   int active_classes=0;\r
   int colspan=12;\r
-  FILE *iplog;\r
   struct Sum {unsigned long long l; int i; list(Sum);} *sum,*sums=NULL;\r
   int limit_count=0, prio_count=0;\r
   int popup_button=0;\r
@@ -1707,8 +1755,8 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
 <th style=\"text-align: right\">min</th>\n\\r
 <th style=\"text-align: right\">max</th>\n\\r
 <th style=\"text-align: right\">limit</th>\n\\r
-<th>prio</th></tr>\n\\r
-<tr>\n\\r
+<th>&nbsp;</th>\n\\r
+</tr><tr>\n\\r
 <th style=\"text-align: right\">#</th>\n\\r
 <th>hostname [+sharing]</th>\n\\r
 <th style=\"text-align: right\">LMS</th>\n\\r
@@ -1720,7 +1768,7 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
 <th style=\"text-align: right\">kb/s</th>\n\\r
 <th style=\"text-align: right\">kb/s</th>\n\\r
 <th style=\"text-align: right\">kb/s</th>\n\\r
-<th>&nbsp;</th>\n\\r
+<th>prio</th>\n\\r
 </tr></thead><tbody>\n",f);    \r
 \r
   row_odd_even = 0;\r
@@ -1813,6 +1861,10 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
      for_each(sharedip,ips) if(eq(ip->name, sharedip->sharing))\r
      {\r
       fprintf(f,"<br />%Lu", sharedip->upload);\r
+      if(!just_preview)\r
+      {\r
+       append_log(sharedip);\r
+      }\r
      }\r
      fputs("</span>\n",f);\r
    }\r
@@ -1843,25 +1895,18 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
 \r
    if(!just_preview)\r
    {\r
-    sprintf(str,"%s/%s.log",log_dir,ip->name);\r
-    iplog=fopen(str,"a");\r
-    if(iplog)\r
-    {\r
-     fprintf(iplog,"%ld\t%s\t%Lu\t%Lu\t%Lu\t%Lu\t%d\t%d\t%d\t%d\t%s",\r
-                    time(NULL), ip->name, ip->traffic, ip->direct, ip->proxy,\r
-                    ip->upload, ip->min, ip->max, ip->desired, ip->lmsid, d); /* d = date*/\r
-     fclose(iplog);\r
-    }\r
+    append_log(ip);\r
    }\r
   }\r
-  fprintf(f,"<tr><th colspan=\"%d\" style=\"text-align: left\">%d CLASSES</th>", colspan-7, i);\r
+  fprintf(f,"</tbody><thead><tr>\n\\r
+<th colspan=\"%d\" style=\"text-align: left\">%d CLASSES</th>", colspan-7, i);\r
   fprintf(f,"<th style=\"text-align: right\">%Lu</th><th style=\"text-align: right\">%Lu</th>\n", total_traffic, total_direct);\r
   if(qos_proxy)\r
   {\r
    fprintf(f,"<th style=\"text-align: right\">%Lu</th>\n", total_proxy);\r
   }\r
   fprintf(f,"<th style=\"text-align: right\">%Lu</th>", total_upload);\r
-  fprintf(f,"<th colspan=\"4\"><span style=\"color:red\">FUP-LIMIT %dx</span> <span style=\"color:brown\">LOW-PRIO %dx</span></th></tr>\n</tbody></table>\n",limit_count,prio_count);\r
+  fprintf(f,"<th colspan=\"4\"><span style=\"color:red\">LIMIT %dx</span> <span style=\"color:brown\">LOW-PRIO %dx</span></th></tr>\n</thead></table>\n",limit_count,prio_count);\r
 \r
   row_odd_even = 0;\r
   if(active_classes>10)\r
@@ -1967,6 +2012,7 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    /* write basic ERP data to log directory */\r
    if(!just_preview)\r
    {\r
+    FILE *iplog;\r
     sprintf(str,"%s/ERP.log",log_dir);\r
     iplog=fopen(str,"a");\r
     if(iplog)\r
@@ -1976,6 +2022,10 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
                    active_classes, total_traffic, i, limit_count, prio_count, d); /* d = date*/\r
      fclose(iplog);\r
     }\r
+    else\r
+    {\r
+     perror(str);\r
+    }\r
    }\r
   }\r
 \r
@@ -1987,19 +2037,26 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
  {\r
   puts("Statistics preview generated (-p switch) - now exiting ...");\r
   exit(0);\r
- }\r
-  \r
- /*-----------------------------------------------------------------*/\r
- puts("Generating iptables and tc classes ...");\r
- /*-----------------------------------------------------------------*/\r
+ }  \r
 \r
  i=0;\r
 #ifdef DEBUG\r
  printf("%-22s %-15s mark\n","name","ip");\r
 #endif\r
 \r
- for_each(ip,ips) if(ip->mark>0)\r
- { \r
+ printf("Writing %s ... ", classmap); \r
+ f = fopen(classmap, "w"); \r
+ if(f < 0)\r
+ {\r
+  perror(classmap);\r
+ }\r
+\r
+ /*-----------------------------------------------------------------*/\r
+ puts("Generating iptables and tc classes ... ");\r
+ /*-----------------------------------------------------------------*/\r
+\r
+ for_each(ip, ips) if(ip->mark > 0)\r
+ {\r
   if(idxs)\r
   {\r
    char *buf;\r
@@ -2028,27 +2085,32 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
 \r
   /* -------------------------------------------------------- mark download */\r
   \r
-  sprintf(str,"-A %s -d %s/32 -o %s -j %s%d",chain_postrouting,ip->addr,lan,mark_iptables,ip->mark);\r
+  sprintf(str, "-A %s -d %s/32 -o %s -j %s%d",\r
+               chain_postrouting, ip->addr, lan, mark_iptables, ip->mark);\r
   /*sprintf(str,"-A %s -d %s/32 -o %s -j MARK --set-mark %d",chain_postrouting,ip->addr,lan,ip->mark);*/\r
   /* -m limit --limit 1/s */  \r
   save_line(str);\r
 \r
   if(qos_proxy)\r
   {\r
-   sprintf(str,"-A %s -s %s -p tcp --sport %d -d %s/32 -o %s -j %s%d",chain_postrouting,proxy_ip,proxy_port,ip->addr,lan,mark_iptables,ip->mark);\r
+   sprintf(str, "-A %s -s %s -p tcp --sport %d -d %s/32 -o %s -j %s%d",\r
+                chain_postrouting, proxy_ip, proxy_port, ip->addr, lan, mark_iptables, ip->mark);\r
    /*sprintf(str,"-A %s -s %s -p tcp --sport %d -d %s/32 -o %s -j MARK --set-mark %d",chain_postrouting,proxy_ip,proxy_port,ip->addr,lan,ip->mark);*/\r
    save_line(str);\r
   }\r
 \r
-  sprintf(str,"-A %s -d %s/32 -o %s -j ACCEPT",chain_postrouting,ip->addr,lan);\r
+  sprintf(str, "-A %s -d %s/32 -o %s -j ACCEPT",\r
+               chain_postrouting, ip->addr, lan);\r
   save_line(str);\r
 \r
   /* -------------------------------------------------------- mark upload */\r
-  sprintf(str,"-A %s -s %s/32 -o %s -j %s%d",chain_forward,ip->addr,wan,mark_iptables,ip->mark);\r
+  sprintf(str, "-A %s -s %s/32 -o %s -j %s%d", \r
+               chain_forward, ip->addr, wan, mark_iptables, ip->mark);\r
   /*  sprintf(str,"-A %s -s %s/32 -o %s -j MARK --set-mark %d",chain_forward,ip->addr,wan,ip->mark);*/\r
   save_line(str);\r
 \r
-  sprintf(str,"-A %s -s %s/32 -o %s -j ACCEPT",chain_forward,ip->addr,wan);\r
+  sprintf(str, "-A %s -s %s/32 -o %s -j ACCEPT",\r
+               chain_forward, ip->addr, wan);\r
   save_line(str);\r
 \r
   if(ip->min)\r
@@ -2058,17 +2120,21 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    printf("(down: %dk-%dk ", ip->min, ip->max); \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", tc, lan, ip->group, ip->mark,ip->min,ip->max, burst, ip->prio);\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
    safe_run(str);\r
 \r
    if(strcmpi(ip->keyword->leaf_discipline, "none"))\r
    {\r
-     sprintf(str,"%s qdisc add dev %s parent 1:%d handle %d %s", tc, lan, ip->mark, ip->mark, ip->keyword->leaf_discipline); /*qos_leaf*/\r
+     sprintf(str, "%s qdisc add dev %s parent 1:%d handle %d %s", \r
+                  tc, lan, ip->mark, ip->mark, ip->keyword->leaf_discipline); /*qos_leaf*/\r
      safe_run(str);\r
-   }   \r
+   }\r
+\r
    if(filter_type == 1)\r
    {\r
-     sprintf(str,"%s filter add dev %s parent 1:0 protocol ip handle %d fw flowid 1:%d", tc, lan, ip->mark, ip->mark);\r
+     sprintf(str, "%s filter add dev %s parent 1:0 protocol ip handle %d fw flowid 1:%d",\r
+                  tc, lan, ip->mark, ip->mark);\r
      safe_run(str);\r
    }\r
 \r
@@ -2086,14 +2152,22 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    \r
    if(strcmpi(ip->keyword->leaf_discipline, "none"))\r
    {\r
-     sprintf(str,"%s qdisc add dev %s parent 1:%d handle %d %s",tc, wan, ip->mark, ip->mark, ip->keyword->leaf_discipline); /*qos_leaf*/\r
+     sprintf(str, "%s qdisc add dev %s parent 1:%d handle %d %s",\r
+                  tc, wan, ip->mark, ip->mark, ip->keyword->leaf_discipline); /*qos_leaf*/\r
      safe_run(str);\r
    }   \r
+\r
    if(filter_type == 1)\r
    {\r
-     sprintf(str,"%s filter add dev %s parent 1:0 protocol ip handle %d fw flowid 1:%d",tc, wan, ip->mark, ip->mark);\r
+     sprintf(str, "%s filter add dev %s parent 1:0 protocol ip handle %d fw flowid 1:%d",\r
+                  tc, wan, ip->mark, ip->mark);\r
      safe_run(str);\r
    }\r
+  \r
+   if(f)\r
+   {\r
+     fprintf(f, "%s %d", ip->addr, ip->mark);\r
+   }\r
   }\r
   else\r
   {\r
@@ -2103,7 +2177,12 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
   }\r
   i++;\r
  }\r
-\r
+ if(f)\r
+ {\r
+  puts("done.");\r
+  fclose(f);\r
+ }\r
\r
  if(idxs)\r
  {\r
    chain_forward = "forw_common";\r
@@ -2117,31 +2196,36 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
  /* -------------------------------- classify or reject free download */\r
  {\r
    char *final_chain = "DROP"; /* REJECT would be better, but it is impossible in mangle */\r
-   if(free_min) final_chain = "ACCEPT";\r
+   if(free_min)\r
+   {\r
+    final_chain = "ACCEPT";\r
+   }\r
    if(qos_proxy)\r
    {\r
      if(free_min)\r
      {\r
-       sprintf(str,"-A %s -s %s -p tcp --sport %d -o %s -j %s%d",chain_postrouting,proxy_ip,proxy_port,lan,mark_iptables,3);\r
+       sprintf(str,"-A %s -s %s -p tcp --sport %d -o %s -j %s%d",\r
+                   chain_postrouting,proxy_ip,proxy_port,lan,mark_iptables,3);\r
        save_line(str);\r
      }\r
-     sprintf(str,"-A %s -s %s -p tcp --sport %d -o %s -j %s",chain_postrouting,proxy_ip,proxy_port,lan,final_chain);\r
+     sprintf(str,"-A %s -s %s -p tcp --sport %d -o %s -j %s",\r
+                  chain_postrouting,proxy_ip,proxy_port,lan,final_chain);\r
      save_line(str);\r
    }\r
    if(free_min)\r
    {\r
-     sprintf(str,"-A %s -o %s -j %s%d",chain_postrouting,lan,mark_iptables,3);\r
+     sprintf(str,"-A %s -o %s -j %s%d", chain_postrouting, lan, mark_iptables, 3);\r
      save_line(str);\r
    }\r
-   sprintf(str,"-A %s -o %s -j %s",chain_postrouting,lan,final_chain);\r
+   sprintf(str,"-A %s -o %s -j %s", chain_postrouting, lan, final_chain);\r
    save_line(str);\r
    /* ------------------------------- classify or reject free  upload */\r
    if(free_min)\r
    {\r
-     sprintf(str,"-A %s -o %s -j %s%d",chain_forward,wan,mark_iptables,3);\r
+     sprintf(str,"-A %s -o %s -j %s%d", chain_forward, wan, mark_iptables, 3);\r
      save_line(str);\r
    }\r
-   sprintf(str,"-A %s -o %s -j %s",chain_forward,wan,final_chain);\r
+   sprintf(str,"-A %s -o %s -j %s", chain_forward, wan, final_chain);\r
    save_line(str);\r
  }\r
 \r
@@ -2151,25 +2235,25 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    puts("Generating free bandwith classes ...");\r
    /*-----------------------------------------------------------------*/\r
    sprintf(str, "%s class add dev %s parent 1:%d classid 1:3 htb rate %dkbit ceil %dkbit burst %dk prio %d",\r
-                tc,lan,parent,free_min,free_max,burst,lowest_priority);\r
+                tc, lan, parent, free_min, free_max,burst, lowest_priority);\r
    safe_run(str);\r
    sprintf(str, "%s class add dev %s parent 1:%d classid 1:3 htb rate %dkbit ceil %dkbit burst %dk prio %d",\r
-                tc,wan,parent,free_min,free_max,burst,lowest_priority);\r
+                tc, wan, parent, free_min, free_max, burst, lowest_priority);\r
    safe_run(str);\r
    /* tc SFQ */\r
    if(strcmpi(qos_leaf, "none"))\r
    {\r
-     sprintf(str,"%s qdisc add dev %s parent 1:3 handle 3 %s",tc,lan,qos_leaf);\r
+     sprintf(str,"%s qdisc add dev %s parent 1:3 handle 3 %s", tc, lan, qos_leaf);\r
      safe_run(str);\r
    \r
-     sprintf(str,"%s qdisc add dev %s parent 1:3 handle 3 %s",tc,wan,qos_leaf);\r
+     sprintf(str,"%s qdisc add dev %s parent 1:3 handle 3 %s", tc, wan, qos_leaf);\r
      safe_run(str);\r
    }   \r
    /* tc handle 1 fw flowid */\r
-   sprintf(str,"%s filter add dev %s parent 1:0 protocol ip handle 3 fw flowid 1:3",tc,lan);\r
+   sprintf(str,"%s filter add dev %s parent 1:0 protocol ip handle 3 fw flowid 1:3", tc, lan);\r
    safe_run(str);\r
 \r
-   sprintf(str,"%s filter add dev %s parent 1:0 protocol ip handle 3 fw flowid 1:3",tc,wan);\r
+   sprintf(str,"%s filter add dev %s parent 1:0 protocol ip handle 3 fw flowid 1:3", tc, wan);\r
    safe_run(str);\r
  }\r
  printf("Total IP count: %d\n", i);\r
This page took 0.242334 seconds and 4 git commands to generate.