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:
6 # http://www.apache.org/licenses/LICENSE-2.0
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.
14 """Traffic profile for T-rex advanced stateful (astf) traffic generator.
17 - Two streams sent in directions 0 --> 1 (client -> server, requests) and
18 1 --> 0 (server -> client, responses) at the same time.
19 - Packet: ETH / IP / UDP
21 - Source IP address range: 192.168.0.0 - 192.168.63.255
22 - Destination IP address range: 20.0.0.0 - 20.0.63.255
24 - Source IP address range: destination IP address from packet received
26 - Destination IP address range: source IP address from packet received
29 This is a profile for CPS tests, it only sets up UDP session.
30 No delays, no data transfer.
31 Keepalive mechanism cannot be disabled, so it is at least set to long waits.
34 from trex.astf.api import *
36 from profile_trex_astf_base_class import TrafficProfileBaseClass
39 class TrafficProfile(TrafficProfileBaseClass):
40 """Traffic profile."""
43 """Initialization and setting of profile parameters."""
45 super(TrafficProfileBaseClass, self).__init__()
47 # IPs used in packet headers.
48 self.p1_src_start_ip = u"192.168.0.0"
49 self.p1_src_end_ip = u"192.168.63.255"
50 self.p1_dst_start_ip = u"20.0.0.0"
51 self.p1_dst_end_ip = u"20.0.63.255"
58 self.headers_size = 42 # 14B l2 + 20B ipv4 + 8B udp
60 # Required UDP keepalive value for T-Rex
61 self.udp_keepalive = 2000*1000*100 # 200000s (200,000,000 msec)
63 def define_profile(self):
64 """Define profile to be used by advanced stateful traffic generator.
66 This method MUST return:
67 return ip_gen, templates, None
69 :returns: IP generator and profile templates ASTFProfile().
72 self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
73 self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
76 prog_c = ASTFProgram(stream=False)
77 prog_c.set_keepalive_msg(self.udp_keepalive)
79 prog_c.send_msg(self.udp_req)
84 prog_s = ASTFProgram(stream=False)
85 prog_c.set_keepalive_msg(self.udp_keepalive)
89 prog_s.send_msg(self.udp_res)
92 ip_gen_c = ASTFIPGenDist(
93 ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
96 ip_gen_s = ASTFIPGenDist(
97 ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
101 glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
102 dist_client=ip_gen_c,
107 s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080))
110 temp_c = ASTFTCPClientTemplate(
113 limit=1032192, # TODO: set via input parameter ?
116 temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
117 template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
119 return ip_gen, template, None
123 """Register this traffic profile to T-Rex.
125 Do not change this function.
127 :return: Traffic Profiles.
130 return TrafficProfile()