tc u32 — как соответствовать протоколам L2 в недавних ядрах?

Можно также попробовать TSPrint от terminalworks. Их приложение не является столь же дорогим. http://www.terminalworks.com/tsprint.php

12
задан 19 March 2012 в 12:18
5 ответов

Я бы рекомендовал использовать wirehark, чтобы фиксировать, что происходит интерфейс, видимый в пользовательском пространстве, и использующий его для написания фильтра. Мне интересно, возможно, интерфейс по какой-то причине удаляет теги VLAN (несмотря на то, что он настроен для прозрачного моста). Может быть, добавляются дополнительные теги или что-то в этом роде?

1
ответ дан 2 December 2019 в 21:39

Попробуйте отключить параметр reorder_hdr на интерфейсе vlan. Если включена опция изменения порядка заголовков, то теги из фреймов удаляются. Проверьте это командой ip -d список ссылок dev vlan_iface .

0
ответ дан 2 December 2019 в 21:39

Вы можете пометить пакеты vlan с помощью ebtables .

# mark packets according to the vlan id
ebtables -i br0 -A PREROUTING -p 802_1Q --vlan-id 1 -j mark --mark-set 1
ebtables -i br0 -A PREROUTING -p 802_1Q --vlan-id 5 -j mark --mark-set 2

Затем нанесите формовку по разметке. ebtables и iptables имеют одинаковую маркировку.

Сам еще не делал этого. Так что это скорее догадка.

1
ответ дан 2 December 2019 в 21:39

Тег VLAN удаляется из skb в последних ядрах. Попробуйте сделать что-то вроде этого, чтобы выполнить мета-соответствие в skb:

tc filter add dev internal protocol all parent 1:0 prio 100 basic match 'meta(vlan mask 0xfff eq 0x0ed8)' flowid 1:300
4
ответ дан 2 December 2019 в 21:39

Я должен был сделать именно это. Я обнаружил, что ответ, предложенный @Thusitha, был правильным способом сделать это для новых ядер.

Протестировано с ядром Debian wheezy 3.2.0-4 и iproute (откуда берется команда tc) версии 20120521-3 + b3

Вот полный скрипт, строки tc filter почти точно соответствуют заданным @Thusitha

function qos() {
    if="$1"
    vlan1="$2"
    vlan2="$3"

    # delete previous
    tc qdisc del dev $if root >/dev/null 2>&1
    tc qdisc del dev $if ingress >/dev/null 2>&1

    # Root HTB for $if
    tc qdisc add dev $if root handle 1: htb r2q 1 default 1

    # Root class to borrow from
    tc class add dev $if parent 1: classid 1:1 htb quantum 1000000 rate 500mbit ceil 500mbit burst 64k prio 2
    tc qdisc add dev $if parent 1:1 handle 101 sfq perturb 10

    # class for vlan1
    tc class add dev $if parent 1:1 classid 1:106 htb quantum 1000000 rate 1.00mbit ceil 1.00mbit burst 6k
    tc qdisc add dev $if parent 1:106 handle 107 sfq perturb 10
    tc filter add dev $if protocol all parent 1: prio 100 basic match "meta(vlan mask 0xfff eq ${vlan1})" flowid 1:106

    # class for vlan2
    tc class add dev $if parent 1:1 classid 1:108 htb quantum 1000000 rate 1.00mbit ceil 10.00mbit burst 6k
    tc qdisc add dev $if parent 1:108 handle 108 sfq perturb 10
    tc filter add dev $if protocol all parent 1: prio 100 basic match "meta(vlan mask 0xfff eq ${vlan2})" flowid 1:108

}

qos eth1 1234 1235
qos eth2 2345 2346
3
ответ дан 2 December 2019 в 21:39

Теги

Похожие вопросы