Beta-версия 14.2

Изменения в версии 14.1 BETA1

DPI

[dpdk] Переход на новую версию dpdk 25.11

[DPI][nat] Оптимизация при переполнении кэша серый-белый

[CLI][vlan] В команду `vlan rule dump` добавлен параметр - какой тип правил выводить

vlan rule dump [type]
type - rule type: 'perm', 'dhcp', 'all' (default)
Вывести разрешения для VLAN:
vlan rule dump perm
Вывести правила только для DHCP:
vlan rule dump dhcp
Вывести все правила:
vlan rule dump

[CLI][DPI] Вывод команды fdpi_cli dump flow cache format расширен новыми полями

Формат вывода 'dump flow'
Пример :
nthr=1 slic=3 proto=6 ip_1=192.168.4.20:65163 ip_2=217.69.133.145:443 ssid=1675E5CF5FB1337 dpip=91 ittr=16 tmlb='2019/10/30 02:02:51, -357.642147s (4148500652028035 ticks)' ialf=0 drct=0x1 iown=1 ilst=1 btsip=0x2 tcpbts_0='-APRSF' tcpbts_1='-AP-S-' qoest=0 qoef_0=0 qoef_1=0 qoer_0=6 qoer_1=6 whip=94.140.198.86:33326 itrnsld=1 igcache=0 gre_pid=0 gre_mtd=0
по полям :
nthr=1 - номер потока куда помещена запись ( для мультикластера может не совпадать с iown )
slic=3 - номер slice кэша
proto=6 - ip протокол
ip_1=192.168.4.20:65163 ip_2=217.69.133.145:443 - пара ip адресов и портов идентифицирующие запись. Если у протокола нет портов - последние 0
ssid=1675E5CF5FB1337 - идентификатор сессии
dpip=91 - протокол DPI
ittr=16 - индекс в очереди использования повторных записей
tmlb='2019/10/30 02:02:51, -357.642147s (4148500652028035 ticks)' - время последнего обращения к записи
ialf=0 - номер очереди обработки :
en_nalfs_shrt = 0, // очередь с коротким временем жизни
en_nalfs_long = 1, // долгоиграющая очередь
drct=0x1 - при каких условиях создана запись :
младшие 4 бита задают :
направление пакета , при котором создан ключ :
и соответственно принадлежность src_ip и dst_ip
drct = h_ip_1 < h_ip_2 :
drct == 0 - h_ip_1 - src_ip
drct == 1 - h_ip_1 - dst_ip
старшие 4 бита задают flw_dir при котором был создан ключ
iown=1 - номер потока, который создал запись
ilst=1 - номер потока, который последний раз обрабатывал запись
btsip=0x2 - служебные биты обработки flow
tcpbts_0='-APRSF' tcpbts_1='-AP-S-' - биты TCP соединения в двух направлениях :
( tcp_bits_ & 0x0020 ) ? 'U' : '-'
( tcp_bits_ & 0x0010 ) ? 'A' : '-'
( tcp_bits_ & 0x0008 ) ? 'P' : '-'
( tcp_bits_ & 0x0004 ) ? 'R' : '-'
( tcp_bits_ & 0x0002 ) ? 'S' : '-'
( tcp_bits_ & 0x0001 ) ? 'F' : '-'
qoest=0 - статус QoE :
enst_none = 0, //
enst_ack, // ждем подтверждающий ACK от клиента на SYN+ACK от сервера
enst_fin_ack, // ждем подтверждающий FIN+ACK от сервера на FYN от клиента
enst_ack_srvfin, // ждем подтвердающий ACK от сервера на FIN+ACK от клиента ( сервер первый послал FIN )
qoef_0=0 qoef_1=0 - кол-во фрагментированных пакетов в двух направлениях
qoer_0=6 qoer_1=6 - кол-во ретрансмитов в двух направлениях
pktp_0=1 pktp_1=0 - количество пакетов с payload в двух направлениях, но не более 65000
btsp_0=1 btsp_1=0 - объем payload в двух направлениях, но не более 65K
whoisc=0 или 1 - кто инициировал соединение
Опционально - если еть NAT трансляция :
whip=94.140.198.86:33326 - выделенный белый адрес+порт
itrnsld=1 - индекс данных профиля по которому был выделен белый адрес
igcache=0 - индекс в соответствующем кэше-slice перекодировки серый --> белый
gre_pid=0 - опеределенный callid
gre_mtd=0 - метод выделения белого адреса для GRE

