LINUX.ORG.RU
ФорумAdmin

[tc][htb] два варианта реализации, но ни один не работает так, как нужно

 ,


0

1

нужно: зажать входящий p2p-трафик. для этого выделил ему 5% гарантированной ширины с возможностью заимствовать до 100%.

hi-prio пакеты выделяю посредством анализа source port, всё остальное - low-prio

первый вариант:

+---------+
| root 1: |
+---------+
 |
 |  +-----------------------------------------+
 +--| class 1:1 нетранзитный трафик           |
 |  +-----------------------------------------+
 |
 |  +-----------------------------------------+
 +--| class 1:2 транзитный трафик (hi-prio)   |
 |  +-----------------------------------------+
 |       |       |       |       |       |
 |    +-----+ +-----+ +-----+ +-----+ +-----+
 |    | 1:5 | | 1:8 | |1:10 | |1:20 | |1:30 |
 |    +-----+ +-----+ +-----+ +-----+ +-----+
 |
 |  +-----------------------------------------+
 +--| class 1:90 транзитный трафик (low-prio) |
    +-----------------------------------------+
$TC qdisc add dev $DEV_IN root handle 1:0 htb r2q 3
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL1 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL2 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL3 classid 1:1

    $TC filter add dev $DEV_IN parent 1:0 prio 5 handle 5  protocol ip fw flowid 1:5
    $TC filter add dev $DEV_IN parent 1:0 prio 8 handle 8  protocol ip fw flowid 1:8
    $TC filter add dev $DEV_IN parent 1:0 prio 10 handle 10 protocol ip fw flowid 1:10
    $TC filter add dev $DEV_IN parent 1:0 prio 20 handle 20 protocol ip fw flowid 1:20
    $TC filter add dev $DEV_IN parent 1:0 prio 30 handle 30 protocol ip fw flowid 1:30
    $TC filter add dev $DEV_IN parent 1:0 prio 90 handle 90 protocol ip fw flowid 1:90

    $TC class add dev $DEV_IN parent 1:0 classid 1:1 htb rate $RATE_LOCAL quantum 60000 prio 99
        $TC qdisc add dev $DEV_IN parent 1:1 pfifo

    $TC class add dev $DEV_IN parent 1:0 classid 1:2 htb rate $[90*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 1
        $TC class add dev $DEV_IN parent 1:2 classid 1:5  htb rate $[5*$RATE_IN/100]kbit  ceil ${RATE_IN}kbit prio 5
        $TC class add dev $DEV_IN parent 1:2 classid 1:8  htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 8
        $TC class add dev $DEV_IN parent 1:2 classid 1:10 htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 10
        $TC class add dev $DEV_IN parent 1:2 classid 1:20 htb rate $[45*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 20
        $TC class add dev $DEV_IN parent 1:2 classid 1:30 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 30

        $TC filter add dev $DEV_IN parent 5:  prio 5 protocol ip handle 8  flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 8:  prio 8 protocol ip handle 8  flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 10: prio 10 protocol ip handle 10 flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 20: prio 20 protocol ip handle 20 flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 30: prio 30 protocol ip handle 30 flow hash keys dst divisor 256

    $TC class add dev $DEV_IN parent 1:0 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 10
        $TC qdisc add dev $DEV_IN parent 1:90 handle 90: sfq perturb 30

при таком варианте игнорируются ceil классов 1:2 и 1:90, т.е. ни 1:2, ни 1:90 не могут «разгонятся» до 100%

второй вариант:

+---------+
| root 1: |
+---------+
 |
 |  +---------------------------------------------+
 +--| class 1:1 нетранзитный трафик               |
 |  +---------------------------------------------+
 |
 |  +---------------------------------------------+
 +--| class 1:2 транзитный трафик                 |
    +---------------------------------------------+
       |
       |  +-----------------------------------------+
       +--| class 1:3 (hi-prio)                     |
       |  +-----------------------------------------+
       |       |       |       |       |       |
       |    +-----+ +-----+ +-----+ +-----+ +-----+
       |    | 1:5 | | 1:8 | |1:10 | |1:20 | |1:30 |
       |    +-----+ +-----+ +-----+ +-----+ +-----+
       |
       |  +-----------------------------------------+
       +--| class 1:90 (low-prio)                   |
          +-----------------------------------------+
$TC qdisc add dev $DEV_IN root handle 1:0 htb r2q 3
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL1 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL2 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL3 classid 1:1

    $TC filter add dev $DEV_IN parent 1:0 prio 5 handle 5  protocol ip fw flowid 1:5
    $TC filter add dev $DEV_IN parent 1:0 prio 8 handle 8  protocol ip fw flowid 1:8
    $TC filter add dev $DEV_IN parent 1:0 prio 10 handle 10 protocol ip fw flowid 1:10
    $TC filter add dev $DEV_IN parent 1:0 prio 20 handle 20 protocol ip fw flowid 1:20
    $TC filter add dev $DEV_IN parent 1:0 prio 30 handle 30 protocol ip fw flowid 1:30
    $TC filter add dev $DEV_IN parent 1:0 prio 90 handle 90 protocol ip fw flowid 1:90

    $TC class add dev $DEV_IN parent 1:0 classid 1:1 htb rate $RATE_LOCAL quantum 60000 prio 99
        $TC qdisc add dev $DEV_IN parent 1:1 pfifo

    $TC class add dev $DEV_IN parent 1:0 classid 1:2 htb rate ${RATE_IN}kbit ceil ${RATE_IN}kbit prio 1
        $TC class add dev $DEV_IN parent 1:2 classid 1:3 htb rate $[90*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 1
            $TC class add dev $DEV_IN parent 1:3 classid 1:5  htb rate $[5*$RATE_IN/100]kbit  ceil ${RATE_IN}kbit prio 5
            $TC class add dev $DEV_IN parent 1:3 classid 1:8  htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 8
            $TC class add dev $DEV_IN parent 1:3 classid 1:10 htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 10
            $TC class add dev $DEV_IN parent 1:3 classid 1:20 htb rate $[45*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 20
            $TC class add dev $DEV_IN parent 1:3 classid 1:30 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 30

            $TC qdisc add dev $DEV_IN parent 1:5  handle 5:  sfq perturb 10
            $TC qdisc add dev $DEV_IN parent 1:8  handle 8:  sfq perturb 10
            $TC qdisc add dev $DEV_IN parent 1:10 handle 10: sfq perturb 10
            $TC qdisc add dev $DEV_IN parent 1:20 handle 20: sfq perturb 10
            $TC qdisc add dev $DEV_IN parent 1:30 handle 30: sfq perturb 10

        $TC class add dev $DEV_IN parent 1:2 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 90
            $TC qdisc add dev $DEV_IN parent 1:90 handle 90: sfq perturb 30

при таком варианте 1:90 съедает около 70% от допустимого rate родительского класса (1:2), оставляя с носом класс 1:3


подскажите, пожалуйста, ЧЯДНТ!


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.