Приложение Р. Описание скриптов пакета ecss-utils
В составе пакета ecss-utils присутствует 4 скрипта. Место расположения — /usr/bin/.
binarylog2text
Скрипт binarylog2text предназначен для конвертации бинарных логов подсистем ecss в текстовый файл.
Использование:
binarylog2text [Filename] [Output]:
- Filename — каталог/имя исходного файла;
- Output — каталог/имя выходного файла.
Пример:
sasha@ecss1:~$ binarylog2text /var/log/ecss/core/core1@ecss1/default.log.bin ~/core_default.log sasha@ecss1:~$ ls -l core_default.log -rw-rw-r-- 1 sasha sasha 0 Mar 16 00:11 core_default.log
binaryfold2text
Скрипт binaryfold2text предназначен для конвертации всех бинарных логов подсистем ecss-каталога в текстовый файл. Вызывает binarylog2text.
Использование:
binaryfold2text [-r] SOURCE_LOG_DIR DESTINATION_LOG_DIR — конвертирует бинарные логи из каталога источника и помещает результат в каталог назначения.
binaryfold2text [-r] SOURCE_LOG_DIR — конвертирует бинарные логи каталога источника в текущий каталог.
binaryfold2text [-r] — конвертирует бинарные логи в текущий каталог.
Опции:
-r, --удалить. Если используется, то бинарные логи будут удалены в случае успешной конвертации или нулевого размера файлов логов.
sasha@ecss1:~/log$ binaryfold2text /var/log/ecss/pa-sip/sip1@ecss1/ /home/sasha/log Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin to /home/sasha/log/default.log... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin to /home/sasha/log/siptrace.log... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.1 to /home/sasha/log/default.log.1... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.2 to /home/sasha/log/default.log.2... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.3 to /home/sasha/log/default.log.3... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.4 to /home/sasha/log/default.log.4... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.5 to /home/sasha/log/default.log.5... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.6 to /home/sasha/log/default.log.6... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.7 to /home/sasha/log/default.log.7... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.8 to /home/sasha/log/default.log.8... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.9 to /home/sasha/log/default.log.9... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.1 to /home/sasha/log/siptrace.log.1... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.2 to /home/sasha/log/siptrace.log.2... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.3 to /home/sasha/log/siptrace.log.3... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.4 to /home/sasha/log/siptrace.log.4... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.5 to /home/sasha/log/siptrace.log.5... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.6 to /home/sasha/log/siptrace.log.6... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.7 to /home/sasha/log/siptrace.log.7... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.8 to /home/sasha/log/siptrace.log.8... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.9 to /home/sasha/log/siptrace.log.9... done.
ecss-check-token
Скрипт ecss-check-token предназначен для проверки лицензионного ключа (токена).
Использование:
ecss-check-token [parameter]
Параметры:
-h --вывод справки;
-w --вывод номера кода исключения при ошибке.
sasha@ecss1:/usr/bin$ ecss-check-token -w eToken found (Bus 001 Device 002: ID 0529:0620 Aladdin Knowledge Systems Token JC). Cryptoki version 2.20 Manufacturer SafeNet, Inc. Library SafeNet eToken PKCS#11 (ver 9.0) Using slot 0 with a present token (0x0) Available slots: Slot 0 (0x0): AKS ifdh [Main Interface] 00 00 token label : ECSS 010079 token manufacturer : SafeNet, Inc. token model : eToken token flags : login required, rng, token initialized, PIN initialized, other flags=0x200 hardware version : 4.30 firmware version : 1.0 serial num : 022c8f30 pin min/max : 6/20 Slot 1 (0x1): (empty) Slot 2 (0x2): (empty) Slot 3 (0x3): (empty) Slot 4 (0x4): ETOKEN HID READER 0 (empty) Slot 5 (0x5): ETOKEN HID READER 1 (empty) Slot 6 (0x6): ETOKEN HID READER 2 (empty) Slot 7 (0x7): ETOKEN HID READER 3 (empty) Slot 8 (0x8): (empty) Slot 9 (0x9): (empty)
ecss-net-shaper
Скрипт ecss-net-shaper — это инструмент управления системой контроля трафика (Traffic Control) ядра Linux. В качестве основы использует стандартную утилиту tc Unix-систем.
Для работы утилиты необходимо написать конфигурационный файл. При использовании стирает текущую конфигурацию 'TC' на конфигурируемых интерфейсах, a также удаляет все IFB-интерфейсы при настройке контроля входящего трафика. После перезагрузки все изменения
сбрасываются.
Возможности
1. Ограничение исходящего трафика.
2. Ограничение входящего трафика через псевдо-устройствa IFB (Intermediate Functional Block).
3. Планирование передачи пакетов (приоритезация).
4. Распределение полосы пропускания.
5. Сглаживание пиков, выравнивание сетевой нагрузки.
6. Отбрасывание трафика, превышающего установленную полосу пропускания.
Использование
1. Простой вариант запуска:
- ./ecss-net-shaper.
В этом случае программа попытается найти файл bandwidth_tree.xml, а по мере выполнения спросит о необходимости применения конфигурации.
root@ecss1:/usr/bin# ecss-net-shaper Error reading XML file: open bandwidth_tree.xml: no such file or directory error: open bandwidth_tree.xml: no such file or directory
2. Флаг '-apply' позволяет применить конфигурацию без предварительного вопроса:
- ./ecss-net-shaper -apply=true
или просто:
- ./ecss-net-shaper -apply
3. Задать конфигурационный файл позволяет флаг '-file':
- ./ecss-net-shaper -file=net-shaper/examples/hfsc_htb.yaml
4. Отладочная информация включается флагом '-dbg':
- ./ecss-net-shaper -dbg
5. -help — подсказка по использованию:
- ./ecss-net-shaper -help
Конфигурация
ECSS-NET-SHAPER поддерживает работу с файлами в формате .xml и .yaml.
Контроль трафика осуществляется с помощью трёх сущностей:
- qdisc — дисциплина очереди. Очередь пакетов и закрепленный за ней алгоритм обработки. Всякий раз, когда ядру требуется отправить пакет на интерфейс, этот пакет ставится в очередь дисциплины, настроенной на этом интерфейсе.
- class — класс дисциплины. Логический контейнер, который может содержать несколько подклассов или дисциплину. Используется только с классовыми дисциплинами очередей (например, с дисциплинами HTB, HFSC).
- filter — фильтр трафика. Механизм классификации трафика. Распределяет пакеты по классам. Дисциплины и классы предназначены для построения дерева выбора.
Весь трафик разбивается на несколько общих классов (например, трафик до Отдела-1, трафик до специализированных внутренних серверов и т. д.), а затем каждый из них разбивается на несколько подклассов (например, трафик до DNS-сервера Отдела-1), за которыми уже могут
быть закреплены дисциплины. Чтобы управлять тем, дисциплиной какого класса будет обработан определенный тип трафика, классовые дисциплины позволяют подключать к себе фильтры.
Фильтры используют классификаторы для идентификации пакетов нужного типа, определяя каким классом они должны быть обработаны.
Существует несколько разных классификаторов. Самыми популярными являются u32 и fw. Первый позволяет выделять пакеты по исходящим адресам и адресам назначения, портам, парам "хост:порт", типам протокола и прочим параметрам пакета. Второй классифицирует
пакеты путем чтения маркировок, записанных брандмауэром iptables/netfilter (цель MARK).
За каждым сетевым интерфейсом могут быть закреплены две основные дисциплины:
- корневая дисциплина root qdisc — исходящий трафик;
- входящая дисциплина ingress qdisc — входящий трафик.
Основные параметры сущностей
Параметры дисциплины qdisc:
- dev — устанавливает имя сетевого интерфейса, за которым будет закреплена дисциплина. Требуется только для основных дисциплин root qdisc и ingress qdisc;
- qtype — тип дисциплины (sfq, fq_codel, htb, hfsc, ...);
- perturb — число секунд, после которого происходит перерасчет длины потоков (используется для бесклассовой дисциплины sfq);
- Ingress — помечает дисциплину для обработки входящего трафика.
Параметры класса class:
- qtype — тип очереди класса (sfq, fq_codel, htb, hfsc, ...);
- default — класс по умолчанию. Весь неклассифицированный трафик будет ходить через этот класс;
- rate — пропускная способность класса;
- ceil — максимальная пропускная способность класса, при наличии свободной полосы у родителя (используется для дисциплины htb).
Пропускная способность задаётся в следующих единицах измерения:
- kbit — Kilobits per second;
- mbit — Megabits per second;
- gbit — Gigabits per second;
- tbit — Terabits per second;
- bps — Bytes per second;
- kbps — Kilobytes per second;
- mbps — Megabytes per second;
- gbps — Gigabytes per second;
- tbps — Terabytes per second.
Параметры фильтра filter:
- protocol — тип протокола обрабатываемых пакетов (ip);
- prio — приоритет просмотра фильтров;
- u32-match — параметры классификатора 'U32' (man tc-u32);
- basic-match — параметры классификатора 'basic' (man tc-basic);
- fw-match — параметры классификатора 'FW' (man tc-fw);
- police — параметры полисинга (man tc-police).
Помимо представленных параметров, существует общий параметр other, предназначенный для добавления специфических настроек сущностей.
Идентификаторы сущностей, родителей и flowid-фильтров прописываются автоматически.
Примеры конфигурации
YAML — конфигурация состоит из иерархии вложенных массивов qdisc, class и filter, каждый элемент которых имеет атрибут param, представляющий собой словарь параметров своей сущности:
qdisc: # Конфигурация корневой и исходящей дисциплин HFSC для интерфейса "enp0s3"
- # Корневая дисциплина исходящего трафика
param: {dev: enp0s3, qtype: hfsc}
class:
- # Родительский класс с приоритетом реального времени
param: {qtype: hfsc rt, rate: 50mbit}
class:
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 30mbit, ceil: 40mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 3
param: {protocol: ip, prio: 2, fw-match: handle 3}
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 20mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 6
param: {protocol: ip, prio: 3, fw-match: handle 6}
filter:
- # Классификация пакетов по адресу назначения
param: {protocol: ip, prio: 1, u32-match: 'ip dst 192.168.23.53/32'}
- # Классификация пакетов по порту источника
param: {protocol: ip, prio: 1, u32-match: 'ip sport 4041 0xffff'}
- # Класс по умолчанию для неклассифицированного трафика с разделяемой полосой
param: {qtype: hfsc ls, rate: 15mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
- # Дисциплина входящего трафика
param: {dev: enp0s3, qtype: hfsc, ingress: yes}
class:
- # Класс по умолчанию для неклассифицированного трафика
param: {qtype: hfsc rt, rate: 50mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
XML — конфигурация отличается от YAML только синтаксисом. Тут сущности выражены через тэги, а параметры записываются в качестве их атрибутов.
В конфигурации, представленной ниже, настраивается распределение трафика с помощью дисциплин HTB и SFQ:
<?xml version="1.0" encoding="UTF-8"?>
<Bandwidth>
<qdisc dev="enp0s3" qtype="htb">
<class qtype="htb" rate="60mbit" ceil="100mbit">
<class qtype="htb" rate="10mbit" ceil="30mbit" default="yes">
<qdisc qtype="htb">
<class qtype="htb" rate="15mbit">
<filter protocol="ip" prio="1" u32-match="ip src 10.25.72.53/32"/>
</class>
</qdisc>
<filter protocol="ip" prio="2" u32-match="ip src 10.25.72.0/24 and ip tos 0x10 0xff"/>
<filter protocol="ip" prio="3" fw-match="handle 6"/>
</class>
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1"
basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/>
</class>
</class>
</qdisc>
<qdisc dev="enp0s3" qtype="htb" ingress="yes">
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 192.168.23.0/24" police="rate 10mbit burst 1000k continue"/>
<filter protocol="ip" prio="1" u32-match="ip dport 5060 0xffff" police="rate 25mbit burst 2500k drop"/>
<filter protocol="ip" prio="1" u32-match="ip tos 0x10 0xff" police="rate 15mbit burst 1500k reclassify"/>
<class qtype="htb" rate="10mbit" default="yes">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 0.0.0.0/24"/>
</class>
</class>
</qdisc>
</Bandwidth>
Разберём классификатор basic из примера:
<filter ... basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/>
В данном случае осуществляется отбор пакетов, у которых порт источника входит в интервал между портами 9999 и 40000:
- u16 — говорит о том, что мы будет сравнивать 16 бит (можно указать u32 и u8);
- at 0 layer transport — задаёт отступ в битах, от транспортного уровня пакета, откуда будет происходить сравнение. Здесь отступ нулевой, поэтому сравниваются первые 16 бит пакета, т. е. порт источника;
- gt 9999 — проверяет, больше ли порт источника, чем 9999;
- lt 40000 — проверяет, меньше ли порт источника, чем 40000.
Также можно обратить внимание на классификатор u32:
<filter ... u32-match="ip src 10.25.72.0/24 and ip tos 0x10 0xff"/>
Он объединяет несколько условий через ключевое слово "and", осуществляя отбор трафика для подсети 10.25.72.0/24 c параметром ToS: 0x10.
- 0xff — маска, накладываемая на параметр ToS перед сравнением.
В данный момент ECSS-NET-SHAPER реализован преимущественно для работы с дисциплинами sfq, fq_codel, htb, hfsc.
Но в любом случае, при необходимости, есть возможность использовать параметр "other" и прописывать туда все необходимые параметры вручную, как при обычном использовании утилиты tc.
Пример использования
Файлы конфигурации настроены следующим образом:
qdisc: # Конфигурация корневой и исходящей дисциплин HFSC для интерфейса "enp0s3"
- # Корневая дисциплина исходящего трафика
param: {dev: enp4s0, qtype: hfsc}
class:
- # Родительский класс с приоритетом реального времени
param: {qtype: hfsc rt, rate: 50mbit}
class:
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 30mbit, ceil: 40mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 3
param: {protocol: ip, prio: 2, fw-match: handle 3}
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 20mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 6
param: {protocol: ip, prio: 3, fw-match: handle 6}
filter:
- # Классификация пакетов по адресу назначения
param: {protocol: ip, prio: 1, u32-match: 'ip dst 192.168.1.14/32'}
- # Классификация пакетов по порту источника
param: {protocol: ip, prio: 1, u32-match: 'ip sport 6001 0xffff'}
- # Класс по умолчанию для неклассифицированного трафика с разделяемой полосой
param: {qtype: hfsc ls, rate: 15mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
- # Дисциплина входящего трафика
param: {dev: enp4s0, qtype: hfsc, ingress: yes}
class:
- # Класс по умолчанию для неклассифицированного трафика
param: {qtype: hfsc rt, rate: 10mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
?xml version="1.0" encoding="UTF-8"?>
<Bandwidth>
<qdisc dev="enp4s0" qtype="htb">
<class qtype="htb" rate="60mbit" ceil="100mbit">
<class qtype="htb" rate="10mbit" ceil="30mbit" default="yes">
<qdisc qtype="htb">
<class qtype="htb" rate="15mbit">
<filter protocol="ip" prio="1" u32-match="ip src 192.168.1.14/32"/>
</class>
</qdisc>
<filter protocol="ip" prio="2" u32-match="ip src 192.168.1.0/24 and ip tos 0x10 0xff"/>
<filter protocol="ip" prio="3" fw-match="handle 6"/>
</class>
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1"
basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/>
</class>
</class>
</qdisc>
<qdisc dev="enp4s0" qtype="htb" ingress="yes">
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 10.16.33.0/24" police="rate 10mbit burst 1000k continue"/>
<filter protocol="ip" prio="1" u32-match="ip dport 5060 0xffff" police="rate 25mbit burst 2500k drop"/>
<filter protocol="ip" prio="1" u32-match="ip tos 0x10 0xff" police="rate 15mbit burst 1500k reclassify"/>
<class qtype="htb" rate="10mbit" default="yes">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 0.0.0.0/24"/>
</class>
</class>
</qdisc>
</Bandwidth>
Вывод команды net-shaper с использованием yaml-файла конфигурации:
sasha@ecss2:~/script/netshaper$ sudo ./ecss-net-shaper -file=ecss2.yaml -dbg Config: {[{{0 enp4s0 hfsc } [{{0 hfsc rt 50mbit } [] [{{ip 1 ip dst 192.168.1.14/32 }} {{ip 1 ip sport 6001 0xffff }}] [{{0 htb 30mbit 40mbit } [{{0 sfq 10 } [] []}] [{{ip 2 handle 3 }} Apply configuration (y/n)?y Applying сonfiguration... Pre-configuration: -> tc qdisc del dev enp4s0 root &> /dev/null -> tc qdisc del dev enp4s0 ingress &> /dev/null -> tc qdisc del dev ifb0 root &> /dev/null -> tc qdisc del dev ifb0 ingress &> /dev/null -> modprobe -r ifb &> /dev/null -> modprobe ifb numifbs=1 -> ip link set dev ifb0 up Configuration: -> tc qdisc add dev enp4s0 root handle 1: hfsc default 2 -> tc class add dev enp4s0 parent 1: classid 1:1 hfsc rt rate 50mbit -> tc class add dev enp4s0 parent 1:1 classid 1:11 htb rate 30mbit ceil 40mbit -> tc qdisc add dev enp4s0 parent 1:11 handle 110:0 sfq perturb 10 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 2 handle 3 fw flowid 1:11 -> tc class add dev enp4s0 parent 1:1 classid 1:12 htb rate 20mbit -> tc qdisc add dev enp4s0 parent 1:12 handle 120:0 sfq perturb 10 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 3 handle 6 fw flowid 1:12 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.14/32 flowid 1:1 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 1 u32 match ip sport 6001 0xffff flowid 1:1 -> tc class add dev enp4s0 parent 1: classid 1:2 hfsc ls rate 15mbit -> tc qdisc add dev enp4s0 parent 1:2 handle 20:0 fq_codel -> tc qdisc add dev enp4s0 handle ffff: ingress -> tc filter add dev enp4s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 -> tc qdisc add dev ifb0 root handle 1: hfsc default 1 -> tc class add dev ifb0 parent 1: classid 1:1 hfsc rt rate 10mbit -> tc qdisc add dev ifb0 parent 1:1 handle 10:0 fq_codel Post-configuration: Applying configuration finished. Error cnt: 0
Вывод команды net-shaper с использованием xml-файла конфигурации:
sasha@ecss2:~/script/netshaper$ sudo ./ecss-net-shaper -file=ecss2.xml -dbg Config: {[{{0 enp4s0 htb } [{{0 htb 60mbit 100mbit } [] [] [{{0 htb yes 10mbit 30mbit } [{{0 htb } [{{0 htb 15mbit } [] [{{ip 1 ip src 192.168.1.14/32 }}] []}] []}] [{{ip 2 ip src 192.168.1. Apply configuration (y/n)?y Applying сonfiguration... Pre-configuration: -> tc qdisc del dev enp4s0 root &> /dev/null -> tc qdisc del dev enp4s0 ingress &> /dev/null -> tc qdisc del dev ifb0 root &> /dev/null -> tc qdisc del dev ifb0 ingress &> /dev/null -> modprobe -r ifb &> /dev/null -> modprobe ifb numifbs=1 -> ip link set dev ifb0 up Configuration: -> tc qdisc add dev enp4s0 root handle 1: htb default 11 -> tc class add dev enp4s0 parent 1: classid 1:1 htb rate 60mbit ceil 100mbit -> tc class add dev enp4s0 parent 1:1 classid 1:11 htb rate 10mbit ceil 30mbit -> tc qdisc add dev enp4s0 parent 1:11 handle 110:0 htb -> tc class add dev enp4s0 parent 110: classid 110:1 htb rate 15mbit -> tc filter add dev enp4s0 protocol ip parent 110:0 prio 1 u32 match ip src 192.168.1.14/32 flowid 110:1 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 2 u32 match ip src 192.168.1.0/24 match ip tos 0x10 0xff flowid 1:11 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 3 handle 6 fw flowid 1:11 -> tc class add dev enp4s0 parent 1:1 classid 1:12 htb rate 50mbit -> tc qdisc add dev enp4s0 parent 1:12 handle 120:0 sfq perturb 10 -> tc filter add dev enp4s0 protocol ip parent 1:0 prio 1 basic match "cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)" flowid 1:12 -> tc qdisc add dev enp4s0 handle ffff: ingress -> tc filter add dev enp4s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 -> tc qdisc add dev ifb0 root handle 1: htb default 11 -> tc class add dev ifb0 parent 1: classid 1:1 htb rate 50mbit -> tc qdisc add dev ifb0 parent 1:1 handle 10:0 sfq perturb 10 -> tc class add dev ifb0 parent 1:1 classid 1:11 htb rate 10mbit -> tc qdisc add dev ifb0 parent 1:11 handle 110:0 sfq perturb 10 -> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/24 flowid 1:11 -> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 10.16.33.0/24 police rate 10mbit burst 1000k continue flowid 1:1 -> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip dport 5060 0xffff police rate 25mbit burst 2500k drop flowid 1:1 -> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip tos 0x10 0xff police rate 15mbit burst 1500k reclassify flowid 1:1 Post-configuration: Applying configuration finished. Error cnt: 0