Perf: Bump T-Rex to 2.88
[csit.git] / GPL / traffic_profiles / trex / trex-stl-3n-ethip4udp-10u15p.py
1 # Copyright (c) 2021 Cisco and/or its affiliates.
2 #
3 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
4 #
5 # Licensed under the Apache License 2.0 or
6 # GNU General Public License v2.0 or later;  you may not use this file
7 # except in compliance with one of these Licenses. You
8 # may obtain a copy of the Licenses at:
9 #
10 #     http://www.apache.org/licenses/LICENSE-2.0
11 #     https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 #
13 # Note: If this file is linked with Scapy, which is GPLv2+, your use of it
14 # must be under GPLv2+.  If at any point in the future it is no longer linked
15 # with Scapy (or other GPLv2+ licensed software), you are free to choose
16 # Apache 2.
17 #
18 # Unless required by applicable law or agreed to in writing, software
19 # distributed under the License is distributed on an "AS IS" BASIS,
20 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 # See the License for the specific language governing permissions and
22 # limitations under the License.
23
24 """Stream profile for T-rex traffic generator.
25
26 Stream profile:
27  - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time.
28  - Packet: ETH / IP / UDP
29  - Direction 0 --> 1:
30    - Source IP address range:      20.0.0.0 - 20.0.0.9
31    - Destination IP address range: 12.0.0.2
32    - Source UDP port range:        1024 - 1038
33    - Destination UDP port range:   1024
34  - Direction 1 --> 0:
35    - Source IP address range:      12.0.0.2
36    - Destination IP address range: 200.0.0.0
37    - Source UDP port range:        1024
38    - Destination UDP port range:   1024 - 1173
39 """
40
41 from trex.stl.api import *
42 from profile_trex_stateless_base_class import TrafficStreamsBaseClass
43
44
45 class TrafficStreams(TrafficStreamsBaseClass):
46     """Stream profile."""
47
48     def __init__(self):
49         """Initialization and setting of streams' parameters."""
50
51         super(TrafficStreamsBaseClass, self).__init__()
52
53         # IPs used in packet headers.
54         self.p1_src_start_ip = u"20.0.0.0"
55         self.p1_src_end_ip = u"20.0.0.9"
56         self.p1_dst_start_ip = u"12.0.0.2"
57
58         self.p2_src_start_ip = u"12.0.0.2"
59         #self.p2_src_end_ip = u"12.0.0.2"
60         self.p2_dst_start_ip = u"200.0.0.0"
61
62         # UDP ports used in packet headers.
63         self.p1_src_start_udp_port = 1024
64         self.p1_src_end_udp_port = 1038
65         self.p1_dst_start_udp_port = 1024
66
67         self.p2_src_start_udp_port = 1024
68         self.p2_dst_start_udp_port = 1024
69         self.p2_dst_end_udp_port = 1173
70
71     def define_packets(self):
72         """Defines the packets to be sent from the traffic generator.
73
74         Packet definition: | ETH | IP | UDP |
75
76         :returns: Packets to be sent from the traffic generator.
77         :rtype: tuple
78         """
79
80         # Direction 0 --> 1
81         base_pkt_a = (
82             Ether() /
83             IP(
84                 src=self.p1_src_start_ip,
85                 dst=self.p1_dst_start_ip,
86                 proto=17
87             ) /
88             UDP(
89                 sport=self.p1_src_start_udp_port,
90                 dport=self.p1_dst_start_udp_port
91             )
92         )
93         # Direction 1 --> 0
94         base_pkt_b = (
95           Ether() /
96             IP(
97                 src=self.p2_src_start_ip,
98                 dst=self.p2_dst_start_ip,
99                 proto=17
100             ) /
101             UDP(
102                 sport=self.p2_src_start_udp_port,
103                 dport=self.p2_dst_start_udp_port
104             )
105         )
106
107         # Direction 0 --> 1
108         vm1 = STLScVmRaw(
109             [
110                 STLVmTupleGen(
111                     ip_min=self.p1_src_start_ip,
112                     ip_max=self.p1_src_end_ip,
113                     port_min=self.p1_src_start_udp_port,
114                     port_max=self.p1_src_end_udp_port,
115                     name=u"tuple"
116                 ),
117                 STLVmWrFlowVar(
118                     fv_name=u"tuple.ip",
119                     pkt_offset=u"IP.src"
120                 ),
121                 STLVmFixIpv4(
122                     offset=u"IP"
123                 ),
124                 STLVmWrFlowVar(
125                     fv_name=u"tuple.port",
126                     pkt_offset=u"UDP.sport"
127                 )
128             ]
129         )
130         # Direction 0 --> 1
131         vm2 = STLScVmRaw(
132             [
133               STLVmFlowVar(
134                     name=u"dport",
135                     min_value=self.p2_dst_start_udp_port,
136                     max_value=self.p2_dst_end_udp_port,
137                     size=2,
138                     op=u"inc"
139                 ),
140                 STLVmWrFlowVar(
141                     fv_name=u"dport",
142                     pkt_offset=u"UDP.dport"
143                 )
144             ]
145         )
146
147         return base_pkt_a, base_pkt_b, vm1, vm2
148
149
150 def register():
151     """Register this traffic profile to T-rex.
152
153     Do not change this function.
154
155     :return: Traffic streams.
156     :rtype: Object
157     """
158     return TrafficStreams()