there seems to be hardcoded maximum limit 10000 packets/sec in iptables
[svn/Prometheus-QoS/.git] / prometheus.c
index 045c182bfca6b686a97cf7aab9db2ebd5ffff791..279da9b75d28b4fd245b28ed4e6165eaae86fc91 100644 (file)
@@ -7,7 +7,7 @@
 /* Credit: CZFree.Net,Martin Devera,Netdave,Aquarius,Gandalf  */\r
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
 \r
-/* Modified by: xChaos, 20130124\r
+/* Modified by: xChaos, 20131118\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
-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
@@ -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
-/* 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
@@ -469,7 +465,7 @@ 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
- char *substring;\r
+ char *substring, *limit_pkts;\r
 \r
  int parent        = 1;\r
  int just_networks = FALSE;  \r
@@ -563,7 +559,8 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
  /*-----------------------------------------------------------------*/\r
  /* cll1.h - let's allocate brand new character buffer...           */\r
  /*-----------------------------------------------------------------*/\r
- string(str,STRLEN); \r
+ string(str, STRLEN); \r
+ string(limit_pkts, STRLEN);\r
 \r
  /*-----------------------------------------------------------------*/\r
  printf("Parsing class defintion file %s ...\n", hosts);\r
@@ -586,6 +583,7 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    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
@@ -1129,26 +1127,36 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
    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
-  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
-  /* -------------------------------------------------------- mark download */\r
-  \r
+  /* -------------------------------------------------------- mark download */  \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
-                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
-  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
@@ -1156,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
-  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
@@ -1168,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
-                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
This page took 0.164047 seconds and 4 git commands to generate.