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
84
85
86
87
|
from common.trex_streams import *
from client_utils.packet_builder import CTRexPktBuilder
class STLImix(object):
def __init__ (self):
ip_range = {'src' : {}, 'dst': {}}
ip_range['src']['start'] = "10.0.0.1"
ip_range['src']['end'] = "10.0.0.254"
ip_range['dst']['start'] = "8.0.0.1"
ip_range['dst']['end'] = "8.0.0.254"
self.ip_range = ip_range
def get_streams (self, flip = False):
# construct the base packet for the profile
base_pkt = CTRexPktBuilder()
base_pkt.add_pkt_layer("l2", dpkt.ethernet.Ethernet())
base_pkt.set_layer_attr("l2", "type", dpkt.ethernet.ETH_TYPE_IP)
base_pkt.add_pkt_layer("l3_ip", dpkt.ip.IP())
base_pkt.add_pkt_layer("l4_udp", dpkt.udp.UDP())
if not flip:
src = self.ip_range['src']
dst = self.ip_range['dst']
else:
src = self.ip_range['dst']
dst = self.ip_range['src']
base_pkt.set_vm_ip_range(ip_layer_name = "l3_ip",
ip_field = "src",
ip_start = src['start'],
ip_end = src['end'],
operation = "inc",
split = True)
base_pkt.set_vm_ip_range(ip_layer_name = "l3_ip",
ip_field = "dst",
ip_start = dst['start'],
ip_end = dst['end'],
operation = "inc")
# pad to 60 bytes
pkt_1 = base_pkt.clone()
payload_size = 60 - len(pkt_1.get_layer('l2'))
pkt_1.set_pkt_payload("a" * payload_size)
pkt_1.set_layer_attr("l3_ip", "len", len(pkt_1.get_layer('l3_ip')))
s1 = STLStream(packet = pkt_1,
mode = STLTXCont())
# stream 2
pkt_2 = base_pkt.clone()
payload_size = 590 - len(pkt_2.get_layer('l2'))
pkt_2.set_pkt_payload("a" * payload_size)
pkt_2.set_layer_attr("l3_ip", "len", len(pkt_2.get_layer('l3_ip')))
s2 = STLStream(packet = pkt_2,
mode = STLTXCont())
# stream 3
pkt_3 = base_pkt.clone()
payload_size = 1514 - len(pkt_3.get_layer('l2'))
pkt_3.set_pkt_payload("a" * payload_size)
pkt_3.set_layer_attr("l3_ip", "len", len(pkt_3.get_layer('l3_ip')))
s3 = STLStream(packet = pkt_3,
mode = STLTXCont())
return [s1, s2, s3]
# dynamic load
def register():
return STLImix()
|