1. 环境准备
OS选择和安装
根据说明,trex支持常用的linux系统,本次使用的是ubuntu 16.04.1。
虚拟机配置需要能上网(虚拟机桥接到真实电脑物理网卡上网,此部分不赘述)
Trex环境安装
1、新建trex工作目录 :mkdir trex
2、进入trex工作目录 :cd trex
3、下载安装包 :wget --no-cache http://trex-tgn.cisco.com/trex/release/latest
4、解压文件 :tar -zxvf latest
5、进入相应工作目录 :cd trex
2. Trex环境调试 - stateless模式
2.1 stateless 模式配置和启动
-
./dpdk_setup_ports.py -h, --help //查看这个命令使用帮助
-
sudo ./dpdk_set_ports.py -t //以table的形式打印所有网络接口的num/pcie/MAC
-
sudo ./dpdk_set_ports.py -s //显示接口的状态,是否被dpdk bind使用,xinzhuang的dpdk下没有任何接口
-
sudo ./dpdk_setup_ports.py -c 02:06.0 02:07.0 -o /etc/trex_cfg.yaml //绑定相应的借口给dpdk使用,并替换/etc/下的trex端口配置,这样如果打流的时候没有主动添加cfg yaml,就会默认用这个yaml,这样下面就不会下一步了。
5. 复制配置文件到/etc下:root@ubuntu:/home/test/trex/v2.57#cp cfg/simple_cfg.yaml /etc/trex_cfg.yaml
6. 修改接口配置文件和自己的拓扑相符合:
修改如下两个部分,修改了两个接口,实际只使用一个也可以。只修改一个只有一个方向的流,回不来。
ip是当前使用的网口的ip,gw是与此接口相连的网口的ip地址。需要对应修改。在同一个子网内即可。
3.How to use trex stateless?
可以通过client的方式来使用trex,也可以直接通过pcap回放的方式来使用。
3.1. 启动stateless服务器:
root@ubuntu:/home/test/trex/v2.57#./t-rex-64 -i
服务器启动后,可以监听各个端口的收发包情况
console连接环境确认
1、打开控制台、进入servicee模式,执行ping命令,确认环境:
配置多流流量
sudo vim /opt/trex/v2.61/stl/simple_3pkt.py
def create_stream (self): # create a base packet and pad it to size size = self.fsize - 4 # no FCS base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025) 1 base_pkt1 = Ether()/IP(src="16.0.0.2",dst="48.0.0.1")/UDP(dport=12,sport=1025) base_pkt2 = Ether()/IP(src="16.0.0.3",dst="48.0.0.1")/UDP(dport=12,sport=1025) pad = max(0, size - len(base_pkt)) * 'x' return STLProfile( [ STLStream( isg = 0.0, packet = STLPktBuilder(pkt = base_pkt/pad), mode = STLTXCont( pps = 10), 2 ), STLStream( isg = 25000.0, #defined in usec, 25 msec packet = STLPktBuilder(pkt = base_pkt1/pad), mode = STLTXCont( pps = 20), 3 ), STLStream( isg = 50000.0,#defined in usec, 50 msec packet = STLPktBuilder(pkt = base_pkt2/pad), mode = STLTXCont( pps = 40) 4 ) ]).get_streams()
可分别对三种流量包头配置(IP),速度配置(PPS),启动时间配置(isg)。
4. 启动TRex,测试双网口网卡回环。
将光线两端分别接入网卡的两个口。
打开命令行终端,并开启TRex服务端程序:
sudo ./t-rex-64 -i # t-rex-64 是可执行文件,在安装目录中
打开另外一个命令行终端,开启TRex客户端程序:
trex-console
在客户端程序中开启流量发送:
start -f stl/simple_3pkt.py -a
常用操作:
pause -a #暂停所有发送 tui #流量统计信息
4. pcap数据包回放发包 - stateful模式
4.1 pcap准备
此部分使用安装文件自带的例子,/home/trex/trex/v2.62/avl 在目录下有很多的pcap,我们可以通过在yaml中配置多种不通的pcap和client/server的ip范围来增加我们打流的丰富程度。一般测performance也会需要各种不通的配置文件。
sfr_delay_10.yaml
duration : 0.1
generator :
distribution : "seq"
clients_start : "16.0.0.1"
clients_end : "16.0.1.255"
servers_start : "48.0.0.1"
servers_end : "48.0.21.245"
clients_per_gb : 201
min_clients : 101
dual_port_mask : "1.0.0.0"
tcp_aging : 0
udp_aging : 0
mac : [0x0,0x0,0x0,0x1,0x0,0x00]
#vlan : { enable : 1 , vlan0 : 100 , vlan1 : 200 }
#mac_override_by_ip : true
cap_ipg : true
#cap_ipg_min : 30
#cap_override_ipg : 200
wlength : 107
cap_info :
- name: avl/delay_10_http_get_0.pcap
cps : 102.0
ipg : 10000
rtt : 10000
w : 1
- name: avl/delay_10_http_post_0.pcap
cps : 102.0
ipg : 10000
rtt : 10000
w : 1
- name: avl/delay_10_https_0.pcap
cps : 33.0
ipg : 10000
rtt : 10000
w : 1
- name: avl/delay_10_http_browsing_0.pcap
cps : 179.0
ipg : 10000
rtt : 10000
w : 1
- name: avl/delay_10_exchange_0.pcap
cps : 64.0
ipg : 10000
rtt : 10000
w : 1
4.2 修改文件、回放脚本
1、修改配置文件:
Yaml文件包括两部分,generator部分是关于更换数据包中五元组等信息的统一操作;cap_info部分是使用的数据包,需要回放哪些数据包及内容。可以列很多出来。
2、脚本回放:./t-rex-64 -f cap2/dns.yaml -m 1 -d 10 (m为复制几份,可以通过这个控制流量的大小,d为持续时间)
执行脚本回放后,对端虚拟机内,可以查看到收到的数据包,其中原地址、目的地址等是按照配置,自行修改的。
这中是默认用/etc/下的端口配置yaml,我们也可以在后面自己指定对应的cfg yaml,这样就不用关注/etc/下的配置。
3.sudo ./t-rex-64 -f avl/sfr_delay_10_1g.yaml --cfg /home/cisco/v2.46/pigeon/trex_cfg.yaml -c 5 -m 5 -d 3000 这条是带 stream yaml和cfg yaml的命令。
4.回放一个flow一次:
只打一条流打一次,利用一个pcap文件,这样发送和接收多少个包都是一定的。如果我们对flow进行相应的测试和monitor,这里就会帮助我们分析问题。如果要测performance,可以打大流量,修改m值即可调流量大小,在页面会显示出来。
sudo ./t-rex-64 -f pigeon/sfr_delay_10_1g.yaml --cfg /home/trex/v2.58/pigeon/port_cfg.yaml.1 -c 1 -d 1 -e -m 1 --active-flows 1
sfr_delay_10_1g.yaml 改成下面这样即可:
- duration : 0.1
generator :
distribution : "seq"
clients_start : "67.0.0.1"
clients_end : "67.0.1.255"
servers_start : "98.0.0.1"
servers_end : "98.0.21.245"
clients_per_gb : 201
min_clients : 101
dual_port_mask : "1.0.0.0"
tcp_aging : 0
udp_aging : 0
mac : [0x0,0x0,0x0,0x1,0x0,0x00]
cap_ipg : true
#cap_ipg_min : 30
#cap_override_ipg : 200
cap_info :
- name: avl/delay_10_http_get_0.pcap
cps : 1
ipg : 10000
rtt : 10000
w : 1
小结:这里都是关于ipv4的操作,对于ipv6的操作,只需要修改流的yaml文件,然后在命令后加参数--ipv6,但是必须要保证是ipv6的网络,路由都是有的。一般我们打流只是打出去,如果我们要收到,必须要在连接的路由器上设置相应的ip route。
duration : 0.1
#vlan : { enable : 1 , vlan0 : 100 , vlan1 : 200 }
src_ipv6 : [0x2001,0x0DB8,0x0003,0x0004,0x0000,0x0000]
dst_ipv6 : [0x2001,0x0DB8,0x0003,0x0004,0x0000,0x0000]
generator :
distribution : "seq"
clients_start : "16.0.0.1"
clients_end : "16.0.21.255"
servers_start : "48.0.0.1"
servers_end : "48.0.21.255"
clients_per_gb : 201
min_clients : 201
dual_port_mask : "1.0.0.0"
tcp_aging : 0
udp_aging : 0
mac : [0x0,0x0,0x0,0x1,0x0,0x00]
参考: