Cisco TRex на практике
Что такое Cisco TRex
Как описано в статье Генератор трафика Cisco TRex: запускаем нагрузочное тестирование сетевых устройств:
Это программный генератор трафика с открытым исходным кодом, работает на стандартных процессорах Intel на базе DPDK, поддерживает режимы с контролем состояния потока и без (stateful / stateless modes). Сравнительно простой и полностью масштабируемый.
Англоязычная документация для этого инструмента доступна на сайте.
Trex позволяет генерировать разные типы трафика и анализировать данные при их получении. Поддерживается работа на уровне MAC и IP. Можно задавать размер пакетов и их количество, контролировать скорость передачи данных.
Работа с генератором организована в среде Linux.
Одно из важных отличий генератора Trex — использование технологии DPDK, которая позволяет обойти «узкие места» в производительности сетевого стека Linux. DPDK или Data Plane Development Kit — это целый набор библиотек и драйверов для быстрой обработки пакетов, который позволяет исключить сетевой стек Linux из процесса обработки пакетов и взаимодействовать с сетевым устройством напрямую.
DPDK превращает процессор общего назначения в сервер пересылки пакетов. Благодаря этой трансформации отпадает необходимость в дорогостоящих коммутаторах и маршрутизаторах. Однако DPDK накладывает ограничения на использование конкретных сетевых адаптеров, список поддерживаемого железа указан на на ссылке — тут самая популярная платформа от Intel, т.е. обеспечена поддержка железа, которое работает с linux-драйверами e1000, ixgbe, i40e, ice, fm10k, ipn3ke, ifc, igc.
Также важно понимать, что для работы TRex-сервера на скоростях 10 Гбит/с необходим многоядерный процессор — от 4 ядер и выше, желательно CPU семейства Intel c поддержкой одновременной многопоточности (hyper-threading).
Подготовка TRex к работе
Логическая топология подключения TRex
Данные TRex VM | |
Путь до TRex: /opt/trex/v3.00/ TRex Version: 3.00 DPDK version: 22.03.0 | |
Промежуточные сети для TRex Virtual Router (TRVR) | |
Для клиентской сети (VLAN_87): Default gw: 172.16.9.1/30 TRVR: 172.16.9.2/30 | Для серверной сети (VLAN_88): Default gw: 172.16.9.5/30 TRVR: 172.16.9.6/30 |
Эмулируемые сети за TRex Virtual Router (TRVR) | |
Клиентская сеть: 172.16.7.0/24 | Серверная сеть: 172.16.12.0/24 |
ВАЖНО перед началом работ отключить Secure Boot на TRex VM.
Также перед началом работ необходимо пробросить маршруты для эмулируемых сетей через тестовую зону.
1) Подключимся к vm и перейдем в директорию TRex:
[trexlab@lab-ine-trex-01 v3.00]$ cd /opt/trex/v3.00/
[trexlab@lab-ine-trex-01 v3.00]$ ls
astf daemon_server ouvp_stl _t-rex-64-debug-o
astf_schema.json doc_process.py __pycache__ t-rex-64-debug-o
astf-sim dpdk_nic_bind.py run_functional_tests _t-rex-64-o
astf-sim-utl dpdk_setup_ports.py run_regression t-rex-64-o
automation emu so trex-cfg
avl exp stl trex_client_v3.00.tar.gz
bird external_libs stl-sim trex-console
b.pcap find_python.sh test.yaml trex_daemon_server
bp-sim-64 general_daemon_server _t-rex-64 trex-emu
bp-sim-64-debug generated t-rex-64 trex_emu
cap2 ko _t-rex-64-debug x710_ddp
cap222.pcap master_daemon.py t-rex-64-debug y
cfg ndr t-rex-64-debug-gdb
Структура папок TRex:
Location | Description |
/stl | Stateless native (py) profiles |
/stl/hlt | Stateless HLT profiles |
/ko | Kernel modules for DPDK |
/external_libs | Python external libs used by server/clients |
/exp | Golden PCAP file for unit-tests |
/cfg | Examples of config files |
/cap2 | Stateful profiles |
/avl | Stateful profiles — EMIX profile |
/automation | Python client/server code for both Stateful and Stateless |
/automation/regression | Regression for Stateless and Stateful |
/automation/config | Regression setups config files |
/automation/trex_control_plane/interactive/trex | Stateless lib and Console |
/automation/trex_control_plane/interactive/trex/stl | Stateless lib |
/automation/trex_control_plane/interactive/trex/examples/stl | Stateless examples |
/astf | ASTF native (py) profiles |
/automation/trex_control_plane/interactive/trex/examples/astf | Automation examples |
/automation/trex_control_plane/interactive/trex/astf | ASTF lib compiler (convert py to JSON), Interactive lib |
/automation/trex_control_plane/stf | STF automation (used by ASTF mode) |
2) Выведем таблицу интерфейсов, доступных для настройки DPDK:
[trexlab@lab-ine-trex-01 v3.00]$ sudo ./dpdk_setup_ports.py -t
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
| ID | NUMA | PCI | MAC | Name | Driver | Linux IF | Active |
+====+======+=========+===================+=============================+=========+==========+==========+
| 0 | -1 | 0b:00.0 | 00:50:56:a0:1b:92 | VMXNET3 Ethernet Controller | vmxnet3 | ens192 | *Active* |
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
| 1 | -1 | 13:00.0 | 00:50:56:a0:01:33 | VMXNET3 Ethernet Controller | vmxnet3 | ens224 | |
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
| 2 | -1 | 1b:00.0 | 00:50:56:a0:55:ac | VMXNET3 Ethernet Controller | vmxnet3 | ens256 | |
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
ens192 — management interface для подключения к VM по SSH (его использовать нельзя)
ens224 и ens256 — доступны для настройки DPDK
3) Выполним настройку интерфейсов согласно данным TRex VM указанным выше:
[trexlab@lab-ine-trex-01 v3.00]$ sudo ./dpdk_setup_ports.py -i
By default, IP based configuration file will be created. Do you want to use MAC based config? (y/N)n
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
| ID | NUMA | PCI | MAC | Name | Driver | Linux IF | Active |
+====+======+=========+===================+=============================+=========+==========+==========+
| 0 | -1 | 0b:00.0 | 00:50:56:a0:1b:92 | VMXNET3 Ethernet Controller | vmxnet3 | ens192 | *Active* |
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
| 1 | -1 | 13:00.0 | 00:50:56:a0:01:33 | VMXNET3 Ethernet Controller | vmxnet3 | ens224 | |
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
| 2 | -1 | 1b:00.0 | 00:50:56:a0:55:ac | VMXNET3 Ethernet Controller | vmxnet3 | ens256 | |
+----+------+---------+-------------------+-----------------------------+---------+----------+----------+
Please choose an even number of interfaces from the list above, either by ID, PCI or Linux IF
Stateful will use order of interfaces: Client1 Server1 Client2 Server2 etc. for flows.
Stateless can be in any order.
Enter list of interfaces separated by space (for example: 1 3) : 1 2
For interface 1, assuming loopback to its dual interface 2.
Putting IP 1.1.1.1, default gw 2.2.2.2 Change it?(y/N).y
Please enter IP address for interface 1: 172.16.9.2
Please enter default gateway for interface 1: 172.16.9.1
For interface 2, assuming loopback to its dual interface 1.
Putting IP 2.2.2.2, default gw 1.1.1.1 Change it?(y/N).y
Please enter IP address for interface 2: 172.16.9.6
Please enter default gateway for interface 2: 172.16.9.5
Print preview of generated config? (Y/n)y
### Config file generated by dpdk_setup_ports.py ###
- version: 2
interfaces: ['13:00.0', '1b:00.0']
port_info:
- ip: 172.16.9.2
default_gw: 172.16.9.1
- ip: 172.16.9.6
default_gw: 172.16.9.5
platform:
master_thread_id: 0
latency_thread_id: 1
dual_if:
- socket: 0
threads: [2,3,4,5,6,7]
Save the config to file? (Y/n)y
Default filename is /etc/trex_cfg.yaml
Press ENTER to confirm or enter new file:
File /etc/trex_cfg.yaml already exist, overwrite? (y/N)y
Saved to /etc/trex_cfg.yaml.
Как указано в выводе, настройки интерфейсов будут храниться в конфигурационном файле по пути /etc/trex_cfg.yaml.
Далее необходимо подготовить TRex к запуску в одном из доступных режимов:
Stateless mode | Stateful mode |
Данный режим удобно использовать для расчета потерь при L3/L2 переключениях. | Данный режим удобно использовать при тестировании Firewall, NAT, DPI, Load Balancer, Network cache devices и т.д. |
— Large scale — Supports about 10–30 million packets per second (Mpps) per core, scalable with the number of cores — Each profile can support multiple streams, scalable to 10K parallel streams — Each stream supports: — Packet template — ability to build any packet (including malformed) using Scapy (example: MPLS/IPv4/Ipv6/GRE/VXLAN/NSH) — Ability to change any field inside the packet — Ability to change the packet size — Mode — Continuous/Burst/Multi-burst — Rate specification in pps, line rate percentage or L1/L2 bandwidth — Action — stream can trigger a stream — Interactive support — Fast Console, GUI — Statistics per interface or per stream supported in hardware/software — Latency and Jitter per stream — Blazingly fast Python automation API — Capture/Monitor traffic with BPF filters — no need for Wireshark — Capture network traffic by redirecting the traffic to Wireshark — PCAP file import/export with huge pcap file transmission support (e.g. 1TB pcap file) for DPI — Multi-user support | — Emulate L7 applications, e.g. HTTP/HTTPS/Citrix — Multi profile support and ability to group flows — Performance and scale: — High bandwidth — 200 Gb/sec — High connection rate — order of MCPS — Scale to millions of active established flows — Benchmark and Stress features/devices like: — NAT — DPI — Load Balancer — Network cache devices — Firewalls |
Stateful (STF) vs Advance Stateful (ASTF) — Same Flexible tuple generator — Same Clustering mode — Same VLAN support — NAT — no need for complex learn mode. ASTF supports NAT64 out of the box. — Flow order. ASTF has inherent ordering verification using the TCP layer. It also checks IP/TCP/UDP checksum out of the box. — Latency measurement is supported in both. — In ASTF mode, you can«t control the IPG, less predictable (concurrent flows is less deterministic) — ASTF can be interactive (start, stop, stats) |
Advance Stateful mode в данном документе рассматриваться не будет
Stateless mode
В данном режиме для запуска генератора используется Python-скрипт, в котором указываются все параметры генерации.
Методика тестирования переключений
TRex позволяет одновременно отображать в консоли статистику только по 4 потокам, поэтому для проведения тестирования рекомендуется использовать минимум 4 5tuple-потока со следующими параметрами:
№ | Описание | ID | Source parameters | Destination | Rate, pps | Frame size, bytes | Stats |
1 | Прямой трафик (клиент --> сервер) | 10 | IP:172.16.7.1–172.16.7.60 | 172.16.12.10 | 10000 | 1400 | On |
2 | Прямой трафик (клиент --> сервер) | 20 | IP:172.16.7.61–172.16.7.120 | 172.16.12.20 | 10000 | 1400 | On |
3 | Прямой трафик (клиент --> сервер) | 30 | IP:172.16.7.121–172.16.7.180 | 172.16.12.30 | 10000 | 1400 | On |
4 | Прямой трафик (клиент --> сервер) | 40 | IP:172.16.7.181–172.16.7.240 | 172.16.12.40 | 10000 | 1400 | On |
*Rate (pps, Packets Per Second) : Частота генерации в пакетах в секунду
*Frame size (bytes) : Размер генерируемого пакета. Рекомендуемый размер 1400, но при наличии потерь данный параметр можно понизить
*Stats: Определяет будет ли отображаться статистика данного потока в консоли TRex (прописывается в python-скрипте, параметр flow_stats)
В отчет заносятся потери пакетов из всех отслеживаемых потоков в момент переключения, затем выбирается самое большое число потерь и переводится в миллисекунды (1 мс = 10 пакетов при частоте в 10000 pps):
Примеры отчета с односторонним потоком данных
В некоторых сценариях дополнительно настраивают еще 4 обратных потока без отслеживания (Stats Off) для равномерной нагрузки портов во всех направлениях:
Фрагмент отчета с двусторонним потоком данных
Процесс настройки TRex в Stateless mode
1) Подготовим python-скрипт (ouvp_stl/new_marker_streams_p0_p1.py):
from trex_stl_lib.api import *
def generate_payload(length):
word = ''
alphabet_size = len(string.ascii_letters)
for i in range(length):
word += string.ascii_letters[(i % alphabet_size)]
return word
class STLS1(object):
def __init__ (self):
self.fsize =200;
def create_stream_to_1 (self):
size = self.fsize - 4;
#generating 5tuple flows with 802.1p =0 and dscp = be (00, tos = 0), should be dropped
base_pkt = Ether()/IP(src="172.16.7.1", dst = "172.16.12.10")/UDP(sport=1025,dport=12)
vm = STLScVmRaw( [ STLVmTupleGen( ip_min = "172.16.7.1",
ip_max = "172.16.7.60",
port_min = 1025,
port_max = 65535,
name = "tuple"),
STLVmWrFlowVar(fv_name="tuple.ip", pkt_offset="IP.src"),
STLVmFixIpv4(offset = "IP"),
STLVmWrFlowVar(fv_name="tuple.port", pkt_offset="UDP.sport"),
],
)
pkt = STLPktBuilder(pkt=base_pkt/generate_payload(size-len(base_pkt)), vm=vm)
return STLStream( name='1 stream to',
packet = pkt,
mode = STLTXCont( pps = 10000 ),
flow_stats = STLFlowStats(pg_id = 10)
)
def create_stream_to_2 (self):
size = self.fsize - 4;
#generating 5tuple flows with 802.1p =0 and dscp = be (00, tos = 0), should be dropped
base_pkt = Ether()/IP(src="172.16.7.61", dst = "172.16.12.20")/UDP(sport=1025,dport=12)
vm = STLScVmRaw( [ STLVmTupleGen( ip_min = "172.16.7.61",
ip_max = "172.16.7.120",
port_min = 1025,
port_max = 65535,
name = "tuple"),
STLVmWrFlowVar(fv_name="tuple.ip", pkt_offset="IP.src"),
STLVmFixIpv4(offset = "IP"),
STLVmWrFlowVar(fv_name="tuple.port", pkt_offset="UDP.sport"),
],
)
pkt = STLPktBuilder(pkt=base_pkt/generate_payload(size-len(base_pkt)), vm=vm)
return STLStream( name='2 stream to',
packet = pkt,
mode = STLTXCont( pps = 10000 ),
flow_stats = STLFlowStats(pg_id = 20)
)
def create_stream_to_3 (self):
size = self.fsize - 4;
#generating 5tuple flows with 802.1p =0 and dscp = be (00, tos = 0), should be dropped
base_pkt = Ether()/IP(src="172.16.7.121", dst = "172.16.12.30")/UDP(sport=1025,dport=12)
vm = STLScVmRaw( [ STLVmTupleGen( ip_min = "172.16.7.121",
ip_max = "172.16.7.180",
port_min = 1025,
port_max = 65535,
name = "tuple"),
STLVmWrFlowVar(fv_name="tuple.ip", pkt_offset="IP.src"),
STLVmFixIpv4(offset = "IP"),
STLVmWrFlowVar(fv_name="tuple.port", pkt_offset="UDP.sport"),
],
)
pkt = STLPktBuilder(pkt=base_pkt/generate_payload(size-len(base_pkt)), vm=vm)
return STLStream( name='3 stream to',
packet = pkt,
mode = STLTXCont( pps = 10000 ),
flow_stats = STLFlowStats(pg_id = 30)
)
def create_stream_to_4 (self):
size = self.fsize - 4;
#generating 5tuple flows with 802.1p =0 and dscp = be (00, tos = 0), should be dropped
base_pkt = Ether()/IP(src="172.16.7.181", dst = "172.16.12.40")/UDP(sport=1025,dport=12)
vm = STLScVmRaw( [ STLVmTupleGen( ip_min = "172.16.7.181",
ip_max = "172.16.7.240",
port_min = 1025,
port_max = 65535,
name = "tuple"),
STLVmWrFlowVar(fv_name="tuple.ip", pkt_offset="IP.src"),
STLVmFixIpv4(offset = "IP"),
STLVmWrFlowVar(fv_name="tuple.port", pkt_offset="UDP.sport"),
],
)
pkt = STLPktBuilder(pkt=base_pkt/generate_payload(size-len(base_pkt)), vm=vm)
return STLStream( name='4 stream to',
packet = pkt,
mode = STLTXCont( pps = 10000 ),
flow_stats = STLFlowStats(pg_id = 40)
)
def get_streams (self, direction = 0, **kwargs):
# create 4 stream
#self.streams = streams
return [
self.create_stream_to_1(),
self.create_stream_to_2(),
self.create_stream_to_3(),
self.create_stream_to_4(),
]
# dynamic load - used for trex console or simulator
def register():
return STLS1()
Рекомендуется изучить документацию TRex и скрипты расположенные в директории /stl
2) Откроем TRex в двух окнах. В первом окне запустим TRex в stateless mode:
[trexlab@lab-ine-trex-01 v3.00]$ sudo ./t-rex-64 -i
-Per port stats table
ports | 0 | 1
-----------------------------------------------------------------------------------------
opackets | 0 | 0
obytes | 0 | 0
ipackets | 0 | 0
ibytes | 0 | 0
ierrors | 0 | 0
oerrors | 0 | 0
Tx Bw | 0.00 bps | 0.00 bps
-Global stats enabled
Cpu Utilization : 0.0 %
Platform_factor : 1.0
Total-Tx : 0.00 bps
Total-Rx : 0.00 bps
Total-PPS : 0.00 pps
Total-CPS : 0.00 cps
Expected-PPS : 0.00 pps
Expected-CPS : 0.00 cps
Expected-BPS : 0.00 bps
Active-flows : 0 Clients : 0 Socket-util : 0.0000 %
Open-flows : 0 Servers : 0 Socket : 0 Socket/Clients : -nan
drop-rate : 0.00 bps
current time : 3.6 sec
test duration : 0.0 sec
3) Во втором окне зайдем в консоль TRex:
[trexlab@lab-ine-trex-01 v3.00]$ sudo ./trex-console
Using 'python3' as Python interpeter
Connecting to RPC server on localhost:4501 [SUCCESS]
Connecting to publisher server on localhost:4500 [SUCCESS]
Acquiring ports [0, 1]: [SUCCESS]
Server Info:
Server version: v3.00 @ STL
Server mode: Stateless
Server CPU: 1 x Intel(R) Xeon(R) Gold 6252 CPU @ 2.10GHz
Ports count: 2 x 10Gbps @ VMXNET3 Ethernet Controller
-=TRex Console v3.0=-
Type 'help' or '?' for supported actions
trex>
4) Во втором окне запустим генератор используя подготовленный ранее скрипт:
trex>start -f ouvp_stl/new_marker_streams_p0_p1.py --port 0 -d 180
-f
--port
-d
5) Во втором окне откроем графический интерфейс TRex:
trex>tui
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 64.09 Mbps
version : STL @ v3.00 total_tx_L1 : 70.5 Mbps
cpu_util. : 0.74% @ 1 cores (1 per dual port) total_rx : 64.09 Mbps
rx_cpu_util. : 0.34% / 40.06 Kpps total_pps : 40.06 Kpps
async_util. : 0% / 12.73 bps drop_rate : 0 bps
total_cps. : 0 cps queue_full : 0 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 10 Gb/s | 10 Gb/s |
CPU util. | 0.74% | 0.0% |
-- | | |
Tx bps L2 | 64.09 Mbps | 0 bps | 64.09 Mbps
Tx bps L1 | 70.5 Mbps | 0 bps | 70.5 Mbps
Tx pps | 40.06 Kpps | 0 pps | 40.06 Kpps
Line Util. | 0.71 % | 0 % |
--- | | |
Rx bps | 0 bps | 64.09 Mbps | 64.09 Mbps
Rx pps | 0 pps | 40.06 Kpps | 40.06 Kpps
---- | | |
opackets | 1476516 | 0 | 1476516
ipackets | 0 | 1476516 | 1476516
obytes | 295303200 | 0 | 295303200
ibytes | 0 | 295303200 | 295303200
tx-pkts | 1.48 Mpkts | 0 pkts | 1.48 Mpkts
rx-pkts | 0 pkts | 1.48 Mpkts | 1.48 Mpkts
tx-bytes | 295.3 MB | 0 B | 295.3 MB
rx-bytes | 0 B | 295.3 MB | 295.3 MB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: /
Press 'ESC' for navigation panel...
status:
tui>
6) Включим режим отображения статистики потоков, последовательно нажав клавиши «Esc», «S» и еще раз «Esc»:
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 64.17 Mbps
version : STL @ v3.00 total_tx_L1 : 70.58 Mbps
cpu_util. : 0.83% @ 1 cores (1 per dual port) total_rx : 64.18 Mbps
rx_cpu_util. : 0.31% / 40.11 Kpps total_pps : 40.1 Kpps
async_util. : 0% / 8.93 bps drop_rate : 0 bps
total_cps. : 0 cps queue_full : 0 pkts
Streams Statistics
PG ID | 10 | 20 | 30 | 40
-----------+-------------------+-------------------+-------------------+------------------
Tx pps | 10 Kpps | 10 Kpps | 10 Kpps | 10 Kpps
Tx bps L2 | 16 Mbps | 16 Mbps | 16 Mbps | 16 Mbps
Tx bps L1 | 17.6 Mbps | 17.6 Mbps | 17.6 Mbps | 17.6 Mbps
--- | | | |
Rx pps | 10 Kpps | 10 Kpps | 10 Kpps | 10 Kpps
Rx bps | 16 Mbps | 16 Mbps | 16 Mbps | 16 Mbps
---- | | | |
opackets | 2074074 | 2074074 | 2074074 | 2074074
ipackets | 2074074 | 2074074 | 2074074 | 2074074
obytes | 414814800 | 414814800 | 414814800 | 414814800
ibytes | 414813800 | 414813800 | 414813800 | 414813800
----- | | | |
opackets | 2.07 Mpkts | 2.07 Mpkts | 2.07 Mpkts | 2.07 Mpkts
ipackets | 2.07 Mpkts | 2.07 Mpkts | 2.07 Mpkts | 2.07 Mpkts
obytes | 414.81 MB | 414.81 MB | 414.81 MB | 414.81 MB
ibytes | 414.81 MB | 414.81 MB | 414.81 MB | 414.81 MB
status: /
Press 'ESC' for navigation panel...
status:
tui>
Нас интересуют расхождения в значениях «opackets» и «ipackets» в каждом потоке.
Остановить генератор можно с помощью команды «stop».
Выход из графического интерфейса и консоли выполняется с помощью команды «q».
7) Выполним переключение и занесем в отчет потери пакетов в каждом потоке.
8) При повторном тестировании необходимо выполнить следующие действия:
В первом окне необходимо перезапустить TRex в stateless mode;
Во втором окне необходимо перезайти в консоль TRex и повторить все действия.
Stateful mode
В данном режиме для запуска генератора используются два конфигурационных файла, в которых указываются все параметры генерации:
файл, в котором указывается первичная сетевая настройка TRex, по умолчанию это файл /etc/trex_cfg.yaml, который мы настраивали ранее;
файл, описывающий профиль генерируемого трафик, данные файлы в основном хранятся в директориях /cap2 и /avl.
Процесс настройки TRex в Stateful mode
1) Проверим первый конфигурационный файл (/etc/trex_cfg.yaml):
### Config file generated by dpdk_setup_ports.py ###
- version: 2
interfaces: ['13:00.0', '1b:00.0']
port_info:
- ip: 172.16.9.2
default_gw: 172.16.9.1
- ip: 172.16.9.6
default_gw: 172.16.9.5
platform:
master_thread_id: 0
latency_thread_id: 1
dual_if:
- socket: 0
threads: [2,3,4,5,6,7]
2) Проверим второй конфигурационный файл (cap2/fw-int.yaml):
- duration : 40
generator :
distribution : "seq"
clients_start : "172.16.7.1"
clients_end : "172.16.7.255"
servers_start : "172.16.12.1"
servers_end : "172.16.12.255"
clients_per_gb : 0
min_clients : 0
dual_port_mask : "1.0.0.0"
tcp_aging : 0
udp_aging : 0
cap_info :
- name: cap2/Oracle.pcap
cps : 1.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/Video_Calls.pcap
cps : 11.4
ipg : 10000
rtt : 10000
w : 4
- name: cap2/rtp_160k.pcap
cps : 3.6
ipg : 10000
rtt : 10000
w : 4
- name: cap2/rtp_250k_rtp_only_1.pcap
cps : 4.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/rtp_250k_rtp_only_2.pcap
cps : 4.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/smtp.pcap
cps : 34.2
ipg : 10000
rtt : 10000
w : 4
- name: cap2/Voice_calls_rtp_only.pcap
cps : 66.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/citrix.pcap
cps : 105.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/dns.pcap
cps : 240.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/exchange.pcap
cps : 63.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/http_browsing.pcap
cps : 267.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/http_get.pcap
cps : 34.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/http_post.pcap
cps : 345.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/https.pcap
cps : 111.0
ipg : 10000
rtt : 10000
w : 4
- name: cap2/mail_pop.pcap
cps : 34.2
ipg : 10000
rtt : 10000
w : 4
*distribution: Currently, only sequential distribution is supported in IP allocation. This means the IP address is increased by one for each flow;
*clients_per_gb: Not used
*min_clients: Not used
*dual_port_mask: Currently, there is one global IP pool for clients and servers. It serves all templates. All templates will allocate IP from this global pool. Each TRex client/server «dual-port» (pair of ports, such as port 0 for client, port 1 for server) has its own generator offset, taken from the config file. The offset is called dual_port_mask
*tcp_aging: Time in sec to linger the deallocation of TCP flows (in particular return the src_port to the pool). Good for cases when there is a very high socket utilization (>50%) and there is a need to verify that socket source port are not wrapped and reuse. Default value is zero. Better to keep it like that from performance point of view. High value could create performance penalty
*udp_aging: Same as tcp_aging for UDP flows
*name: The name of the template pcap file. The pcap file should include only one flow. (Exception: in case of plug-ins)
*cps: Number of connections per second to generate. In the example, 1.0 means 1 connection per secod
*ipg: inter-packet gap in microseconds
*rtt: should be the same as ipg
*w: This indicates to the IP generator how to generate the flows. If w=2, two flows from the same template will be generated in a burst (more for HTTP that has burst of flows)
3) Запустим генератор используя подготовленные ранее конфигурационные файлы:
[trexlab@lab-ine-trex-01 v3.00]$ sudo ./t-rex-64 --cfg /etc/trex_cfg.yaml -f cap2/fw-int.yaml -d 30 -m 1 --nc
--cfg
-f
-d
-m
--nc: If set, will not wait for all flows to be closed, before terminating — see manual for more information