fdpi_ctrl list all status --service 11rating_group_count=0 — число rating group, 0 — RG отключены. Значение по умолчанию: 0 rg4 tbf rate 1Mbit burst 1Mbit inbound.rate 8Mbit inbound.burst 1Mbit quota 100MB report rg5 tbf rate 8Mbit burst 1Mbit inbound.rate 8Mbit inbound.burst 1Mbit quota 1GB block
report и block — это доступные действия по достижении квоты: report — сообщить о достижении квоты, но пропускать трафик далее; block — сообщить о достижении квоты и блокировать трафик по данной рейтинг-группе
cat rg.txt | lst2rg rg.bin
cp rg.bin /var/lib/dpi/rg.bin
fdpi_ctrl load profile --service 20 --profile.name rg1 --profile.json '{ "rg_list" : "/var/lib/dpi/rg.bin" }'
max_profiles_serv20 — настройка максимального количества профилей. По умолчанию — 32.
Утилита rg2lst позволяет декодировать динарный файл в читаемый вид:
rg2lst rg.bin > rg.txt
fdpi_cli dump flow cache command.ipfix_reserved=1:tmst='2026/04/22 23:42:30, -00:00:00.590 (154240017032649165 ticks)' — время начала сессииpkts_0=15 pkts_1=16 — число переданных пакетов в двух направленияхbts_0=5304 bts_1=9092 — число переданных байт в двух направленияхpktd_0=0 pktd_1=0 — число отброшенных пакетов в двух направленияхbtd_0=0 btd_1=0 — число отброшенных байт в двух направленияхhost='waa-pa.clients6.google.com' — имя хоста если есть в протоколеtethN, где возможные варианты:rgN, где возможные варианты:
http cs0 teth1 rg1
https cs0 teth1 rg1
http cs0 teth2 rg2
https cs0 teth2 rg2
dns cs1 teth1 rg1
dns cs1 teth2 rg2
default cs7 teth0 rg3
В данном примере по http, https протоколам отслеживается тетеринг и в зависимости от этого назначается соответсвующая rg. Отметим, что класс полисинга cs один и тот же. Аналогично по dns протоколу. По ВСЕМ остальным протоколам (default) нет контроля тетеринга и указана отдельная rg.
cat example.txt|lst2dscp /tmp/example.bin
dscp2lst /tmp/example.bin
fdpi_ctrl load profile --service 18 --profile.name test_dscp --profile.json '{ "dscp" : "/tmp/example.bin" }'
fdpi_ctrl load --service 18 --profile.name test_dscp --login test_subs
Проверяем
fdpi_ctrl list --service 18 --login test_subs
В трассировке добавлено поле rg=N
bras_term_by_as=1 в ситуации, когда srcAS не помечена как term, изменения ethernet src/dst MAC не происходило.lldp):enable — включение поддержки LLDP (булевый флаг). По умолчанию, если в файле конфигурации есть секция lldp, то enable=on; если такой секции нет, enable=offchassis — строка — значение Chassis-Id. TLV Chassis-Id является обязательным в LLDP-пакете. Если не задано — полагается равным MAC-адресу, заданному в опции bras_arp_mac, если этой опции нет — MAC-адресу портаttl — число — значение TTL в секундах, по умолчанию 120src_mac — MAC-адрес — значение source MAC в ethernet-заголовке LLDPDU. Если не задано — полагается равным MAC-адресу, заданному в опции bras_arp_mac, если этой опции нет — MAC-адресу портаdest_mac — MAC-адрес — значение dest MAC в ethernet-заголовке LLDPDU. По умолчанию — 01:80:c2:00:00:0e (LLDPDU multicast)system_name — строка — значение TLV System-Name пакета LLDPDU. Если не задано — TLV System-Name не включается в LLDPDU.system_desc — строка — значение TLV System-Desc пакета LLDPDU. Если не задано — TLV System-Desc не включается в LLDPDU.device=<имя_порта>;enable=<on|off>;desc=<port_desc> — имена портов, для которых надо посылать LLDPDU. Каждый порт задается в отдельном параметре device, имя порта — то, что задано в in_dev/out_dev. Для каждого порта можно задать следующие опции:enable=on|off — включить или отключить отправку LLDPDU для этого порта, по умолчанию on (включено)desc=строка — значение TLV Port-Desc пакета LLDPDU; если не задано — TLV Port-Desc не включается в LLDPDUtrace — включение трассировки LLDP (булевый флаг)pcap — запись LLDP-пакетов в PCAP (булевый флаг)lldp enable, lldp disable — позволяют включать/выключать формирование LLDP-пакетовnat_tcp_max_sessions/nat_udp_max_sessions, задающих ограничения на количество выданных белых портов, исправлено уменьшение счетчика количества выданных портов, что могло приводить к небольшому превышению заданного лимита. Изменены счетчики whpf, whp_salfs, whp_lalfs, whp_ruse, whp_ruse_salfs, whp_ruse_lalfs и аналогичные счетчики в статистике по потокам (thr_salfs и другие), а также вывод команды nat show, чтобы отражать текущее актуальное использование портов, а не кумулятивное (накопительное)nat_whp_lifetime < lifetime_flow: если в сессии появилась активность, а NAT-порт уже переиспользован, то выделяется новый портvlan rule show добавлен вывод всех разрешений для Service-NameSVLAN.* с указанием SName и безsvan.cvlan) с селективностью по SNamevlan rule add/rm добавляется поддержка PPPoE и Service-Name.<Range> VLAn/QinQ: vlan rule add <Range> pppoe [enable | drop | pass | delay N]
Добавление правила обработки PPPoE Service-Name для указанного диапазона <Range> и VLAn/QinQ:
vlan rule add <Range> pppoe sname <Service-Name> [enable | drop | pass | delay N]
Здесь <Service-Name> — имя PPPoE Service-Name в одинарных или двойных кавычках (можно без кавычек, если является идентификатором ([a-zA-Z_][a-zA-Z_0-9]*)
Разрешения:
enable - разрешена обработка PPPoEdrop - дропать пакеты PPPoEpass - пропустить пакеты PPPoE насквозь без обработкиdelay N - устанавливать PPPoE-сессию с задержкой в N секунд (0 < N < 16)ajb_save_dns_answer_types и ajb_save_dns_request_types, которые позволяют задавать типы DNS запросов/ответов для записи в файл и отправку по IPFIXbras_dhcp_trace_maccheck_tunnels=1Lease-TimeSession-Timeout был в несколько раз (минимум в 4 раза) больше, чем Lease-Time. Если это условие нарушается, то Lease-Time полагается равным 1/4 от Session-Timeout.Lease-Time берется из ответа RADIUS-авторизации (в порядке уменьшения приоритета):DHCP-IP-Address-Lease-Time;VasExperts-DHCP-Option-Num, задающий опцию 51;Framed-Pool.Lease-time не задан ни одним из вышеперечисленных способов, то полагается равным 1/16 от Session-Timeout.Session-Timeout — 600 секундLease-Time — 60 секундnat_dstaddr_cache_size=0 в /etc/dpi/fastdpi.confvlan rule dump добавлен параметр, определяющий, какой тип правил выводить: vlan rule dump [type]type — rule type: perm, dhcp, all (default)vlan rule dump perm
Вывести правила только для DHCP:
vlan rule dump dhcp
Вывести все правила:
vlan rule dump
fdpi_cli dump flow cache format расширен новыми полямиdump flownthr=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 адресов и портов идентифицирующие запись. Если у протокола нет портов — последние 0ssid=1675E5CF5FB1337 — идентификатор сессииdpip=91 — протокол DPIittr=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_ipdrct == 0 — h_ip_1 — src_ipdrct == 1 — h_ip_1 — dst_ipflw_dir, при котором был создан ключiown=1 — номер потока, который создал записьilst=1 — номер потока, который последний раз обрабатывал записьbtsip=0x2 — служебные биты обработки flowtcpbts_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 в двух направлениях, но не более 65000btsp_0=1 btsp_1=0 — объем payload в двух направлениях, но не более 65Kwhoisc=0 или 1 — кто инициировал соединениеwhip=94.140.198.86:33326 — выделенный белый адрес+портitrnsld=1 — индекс данных профиля по которому был выделен белый адресigcache=0 — индекс в соответствующем кэше-slice перекодировки серый -→ белыйgre_pid=0 — опеределенный callidgre_mtd=0 — метод выделения белого адреса для GREdpdk_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"dhcp show stat vrfdpdk_engine=7 с поддержкой явного указания диспетчеров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=7dpdk_mempool=name=<name>;size=N
name задает имя mempool (max 15 символов)
size задает размер (число элементов) mempool
Оба параметра являются обязательными
Опций dpdk_mempool может быть много, каждая описывает отдельный mempool
dpdk_mempool=...
dpdk_engine=7dpdk_dispatch=<список-портов>;mempool=<имя>[;params]*
<Список-портов> задает, какие порты обслуживает данный диспетчер
params — дополнительные опции данного диспетчера. Доступные опции:
mempool=<имя> — задает имя mempool для данного диспетчера (обязательный параметр)
rss=N — включение RSS на всех портах данного диспетчера; будет создано N диспетчеров, по одному на каждую rx-очередь.
Опций dpdk_dispatch может быть много, каждая описывает отдельный диспетчер (или группу диспетчеров, если задано rss)
dpdk_dispatch=...
ipfix_dev