--- htb_tools-0.2.6-test3/q_parser.c 2005-02-28 02:10:40.000000000 +0200 +++ htb_tools-0.2.6-test3-mark_in_u32/q_parser.c 2005-03-04 13:52:40.000000000 +0200 @@ -180,75 +180,79 @@ unsigned int gen_script(char *dev, unsig printf(" echo Add client %s\n $TC class add dev $DEV parent 1:0x%x classid 1:0x%x htb rate %dkbps ceil %dkbps burst %dk prio %d quantum 1500\n", c->name, q_class_count, q_client_count, c->bandwidth / 8, c->limit / 8, c->burst, c->priority); - if (c->mark){ - printf(" $TC filter add dev $DEV protocol ip parent 1:0 prio %d handle %d fw flowid 1:0x%x\n", c->priority+1 ,c->mark,q_client_count); - }else{ - - if ( c->dst_nr == 0 ) //if we don't have destination in config - { - for(j=0; j < c->src_nr; j++) - { - struct address * s_addr; - s_addr = parse_addr(c->src[j]); - ps = s_addr->ports; - - if ( ps == NULL ) - { - printf(" $TC ${U32} match ip src %s", s_addr->address); - printf(" flowid 1:0x%x\n", q_client_count); - } + if ( c->dst_nr == 0 ) //if we don't have destination in config + { + for(j=0; j < c->src_nr; j++) + { + struct address * s_addr; + s_addr = parse_addr(c->src[j]); + ps = s_addr->ports; + + if ( ps == NULL ) + { + printf(" $TC ${U32} match ip src %s", s_addr->address); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); + printf(" flowid 1:0x%x\n", q_client_count); + } - while (ps) - { - if ( strncmp(s_addr->address,"0.0.0.0",7) == 0 ) - printf(" $TC ${U32}"); - else - printf(" $TC ${U32} match ip src %s", s_addr->address); - printf(" match ip sport %d 0xffff ", ps->port_nr); - printf(" flowid 1:0x%x\n", q_client_count); - ps = ps->next_port; - } - destroy_address_struct(s_addr); - } - printf(" $TC qdisc add dev $DEV parent 1:0x%x handle 0x%x: %s\n", q_client_count, q_client_count, class_que); - - q_client_count += 1; - c = c->next; - continue; - } - - if ( c->src_nr == 0 ) //if we don't have source in config - { - for(j=0; j < c->dst_nr; j++) - { - struct address * d_addr; - d_addr = parse_addr(c->dst[j]); - pd = d_addr->ports; - - if ( pd == NULL ) - { - printf(" $TC ${U32} match ip dst %s", d_addr->address); - printf(" flowid 1:0x%x\n", q_client_count); - } + while (ps) + { + if ( strncmp(s_addr->address,"0.0.0.0",7) == 0 ) + printf(" $TC ${U32}"); + else + printf(" $TC ${U32} match ip src %s", s_addr->address); + printf(" match ip sport %d 0xffff ", ps->port_nr); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); + printf(" flowid 1:0x%x\n", q_client_count); + ps = ps->next_port; + } + destroy_address_struct(s_addr); + } + printf(" $TC qdisc add dev $DEV parent 1:0x%x handle 0x%x: %s\n", q_client_count, q_client_count, class_que); + + q_client_count += 1; + c = c->next; + continue; + } + + if ( c->src_nr == 0 ) //if we don't have source in config + { + for(j=0; j < c->dst_nr; j++) + { + struct address * d_addr; + d_addr = parse_addr(c->dst[j]); + pd = d_addr->ports; + + if ( pd == NULL ) + { + printf(" $TC ${U32} match ip dst %s", d_addr->address); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); + printf(" flowid 1:0x%x\n", q_client_count); + } - while (pd) - { - if ( strncmp(d_addr->address,"0.0.0.0",7) == 0 ) - printf(" $TC ${U32}"); - else - printf(" $TC ${U32} match ip dst %s", d_addr->address); - printf(" match ip dport %d 0xffff ", pd->port_nr); - printf(" flowid 1:0x%x\n", q_client_count); - pd = pd->next_port; - } - destroy_address_struct(d_addr); - } - printf(" $TC qdisc add dev $DEV parent 1:0x%x handle 0x%x: %s\n", q_client_count, q_client_count, class_que); - - q_client_count += 1; - c = c->next; - continue; - } + while (pd) + { + if ( strncmp(d_addr->address,"0.0.0.0",7) == 0 ) + printf(" $TC ${U32}"); + else + printf(" $TC ${U32} match ip dst %s", d_addr->address); + printf(" match ip dport %d 0xffff ", pd->port_nr); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); + printf(" flowid 1:0x%x\n", q_client_count); + pd = pd->next_port; + } + destroy_address_struct(d_addr); + } + printf(" $TC qdisc add dev $DEV parent 1:0x%x handle 0x%x: %s\n", q_client_count, q_client_count, class_que); + + q_client_count += 1; + c = c->next; + continue; + } //we have both source and destination @@ -284,6 +288,8 @@ unsigned int gen_script(char *dev, unsig if ( strncmp(s_addr->address,"0.0.0.0",7) != 0 ) printf(" match ip src %s", s_addr->address); printf(" match ip sport %d 0xffff ", ps->port_nr); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); printf(" flowid 1:0x%x\n", q_client_count); ps = ps->next_port; } @@ -306,6 +312,8 @@ unsigned int gen_script(char *dev, unsig printf(" match ip dport %d 0xffff ", pd->port_nr); if ( strncmp(s_addr->address,"0.0.0.0",7) != 0 ) printf(" match ip src %s", s_addr->address); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); printf(" flowid 1:0x%x\n", q_client_count); pd = pd->next_port; } @@ -326,6 +334,8 @@ unsigned int gen_script(char *dev, unsig if ( strncmp(s_addr->address,"0.0.0.0",7) != 0 ) printf(" match ip src %s", s_addr->address); printf(" match ip sport %d 0xffff ", ps->port_nr); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); printf(" flowid 1:0x%x\n", q_client_count); ps = ps->next_port; } @@ -336,11 +346,12 @@ unsigned int gen_script(char *dev, unsig printf(" $TC ${U32} match ip dst %s", d_addr->address); printf(" match ip src %s", s_addr->address); + if (c->mark > 0) + printf(" match mark %d 0xffff ", c->mark); printf(" flowid 1:0x%x\n", q_client_count); destroy_address_struct(d_addr); destroy_address_struct(s_addr); } - } printf(" $TC qdisc add dev $DEV parent 1:0x%x handle 0x%x: %s\n", q_client_count, q_client_count, class_que); q_client_count += 1;