-
Notifications
You must be signed in to change notification settings - Fork 499
Description
вот конфигурационный файл /etc/trex_cfg.yaml
Config file generated by dpdk_setup_ports.py
-
version: 2
interfaces: ['98:01.0', '98:11.0', '98:01.1', '98:11.1']
c: 16
port_info:- default_gw : 192.168.101.1
ip : 192.168.101.2
vlan: 101 - default_gw : 192.168.102.1
ip : 192.168.102.2
vlan: 102 - default_gw : 192.168.103.1
ip : 192.168.103.2
vlan: 103 - default_gw : 192.168.104.1
ip : 192.168.104.2
vlan: 104
platform:
master_thread_id: 0
latency_thread_id: 1
dual_if:
- socket: 1
threads: [32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47]- socket: 1 threads: [48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]memory:
dp_flows: 40000000
mbuf_9k: 560000
===========================================================================================
вывод в console
trex>portattr
Port Statusport | 0 | 1 | 2 | 3
----------------+----------------------+----------------------+----------------------+---------------------
driver | net_iavf | net_iavf | net_iavf | net_iavf
description | Ethernet Adaptive | Ethernet Adaptive | Ethernet Adaptive | Ethernet Adaptive
link status | UP | UP | UP | UP
link speed | 100 Gb/s | 100 Gb/s | 100 Gb/s | 100 Gb/s
port status | IDLE | IDLE | IDLE | IDLE
promiscuous | off | off | off | off
multicast | off | off | off | off
flow ctrl | N/A | N/A | N/A | N/A
vxlan fs | - | - | - | -
-- | | | |
layer mode | IPv4 | IPv4 | IPv4 | IPv4
src IPv4 | 192.168.101.2 | 192.168.102.2 | 192.168.103.2 | 192.168.104.2
IPv6 | off | off | off | off
src MAC | f6:c8:27:bf:6f:52 | 02:88:6c:36:b6:10 | 66:a0:57:d7:34:74 | 3e:f6:6e:08:11:88
--- | | | |
Destination | 192.168.101.1 | 192.168.102.1 | 192.168.103.1 | 192.168.104.1
ARP Resolution | 90:54:b7:79:a4:83 | 90:54:b7:79:ac:83 | 90:54:b7:79:a4:83 | 90:54:b7:79:ac:83
---- | | | |
VLAN | 101 | 102 | 103 | 104
----- | | | |
PCI Address | 0000:98:01.0 | 0000:98:11.0 | 0000:98:01.1 | 0000:98:11.1
NUMA Node | 1 | 1 | 1 | 1
RX Filter Mode | hardware match | hardware match | hardware match | hardware match
RX Queueing | off | off | off | off
Grat ARP | every 120 seconds | every 120 seconds | every 120 seconds | every 120 seconds
------ | | | | - default_gw : 192.168.101.1
trex>
но при запуске такого скрипта
from trex_stl_lib.api import *
import argparse
import os
class STLImix(object):
def __init__(self):
# Ваши IP‑диапазоны для каждого порта
self.ip_ranges = {
0: {
'src': {'start': "16.0.0.1", 'end': "16.0.255.254"},
'dst': {'start': "48.0.0.1", 'end': "48.0.255.254"}
},
1: {
'src': {'start': "48.0.0.1", 'end': "48.0.255.254"},
'dst': {'start': "16.0.0.1", 'end': "16.0.255.254"}
},
2: {
'src': {'start': "17.0.0.1", 'end': "17.0.255.254"},
'dst': {'start': "49.0.0.1", 'end': "49.0.255.254"}
},
3: {
'src': {'start': "49.0.0.1", 'end': "49.0.255.254"},
'dst': {'start': "17.0.0.1", 'end': "17.0.255.254"}
}
}
# IMIX‑таблица: размер пакета, PPS, межпакетный интервал (ISG)
self.imix_table = [
{'size': 60, 'pps': 28, 'isg': 0.0},
{'size': 590, 'pps': 16, 'isg': 0.1},
{'size': 1514, 'pps': 4, 'isg': 0.2}
]
# MAC‑адреса и VLAN для каждого порта (замените на реальные из portattr)
self.macs = {
0: {'src': "f6:c8:27:bf:6f:52", 'dst': "90:54:b7:79:a4:83"},
1: {'src': "02:88:6c:36:b6:10", 'dst': "90:54:b7:79:ac:83"},
2: {'src': "66:a0:57:d7:34:74", 'dst': "90:54:b7:79:a4:83"}, # замените на реальные
3: {'src': "3e:f6:6e:08:11:88", 'dst': "90:54:b7:79:ac:83"} # замените на реальные
}
self.vlan_ids = {0: 101, 1: 102, 2: 103, 3: 104}
def create_stream(self, size, pps, isg, vm, src_mac, dst_mac, vlan_id):
# Создаём базовый пакет с MAC и VLAN
base_pkt = Ether(src=src_mac, dst=dst_mac)
if vlan_id:
base_pkt /= Dot1Q(vlan=vlan_id) # Добавляем VLAN‑тег
base_pkt /= IP()/UDP()
# Дополняем пакетом до нужного размера
pad = max(0, size - len(base_pkt)) * 'x'
pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
return STLStream(
isg=isg,
packet=pkt,
mode=STLTXCont(pps=pps)
)
def get_streams(self, direction=0, tunables="", **kwargs):
# Парсим аргументы (если нужны дополнительные настройки)
parser = argparse.ArgumentParser(
description='Argparser for {}'.format(os.path.basename(__file__)),
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
args, unknown = parser.parse_known_args(tunables)
if unknown:
raise Exception('Unrecognized arguments: {}'.format(unknown))
port_id = kwargs.get('port_id', 0)
# Выбираем IP‑диапазоны для порта
if direction == 0:
src = self.ip_ranges[port_id]['src']
dst = self.ip_ranges[port_id]['dst']
else:
src = self.ip_ranges[port_id]['dst']
dst = self.ip_ranges[port_id]['src']
# VM‑шаблон для генерации IP
vm = STLVM()
vm.var(name="src_ip", min_value=src['start'], max_value=src['end'], size=4, op="inc")
vm.var(name="dst_ip", min_value=dst['start'], max_value=dst['end'], size=4, op="inc")
vm.write(fv_name="src_ip", pkt_offset="IP.src")
vm.write(fv_name="dst_ip", pkt_offset="IP.dst")
vm.fix_chksum() # Рсправляем checksum
# Получаем MAC и VLAN для порта
src_mac = self.macs[port_id]['src']
dst_mac = self.macs[port_id]['dst']
vlan_id = self.vlan_ids[port_id]
# Создаём потоки для IMIX
return [
self.create_stream(x['size'], x['pps'], x['isg'], vm, src_mac, dst_mac, vlan_id)
for x in self.imix_table
]
Функция для динамической загрузки профиля в TRex
def register():
return STLImix()
и если на сетевом уровне между сетевыми оборудование есть канал он передает значения где tx и rx не равные значения вот пример trex>portattr
Port Status
port | 0 | 1 | 2 | 3
----------------+----------------------+----------------------+----------------------+---------------------
driver | net_iavf | net_iavf | net_iavf | net_iavf
description | Ethernet Adaptive | Ethernet Adaptive | Ethernet Adaptive | Ethernet Adaptive
link status | UP | UP | UP | UP
link speed | 100 Gb/s | 100 Gb/s | 100 Gb/s | 100 Gb/s
port status | IDLE | IDLE | IDLE | IDLE
promiscuous | off | off | off | off
multicast | off | off | off | off
flow ctrl | N/A | N/A | N/A | N/A
vxlan fs | - | - | - | -
-- | | | |
layer mode | IPv4 | IPv4 | IPv4 | IPv4
src IPv4 | 192.168.101.2 | 192.168.102.2 | 192.168.103.2 | 192.168.104.2
IPv6 | off | off | off | off
src MAC | f6:c8:27:bf:6f:52 | 02:88:6c:36:b6:10 | 66:a0:57:d7:34:74 | 3e:f6:6e:08:11:88
--- | | | |
Destination | 192.168.101.1 | 192.168.102.1 | 192.168.103.1 | 192.168.104.1
ARP Resolution | 90:54:b7:79:a4:83 | 90:54:b7:79:ac:83 | 90:54:b7:79:a4:83 | 90:54:b7:79:ac:83
---- | | | |
VLAN | 101 | 102 | 103 | 104
----- | | | |
PCI Address | 0000:98:01.0 | 0000:98:11.0 | 0000:98:01.1 | 0000:98:11.1
NUMA Node | 1 | 1 | 1 | 1
RX Filter Mode | hardware match | hardware match | hardware match | hardware match
RX Queueing | off | off | off | off
Grat ARP | every 120 seconds | every 120 seconds | every 120 seconds | every 120 seconds
------ | | | |
trex>
Или он не может в такой конфигурации работать?