max nesting limit according to include/uapi/linux/pkt_sched.h: #define TC_HTB_MAXDEPTH 8
[svn/Prometheus-QoS/.git] / prometheus.c
index 087102e66aa75a0062260f3a2d5f7ef1d78fb8bb..252c083cdc1df8d8ea1d97096bc1b8a95e45f8d2 100644 (file)
@@ -29,7 +29,7 @@
 #include "cll1-0.6.2.h"\r
 #include "ipstruct.h"\r
 \r
-const char *version = "0.8.3-j";\r
+const char *version = "0.8.5-a";\r
 \r
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
 /* Versions: 0.8.3 is development release, 0.8.4 will be "stable"  */\r
@@ -58,6 +58,7 @@ const char               *ls = "/bin/ls"; /* this is not user configurable :-) *
 \r
 char          *config = "/etc/prometheus/prometheus.conf"; /* main configuration file */\r
 char           *hosts = "/etc/prometheus/hosts"; /* per-IP bandwidth definition file */\r
+char      *macrosfile = "/etc/prometheus/prometheus.macros"; /* rewrite rules for most common tariffs */\r
 char    *iptablesfile = "/var/spool/prometheus.iptables"; /* temporary file for iptables-restore*/\r
 char   *ip6tablesfile = "/var/spool/prometheus.ip6tables"; /* temporary file for ip6tables-restore*/\r
 char          *credit = "/var/lib/misc/prometheus.credit"; /* credit log file */\r
@@ -111,7 +112,7 @@ int      overlimit_min = 256; /* minimum guaranted bandwidth for all undefined h
 int      overlimit_max = 512; /* maximum allowed bandwidth for all undefined hosts */\r
 int     qos_free_delay = 0; /* seconds to sleep before applying new QoS rules */\r
 int     digital_divide = 2; /* controls digital divide weirdness ratio, 1...3 */ \r
-int        max_nesting = 3; /* maximum nesting of HTB clases, built-in maximum seems to be 4 */\r
+int        max_nesting = 5; /* /include/uapi/linux/pkt_sched.h: #define TC_HTB_MAXDEPTH 8 [... - 3 parent classes] */\r
 int            htb_r2q = 256; /* should work for leaf values 512 kbps to 8 Mbps */\r
 int              burst = 8; /* HTB burst (in kbits) */\r
 int         burst_main = 64;\r
@@ -124,7 +125,7 @@ FILE         *log_file = NULL;
 char              *kwd = "via-prometheus"; /* /etc/hosts comment, eg. #qos-64-128 */\r
 \r
 const int highest_priority   = 0; /* highest HTB priority (HTB built-in value is 0) */\r
-const int lowest_priority    = 7; /* lowest HTB priority (HTB built-in value is 7) */\r
+const int lowest_priority    = 7; /* lowest HTB priority /include/uapi/linux/pkt_sched.h: #define TC_HTB_NUMPRIO 8 */\r
 const int idxtable_treshold1 = 24;      /* this is no longer configurable */\r
 const int idxtable_treshold2 = 12;      /* this is no longer configurable */\r
 const int idxtable_bitmask1  = 3;        /* this is no longer configurable */\r
@@ -132,7 +133,8 @@ const int idxtable_bitmask2  = 3;        /* this is no longer configurable */
 \r
 struct IP *ips = NULL, *networks = NULL, *ip, *sharedip;\r
 struct Group *groups = NULL, *group;\r
-struct Keyword *keyword, *defaultkeyword=NULL, *keywords=NULL;\r
+struct Keyword *keyword, *defaultkeyword=NULL, *keywords = NULL;\r
+struct Macro *macro, *macros = NULL;\r
 \r
 #define FREE_CLASS      3\r
 #define OVERLIMIT_CLASS 4\r
@@ -237,7 +239,7 @@ void get_config(char *config_filename)
    keyword->leaf_discipline = "";\r
    keyword->allowed_avgmtu = 0;\r
 \r
-   push(keyword,keywords);\r
+   push(keyword, keywords);\r
    if(!defaultkeyword)\r
    {\r
     defaultkeyword = keyword;\r
@@ -450,12 +452,20 @@ void run_iptables_restore(void)
 \r
 char *parse_datafile_line(char *str)\r
 {\r
- char *ptr=strchr(str,' ');\r
+ char *ptr = strchr(str,' ');\r
+ if(!ptr)\r
+ {\r
+  ptr = strchr(str,'\t');\r
+ }\r
 \r
  if(ptr)\r
  {\r
-  *ptr=0;\r
+  *ptr = 0;\r
   ptr++;\r
+  while(*ptr == ' ' || *ptr == '\t')\r
+  {\r
+   ptr++;\r
+  }\r
   return ptr;\r
  } \r
  else \r
@@ -571,6 +581,23 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
  string(str, STRLEN); \r
  string(limit_pkts, STRLEN);\r
 \r
+ /*-----------------------------------------------------------------*/\r
+ printf("Parsing macro definition file %s ...\n", macrosfile);\r
+ /*-----------------------------------------------------------------*/\r
+ parse(macrosfile)\r
+ {\r
+  ptr = parse_datafile_line(_);\r
+  if(ptr)\r
+  {\r
+   create(macro, Macro);\r
+   macro->rewrite_from = _;\r
+   macro->rewrite_to = ptr;\r
+   push(macro, macros);\r
+   printf("%s -> %s\n", macro->rewrite_from, macro->rewrite_to);\r
+  }\r
+ }\r
+ done; /* ugly macro end */\r
+\r
  /*-----------------------------------------------------------------*/\r
  printf("Parsing class defintion file %s ...\n", hosts);\r
  /*-----------------------------------------------------------------*/\r
@@ -609,7 +636,7 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
   /*-----------------------------------------------------------------*/\r
   parse(credit)\r
   {\r
-   ptr=parse_datafile_line(_);\r
+   ptr = parse_datafile_line(_);\r
    if(ptr)\r
    {\r
     if_exists(ip,ips,eq(ip->addr,_))\r
@@ -621,6 +648,7 @@ Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);
   done; /* ugly macro end */\r
  }\r
 \r
+\r
  if(!just_preview)\r
  {\r
   /*-----------------------------------------------------------------*/\r
This page took 0.138225 seconds and 4 git commands to generate.