以trex软件包解压缩后的目录名为v2.73为,TREX使用eth0和eth1例
cd v2.73
./dpdk_setup_ports.py –s
0000:00:03.0 'Virtio network device' if=eth0 drv=virtio-pci
0000:00:04.0 'Virtio network device' if=eth1 drv=virtio-pci
0000:00:05.0 'Virtio network device' if=eth2 drv=virtio-pci
vi /etc/trex_cfg.yaml
- port_limit : 2
version : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
interfaces : ["00:03.0","00:04.0"]
port_info : # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.
- ip : 10.212.21.173
default_gw : 10.212.21.36
- ip : 10.212.28.112
default_gw : 10.212.28.62
注意:trex_cfg.yaml里似乎不能用tab???使用空格
以为通过port1发起数据包为例
cd v2.73
vi port1.py
from trex_stl_lib.api import *
class STLS1(object):
def create_stream (self):
return STLStream(
packet =
STLPktBuilder(
pkt = Ether()/IP(src="10.212.28.112",dst="10.212.21.173")/
UDP(dport=7060,sport=8025)/(1400*'x')
),
mode = STLTXCont())
def get_streams (self, direction = 0, **kwargs):
# create 1 stream
return [ self.create_stream() ]
# dynamic load - used for trex console or simulator
def register():
return STLS1()
Trex启动时会自动加载dpdk驱动
cd v2.73
./t-rex-64 -i
注意: stateless按前台方式启动,窗口不能关闭,否则进程会退出
开启新的窗口
cd v2.73
./trex-console
start –f ./port1.py –m 1gbps –p 1
注意,需要在vpp启动并配置就绪后再开始执行发包测试
vpp不会自动配置及加载dpdk网卡驱动,需要手动加载;另外,VPP编译好后也没有带dpdk网卡驱动,可以从trex的包里获取(注意需要对应内核版本的igb_uio.ko)
以下以vpp用户操作。以VPP配置使用eth0,eth1为例,已经下载对应内核版本的igp_uio.ko驱动到/home/vpp/下
cd
modprobe uio
insmod igb_uio.ko
./vpp/extras/vpp_config/scripts/dpdk-devbind.py –s
0000:00:03.0 'Virtio network device' if=eth0 drv=virtio-pci
0000:00:04.0 'Virtio network device' if=eth1 drv=virtio-pci
0000:00:05.0 'Virtio network device' if=eth2 drv=virtio-pci
0000:00:06.0 'Virtio network device' if=eth3 drv=virtio-pci
./vpp/extras/vpp_config/scripts/dpdk-devbind.py –u 0000:00:03.0
./vpp/extras/vpp_config/scripts/dpdk-devbind.py –u 0000:00:04.0
./vpp/extras/vpp_config/scripts/dpdk-devbind.py –-bind=igb_uio 0000:00:03.0
./vpp/extras/vpp_config/scripts/dpdk-devbind.py –-bind=igb_uio 0000:00:04.0
vi startup.cfg
unix {cli-listen /run/vpp/cli-vpp1.sock}
cpu {
main-core 1
corelist-workers 2-3
}
dpdk {
socket-mem 1024
no-multi-seg
uio-driver igb_uio
no-tx-checksum-offload
dev 0000:00:04.0 {
vlan-strip-offload off
num-rx-desc 1024
num-tx-queues 2
num-tx-desc 1024
}
dev 0000:00:03.0 {
vlan-strip-offload off
num-rx-desc 1024
num-tx-queues 2
num-tx-desc 1024
}
}
配置详见:
https://fd.io/docs/vpp/master/gettingstarted/users/configuring/startup.html
可以在/home/vpp/下写几个脚本,方便测试
restart.sh:
ps -ef|grep vpp |grep -v grep |grep -v ssh|awk '{print $2}'|xargs kill -9
vpp -c ./startup.cfg
cli.sh:
vppctl -s /run/vpp/cli-vpp1.sock
cd
vpp –c ./startup.cfg
vppctl –s /run/vpp/cli-vpp1.sock
ip table add 7
set interface ip table GigabitEthernet0/3/0 7
set in state GigabitEthernet0/3/0 up
set int ip address GigabitEthernet0/3/0 10.212.21.36/24
set in state GigabitEthernet0/4/0 up
set int ip address GigabitEthernet0/4/0 10.212.28.62/24
create gtpu tunnel src 10.212.21.36 dst 10.212.21.173 teid 13 encap-vrf-id 7 decap-next ip4
set in state gtpu_tunnel0 up
set int ip address gtpu_tunnel0 50.50.50.1/24
ip route 10.212.21.0/24 via gtpu_tunnel0