[BALANCER] Добавлена возможность использования vlan rule для фильтрации пакетов

[dpdk] Add: новая опция `dpdk_max_memzone`

[cold] Установка DPDK max memzone count
По умолчанию, в DPDK max memzone count = 5120 (зависит от версии DPDK)
0 - использовать default-значение, зашитое в DPDK
Устанавливать больше имеет смысл для huge-конфигураций со многими картами,
если на старте fastdpi получаем ошибку "Number of requested memzone segments exceeds maximum 5120"
#dpdk_max_memzone=0

[CLI][dhcp-dual] Add: поддержка команды `dhcp show stat vrf`

[dpdk] Новый engine dpdk_engine=7 с поддержкой явного указания диспетчеров

Данный движок поддерживает гетерогенные конфигурации, когда в одном кластере
находятся порты разного типа - например, in-dev 100G порт, out-dev - несколько 10G портов.
Диспетчеры задаются в опциях dpdk_dispatch:
```
dpdk_dispatch=<список-портов>[;params]*
```
`<Список-портов>` задает, какие порты обслуживает данный диспетчер, а `params` - дополнительные опции данного диспетчера. Доступные опции:
- `rss=N` - включение RSS на всех портах данного диспетчера; будет создано N диспетчеров - по одному на каждую rx-очередь.
- `mempool_size=N` - размер mbuf_pool для данного диспетчера. Каждый `dpdk_dispatch` имеет свой mempool, размер пулов может быть разным для разных `dpdk_dispatch`.
Опций `dpdk_dispatch` может быть много, каждая описывает отдельный диспетчер (или группу диспетчеров, если задано rss). Каждый порт кластера должен входить ровно в один параметр `dpdk_dispatch`.
Для on-stick в `dpdk_dispatch` описывается *базовый* физический порт, а не on-stick порты, основанные на нем.
Фатальными ошибками конфигурации считаются следующие случаи:
- порт кластера не входит ни в какой `<список-портов>` параметра `dpdk_dispatch`
- порт кластера входит в `<список-портов>` нескольких различных параметров `dpdk_dispatch`
- в `<списке-портов>` параметра `dpdk_dispatch` перечислены порты из разных кластеров, - каждый диспетчер должен обслуживать порты только одного кластера
Данный движок является универсальным в том смысле, что через него могут быть выражены все
остальные движки, например:
```
dpdk_engine=0: один диспетчер на все порты
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1,port2,port3,port4
dpdk_engine=1: диспетчер на направление
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1,port2
dpdk_dispatch=port3,port4
dpdk_dispatch=2: диспетчер на направление c поддержкой RSS
dpdk_rss=4
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1,port2;rss=4
dpdk_dispatch=port3,port4;rss=4
dpdk_engine=3: диспетчер на мост
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1,port3
dpdk_dispatch=port2,port4
dpdk_engine=4: диспетчер на порт
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1
dpdk_dispatch=port2
dpdk_dispatch=port3
dpdk_dispatch=port4
dpdk_engine=6: диспетчер на мост с поддержкой RSS
dpdk_rss=4
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1,port3;rss=4
dpdk_dispatch=port2,port4;rss=4
Для диспетчера необходимо указывать используемый mempool.
// Описатель mempool - только для dpdk_engine=7
// Формат:
// dpdk_mempool=name=<name>;size=N
// name задает имя mempool (max 15 символов)
// size задает размер (число элементов) mempool
// Оба параметра являются обязательными
// Опций dpdk_mempool может быть много, каждая описывает отдельный mempool
dpdk_mempool=...
// Описатель диспетчера - только для dpdk_engine=7
// Формат:
// dpdk_dispatch=<список-портов>;mempool=<имя>[;params]*
// <Список-портов> задает, какие порты обслуживает данный диспетчер, а params - дополнительные
// опции данного диспетчера. Доступные опции:
// mempool=<имя> - задает имя mempool для данного диспетчера (обязательный параметр)
// rss=N - включение RSS на всех портах данного диспетчера; будет создано N диспетчеров -
// по одному на каждую rx-очередь.
// Опций dpdk_dispatch может быть много, каждая описывает отдельный диспетчер (или группу
// диспетчеров, если задано rss)
dpdk_dispatch=...

[IPFIX] Исправлена ошибка при изменении опции ipfix_dev