Switch licenses in GPL directory
[csit.git] / GPL / traffic_profiles / trex / trex-astf-ethip4udp-262144h.py
1 # Copyright (c) 2020 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 Apache 2.
16 #
17 # Unless required by applicable law or agreed to in writing, software
18 # distributed under the License is distributed on an "AS IS" BASIS,
19 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 # See the License for the specific language governing permissions and
21 # limitations under the License.
22
23 """Traffic profile for T-rex advanced stateful (astf) traffic generator.
24
25 Traffic profile:
26  - Two streams sent in directions 0 --> 1 (client -> server, requests) and
27    1 --> 0 (server -> client, responses) at the same time.
28  - Packet: ETH / IP / UDP
29  - Direction 0 --> 1:
30    - Source IP address range:      172.16.0.0 - 172.19.255.255
31    - Destination IP address range: 20.16.0.0 - 20.19.255.255
32  - Direction 1 --> 0:
33    - Source IP address range:      destination IP address from packet received
34      on port 1
35    - Destination IP address range: source IP address from packet received
36      on port 1
37
38 This is a profile for CPS tests, it only sets up UDP session.
39 No delays, no data transfer.
40 Keepalive mechanism cannot be disabled, so it is at least set to long waits.
41 """
42
43 from trex.astf.api import *
44
45 from profile_trex_astf_base_class import TrafficProfileBaseClass
46
47
48 class TrafficProfile(TrafficProfileBaseClass):
49     """Traffic profile."""
50
51     def __init__(self):
52         """Initialization and setting of profile parameters."""
53
54         super(TrafficProfileBaseClass, self).__init__()
55
56         # IPs used in packet headers.
57         self.p1_src_start_ip = u"172.16.0.0"
58         self.p1_src_end_ip = u"172.19.255.255"
59         self.p1_dst_start_ip = u"20.16.0.0"
60         self.p1_dst_end_ip = u"20.19.255.255"
61
62         # UDP messages
63         self.udp_req = u"GET"
64         self.udp_res = u"ACK"
65
66         # Headers length
67         self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B udp
68
69         # No need to set keepalive, both programs end just after start&send.
70
71     def define_profile(self):
72         """Define profile to be used by advanced stateful traffic generator.
73
74         This method MUST return:
75             return ip_gen, templates, None
76
77         :returns: IP generator and profile templates ASTFProfile().
78         :rtype: tuple
79         """
80         self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
81         self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
82
83         # client commands
84         prog_c = ASTFProgram(stream=False)
85         # send REQ message
86         prog_c.send_msg(self.udp_req)
87         # No need to process the response, seeing L2 counter is enough.
88         # Client program can end here.
89
90         # server commands
91         prog_s = ASTFProgram(stream=False)
92         # When server instance is created means REQ is visible in L2 counter.
93         # No need to receive explicitly?
94         # send RES message
95         prog_s.send_msg(self.udp_res)
96         # Server program can end here.
97
98         # ip generators
99         ip_gen_c = ASTFIPGenDist(
100             ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
101             distribution=u"seq"
102         )
103         ip_gen_s = ASTFIPGenDist(
104             ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
105             distribution=u"seq"
106         )
107         ip_gen = ASTFIPGen(
108             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
109             dist_client=ip_gen_c,
110             dist_server=ip_gen_s
111         )
112
113         # server association
114         s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080))
115
116         # template
117         temp_c = ASTFTCPClientTemplate(
118             program=prog_c,
119             ip_gen=ip_gen,
120             limit=16515072,  # TODO: set via input parameter ?
121             port=8080
122         )
123         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
124         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
125
126         return ip_gen, template, None
127
128
129 def register():
130     """Register this traffic profile to T-Rex.
131
132     Do not change this function.
133
134     :return: Traffic Profiles.
135     :rtype: Object
136     """
137     return TrafficProfile()