Используя tc, я хочу, чтобы TCP и UDP использовали один и тот же буфер

У меня есть 2 типа трафика

  1. TCP
  2. UDP

Я хочу применить к ним 2 разных фильтра, 1 Мбит / с для UDP и 7 Мбит / с для TCP

Но я хочу, чтобы их трафик использовал общий буфер размером 100 пакетов

Я написал следующий сценарий оболочки

#!/bin/bash #Size of the queue qlen=$1 #Delay per link sdelay=$3 tcp_rate=7Mbit udp_rate=1Mbit total_rate=8Mbit function add_qdisc { # deleting default qdisc dev=$1 tc qdisc del dev $dev root echo qdisc removed # adding custom qdisc tc qdisc add dev $dev root handle 1:0 htb default 1 echo qdisc added # creating classes for tcp and udp traffic tc class add dev $dev parent 1:0 classid 1:1 htb rate $total_rate ceil $total_rate tc class add dev $dev parent 1:1 classid 1:11 htb rate $udp_rate ceil $udp_rate tc class add dev $dev parent 1:1 classid 1:12 htb rate $tcp_rate ceil $tcp_rate echo classes created # creating link delays and queues tc qdisc add dev $dev parent 1:1 handle 10: netem delay $sdelay limit $qlen echo "delay and queue added" # matching the tcp/udp traffic to the appropriate class tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x11 0xff flowid 1:11 tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x06 0xff flowid 1:12 tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x01 0xff flowid 1:12 echo filters added } add_qdisc s1-eth1 add_qdisc s1-eth2 add_qdisc s3-eth1 add_qdisc s3-eth2 add_qdisc s6-eth1 add_qdisc s6-eth2 

Но я получаю сообщение об ошибках RTNETLINK answers: Invalid argument когда я добавляю размер буфера к узлу tc tree 1:1

Когда я добавляю буфер для 1:1 ребенка, скажем 1:11 , скрипт работает отлично.

Можно ли добавить размер буфера в 1:1 поскольку я хочу, чтобы оба трафика использовали общий буфер?

PS: Я только начал изучать команду tc

EDIT Обновлен udp_rate до 1 Мбит / с

One Solution collect form web for “Используя tc, я хочу, чтобы TCP и UDP использовали один и тот же буфер”

Вы не можете разделить буфер между двумя qdiscs в tc.
Хотя, поскольку ваша полоса пропускания является статической, было бы целесообразно жестко скопировать пакет split: 12 и 88.

 tc qdisc add dev $dev parent 1:11 handle 9: netem delay $sdelay limit $qlen_udp tc qdisc add dev $dev parent 1:12 handle 10: netem delay $sdelay limit $qlen_tcp 

Если ваши UDP-пакеты являются небольшими, вам может понадобиться адаптировать значение от 12 до 20-30, чтобы сохранить возможность буферизации и поддержания низкой задержки (до действия netem).

Почему вы пишете эту функцию как с общим доступом к сети, так и с буфером? Что вы пытаетесь показать?

  • UDP для Linux и Mac?
  • Альтернатива DNS для внутренних серверов
  • почему ss (8) понимает прослушивание портов UDP по-другому, чем netstat (8)?
  • Почему пропускная способность TCP намного больше, чем пропускная способность UDP?
  • Когда ядро ​​сокращает дейтаграмму UDP в куски MTU?
  • Сканирование одного или всех портов, по протоколу UDP или всех протоколов, чтобы узнать, получаю ли я, что я могу получить
  • Beaglebone Black не может отправлять сырые пакеты UDP с Python на ноутбук под управлением Ubuntu 16.04
  • Управление потоковой строкой командной строки из netcat
  • Почему мое приложение не получает широковещательные пакеты?
  • Как слушать все порты (UDP и TCP) или сделать их все открытыми в Debian
  • Как заменить пакеты udp на лету
  • Linux и Unix - лучшая ОС в мире.