- int groupidx = FIRSTGROUPID;\r
- parse(hosts)\r
- {\r
- str=_;\r
-\r
- if(*str<'0' || *str>'9')\r
- {\r
- /* any line starting with non-number is comment ...*/\r
- continue;\r
- }\r
- \r
- //Does this IP share QoS class with some other ?\r
- substring=strstr(str,"sharing-");\r
- if(substring)\r
- { \r
- substring+=8; //"sharing-"\r
- parse_ip(str);\r
- ip_count++;\r
- ip->sharing=substring;\r
- ip->keyword=defaultkeyword; /* settings for default keyword */\r
- while(*substring && *substring!='\n')\r
- {\r
- substring++;\r
- }\r
- *substring=0; \r
- }\r
- else\r
- {\r
- //Do we have to create new QoS class for this IP ?\r
-\r
- if_exists(keyword,keywords,(substring=strstr(str,keyword->key)))\r
- {\r
- parse_ip(str);\r
- ip_count++;\r
- ip->keyword=keyword;\r
- keyword->ip_count++;\r
- ip->prio=keyword->default_prio;\r
- substring+=strlen(keyword->key)+1;\r
- ptr=substring;\r
- while(*ptr && *ptr!='-')\r
- {\r
- ptr++;\r
- }\r
- if(*ptr=='-')\r
- {\r
- *ptr=0;\r
- ip->max = ip->desired=atoi(ptr+1);\r
- }\r
- ip->min = atoi(substring);\r
- if(ip->min <= 0)\r
- {\r
- printf(" %s: Illegal value of minimum bandwidth 0 kbps, using %d kb/s\n",\r
- str, free_min);\r
- ip->min = free_min;\r
- }\r
- if(ip->max <= ip->min)\r
- {\r
- ip->fixedprio = 1;\r
- ip->max = ip->min+ip->keyword->reserve_min;\r
- }\r
- else \r
- {\r
- ip->max -= ip->keyword->reserve_max;\r
- if(ip->max<ip->min)\r
- {\r
- ip->max=ip->min;\r
- }\r
- }\r
- ip->mark=FIRSTIPCLASS+1+class_count++;\r
-\r
- if_exists(group,groups,group->min==ip->min) \r
- { \r
- group->count++; \r
- group->desired += ip->min;\r
- ip->group = group->id; \r
- }\r
- else\r
- {\r
- create(group,Group);\r
- group->min = ip->min;\r
- group->id = groupidx++;\r
- ip->group = group->id;\r
-\r
- if(group->min<8) group->min=8;\r
- /* Warning - this is maybe because of primitive tc namespace, can be fixed */\r
- /* it is because class IDs are derived from min. bandwidth. - xCh */\r
- //if(group->min>MAX_GUARANTED_KBPS) group->min=MAX_GUARANTED_KBPS;\r
- \r
- group->count=1;\r
- group->desired=ip->min; \r
- insert(group,groups,desc_order_by,min);\r
- }\r
- }//endif keyword-\r
- }//endif sharing-\r
- }\r
- fail\r
- {\r
- perror(hosts);\r
- exit(-1);\r
- }\r
- done; /* ugly macro end */\r