1 from trex_stl_lib.api import *
6 def create_stream(self, port_id):
7 # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
10 # if len(base_pkt) < 64:
11 # pad_len = 64 - len(base_pkt)
12 # pad.load = '\x00' * pad_len
16 # vm.tuple_var(name="tuple", ip_min="10.0.0.3", ip_max="10.0.0.202", port_min=1025, port_max=61124, limit_flows = 100000)
18 # vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
21 # vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
23 # pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
25 # return STLStream(packet=pkt, mode=STLTXCont())
27 vm = STLScVmRaw([STLVmTupleGen(ip_min="10.0.0.1", ip_max="10.255.255.254",
28 port_min=1025, port_max=65535,
29 name="stuple", limit_flows=10000),
30 STLVmTupleGen(ip_min="2.0.0.1", ip_max="2.255.255.254",
31 port_min=1025, port_max=65535,
32 name="dtuple", limit_flows=100000000),
34 # write ip to packet IP.src
35 STLVmWrFlowVar(fv_name="stuple.ip",
37 STLVmWrFlowVar(fv_name="dtuple.ip",
40 STLVmFixIpv4(offset="IP"),
42 STLVmWrFlowVar(fv_name="stuple.port",
43 pkt_offset="UDP.sport"),
44 STLVmWrFlowVar(fv_name="dtuple.port",
45 pkt_offset="UDP.dport"),
49 base_pkt = Ether()/IP(src="16.0.0.1", dst="2.0.0.1")/UDP(dport=12, sport=1025)
51 if len(base_pkt) < 64:
52 pad_len = 64 - len(base_pkt)
53 pad.load = '\x00' * pad_len
55 pad = max(0, 64 - len(base_pkt)) * 'x'
56 pad_latency = max(0, (64-4) - len(base_pkt)) * 'x'
58 pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
60 return [STLStream(packet=pkt, mode=STLTXCont()),
62 STLStream(packet = STLPktBuilder(pkt = base_pkt/pad_latency),
63 mode = STLTXCont(pps=1000),
64 flow_stats = STLFlowLatencyStats(pg_id = 12+port_id))
67 def get_streams(self, direction=0, **kwargs):
68 # return [self.create_stream()]
69 return self.create_stream(kwargs['port_id'])
72 # dynamic load - used for trex console or simulator