Jump to content
Калькуляторы

Не работает BPF-классификатор для tc

Разбираюсь с шейпером на таком простом примере:

 

# шейпим исходящий трафик, корневая дисциплина — HTB
tc qdisc add dev enp3s0 root handle 1: htb default 99 r2q 1000

# корневой класс на ~20-мегабитный линк
tc class add dev enp3s0 parent 1: classid 1:1 htb rate 18000kbit burst 10k

# дочерний класс, допустим, сюда мы хотим засунуть ICMP
tc class add dev enp3s0 parent 1:1 classid 1:11 htb rate 100kbit ceil 18000kbit prio 1 quantum 2000

# дочерний класс по умолчанию для неклассифицированного трафика
tc class add dev enp3s0 parent 1:1 classid 1:99 htb rate 100kbit ceil 18000kbit prio 2 quantum 2000              

# навешиваем fq_codel на дочерние классы
tc qdisc add dev enp3s0 parent 1:11 handle 11: fq_codel
tc qdisc add dev enp3s0 parent 1:99 handle 99: fq_codel

# собственно, фильтр для ICMP
tc filter add dev enp3s0 parent 1: bpf run bytecode "$(tcpdump -ienp3s0 -ddd 'ip proto 1' | tr '\n' ',')" flowid 1:11

 

Счётчики для 1:11 после такого лежат в нулях, весь трафик валит в 1:99. Если фильтр заменить на обычный u32, то всё ОК:

 

tc filter add dev enp3s0 parent 1: u32 match ip protocol 1 0xff flowid 1:11

 

Самое плохое то, что всё это на BPF раньше работало. Не могу понять, что поменялось или сломалось при очередном апгрейде.

 

Arch, ядро v4.7.6, стоковое.

Share this post


Link to post
Share on other sites

Решение: BPF-программа должна возвращать либо правильный snaplen, чтобы самостоятельно классифицировать трафик по классам, либо -1, чтобы было поведение, как раньше.

 

Детали: https://www.linux.org.ru/forum/admin/12946729

Share this post


Link to post
Share on other sites

Когда-то давно тестил по CPU — с включенным JIT ведёт себя замечательно. Данных, к сожалению, не осталось. Всё, что могу сказать сейчас — правила писать намного проще и приятнее, ибо синтаксис pcap.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.