1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
import sys
sys.path.insert(0, "../")
from trex_stl_api import *
import dpkt
import time
def simple_burst ():
# build a simple packet
pkt_bld = STLPktBuilder()
pkt_bld.add_pkt_layer("l2", dpkt.ethernet.Ethernet())
# set Ethernet layer attributes
pkt_bld.set_eth_layer_addr("l2", "src", "00:15:17:a7:75:a3")
pkt_bld.set_eth_layer_addr("l2", "dst", "e0:5f:b9:69:e9:22")
pkt_bld.set_layer_attr("l2", "type", dpkt.ethernet.ETH_TYPE_IP)
# set IP layer attributes
pkt_bld.add_pkt_layer("l3_ip", dpkt.ip.IP())
pkt_bld.set_ip_layer_addr("l3_ip", "src", "21.0.0.2")
pkt_bld.set_ip_layer_addr("l3_ip", "dst", "22.0.0.12")
pkt_bld.set_layer_attr("l3_ip", "p", dpkt.ip.IP_PROTO_TCP)
# set TCP layer attributes
pkt_bld.add_pkt_layer("l4_tcp", dpkt.tcp.TCP())
pkt_bld.set_layer_attr("l4_tcp", "sport", 13311)
pkt_bld.set_layer_attr("l4_tcp", "dport", 80)
pkt_bld.set_layer_attr("l4_tcp", "flags", 0)
pkt_bld.set_layer_attr("l4_tcp", "win", 32768)
pkt_bld.set_layer_attr("l4_tcp", "seq", 0)
#pkt_bld.set_pkt_payload("abcdefgh")
pkt_bld.set_layer_attr("l3_ip", "len", len(pkt_bld.get_layer('l3_ip')))
# create client
c = STLClient()
passed = True
try:
#c.logger.set_verbose(c.logger.VERBOSE_NORMAL)
# create two bursts and link them
s1 = STLSingleBurstStream(packet = pkt_bld, total_pkts = 5000)
s2 = STLSingleBurstStream(packet = pkt_bld, total_pkts = 3000, next_stream_id = s1.get_id())
# connect to server
c.connect()
# prepare our ports
c.reset(ports = [0, 1])
# add both streams to ports
c.add_streams([s1, s2], ports = [0, 1])
# run 5 times
for i in xrange(1, 6):
c.clear_stats()
c.start(ports = [0, 1], mult = "1gbps")
c.wait_on_traffic(ports = [0, 1])
stats = c.get_stats()
ipackets = stats['total']['ipackets']
print "Test iteration {0} - Packets Received: {1} ".format(i, ipackets)
# (5000 + 3000) * 2 ports = 16,000
if (ipackets != (16000)):
passed = False
except STLError as e:
passed = False
print e
finally:
c.disconnect()
if passed:
print "\nTest has passed :-)\n"
else:
print "\nTest has failed :-(\n"
# run the tests
simple_burst()
|