Performance: Fix l3fwd in 3node
[csit.git] / resources / traffic_profiles / trex / trex-sl-dot1qip4-vlan1ip4src254ip4dst254-bvi.py
1 # Copyright (c) 2020 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 """Stream profile for T-rex traffic generator.
15
16 Stream profile:
17  - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time.
18  - Packet: ETH / DOT1Q / IP /
19  - Direction 0 --> 1:
20    - Destination MAC address:       ba:dc:00:ff:ee:01
21    - VLAN range:                    100
22    - Source IP address range:       10.10.10.1 - 10.10.10.254
23    - Destination IP address range:  20.20.20.1 - 20.20.20.254
24  - Direction 1 --> 0:
25    - Destination MAC address:       ba:dc:00:ff:ee:01
26    - VLAN range:                    200
27    - Source IP address range:       20.20.20.1 - 20.20.20.254
28    - Destination IP address range:  10.10.10.1 - 10.10.10.254
29 """
30
31 from trex.stl.api import *
32 from profile_trex_stateless_base_class import TrafficStreamsBaseClass
33
34
35 class TrafficStreams(TrafficStreamsBaseClass):
36     """Stream profile."""
37
38     def __init__(self):
39         """Initialization and setting of streams' parameters."""
40
41         super(TrafficStreamsBaseClass, self).__init__()
42
43         # VLAN IDs
44         self.p1_vlan_start = 100
45         self.p2_vlan_start = 200
46
47         # IPs used in packet headers.
48         self.p1_src_start_ip = u"10.10.10.1"
49         self.p1_src_end_ip = u"10.10.10.254"
50
51         self.p1_dst_start_ip = u"20.20.20.1"
52         self.p1_dst_end_ip = u"20.20.20.254"
53
54         self.p2_src_start_ip = u"20.20.20.1"
55         self.p2_src_end_ip = u"20.20.20.254"
56
57         self.p2_dst_start_ip = u"10.10.10.1"
58         self.p2_dst_end_ip = u"10.10.10.254"
59
60     def define_packets(self):
61         """Defines the packets to be sent from the traffic generator.
62
63         Packet definition: | ETH | DOT1Q | IP |
64
65         :returns: Packets to be sent from the traffic generator.
66         :rtype: tuple
67         """
68
69         # Direction 0 --> 1
70         base_pkt_a = (
71             Ether(
72                 dst=u"ba:dc:00:ff:ee:01"
73             ) /
74             Dot1Q(
75                 vlan=self.p1_vlan_start
76             ) /
77             IP(
78                 src=self.p1_src_start_ip,
79                 dst=self.p1_dst_start_ip,
80                 proto=61
81             )
82         )
83         # Direction 1 --> 0
84         base_pkt_b = (
85             Ether(
86                 dst=u"ba:dc:00:ff:ee:01"
87             ) /
88             Dot1Q(
89                 vlan=self.p2_vlan_start
90             ) /
91             IP(
92                 src=self.p2_src_start_ip,
93                 dst=self.p2_dst_start_ip,
94                 proto=61
95             )
96         )
97
98         # Direction 0 --> 1
99         vm1 = STLScVmRaw(
100             [
101                 STLVmFlowVar(
102                     name=u"ip_src",
103                     min_value=self.p1_src_start_ip,
104                     max_value=self.p1_src_end_ip,
105                     size=4,
106                     op=u"random"
107                 ),
108                 STLVmWrFlowVar(
109                     fv_name=u"ip_src",
110                     pkt_offset=u"IP.src"
111                 ),
112                 STLVmFlowVar(
113                     name=u"ip_dst",
114                     min_value=self.p1_dst_start_ip,
115                     max_value=self.p1_dst_end_ip,
116                     size=4,
117                     op=u"random"
118                 ),
119                 STLVmWrFlowVar(
120                     fv_name=u"ip_dst",
121                     pkt_offset=u"IP.dst"
122                 ),
123                 STLVmFixIpv4(
124                     offset=u"IP"
125                 )
126             ]
127         )
128         # Direction 1 --> 0
129         vm2 = STLScVmRaw(
130             [
131                 STLVmFlowVar(
132                     name=u"ip_src",
133                     min_value=self.p2_src_start_ip,
134                     max_value=self.p2_src_end_ip,
135                     size=4,
136                     op=u"random"
137                 ),
138                 STLVmWrFlowVar(
139                     fv_name=u"ip_src",
140                     pkt_offset=u"IP.src"
141                 ),
142                 STLVmFlowVar(
143                     name=u"ip_dst",
144                     min_value=self.p2_dst_start_ip,
145                     max_value=self.p2_dst_end_ip,
146                     size=4,
147                     op=u"random"
148                 ),
149                 STLVmWrFlowVar(
150                     fv_name=u"ip_dst",
151                     pkt_offset=u"IP.dst"
152                 ),
153                 STLVmFixIpv4(
154                     offset=u"IP"
155                 )
156             ]
157         )
158
159         return base_pkt_a, base_pkt_b, vm1, vm2
160
161
162 def register():
163     """Register this traffic profile to T-rex.
164
165     Do not change this function.
166
167     :returns: Traffic streams.
168     :rtype: Object
169     """
170     return TrafficStreams()