В составе пакета 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}
YML


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>

XML


Разберём классификатор basic из примера:

<filter ... basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/>
CODE

В данном случае осуществляется отбор пакетов, у которых порт источника входит в интервал между портами 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"/>
CODE

Он объединяет несколько условий через ключевое слово "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}

YML
?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>

XML

Вывод команды 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