feat(astf): Support framesizes for ASTF 10/35910/56
authorVratko Polak <vrpolak@cisco.com>
Mon, 25 Apr 2022 08:22:05 +0000 (10:22 +0200)
committerVratko Polak <vrpolak@cisco.com>
Tue, 3 May 2022 15:23:47 +0000 (15:23 +0000)
- No support for IMIX.
+ Fix a bad bug in padding (most ASTF profiles had wrong frame sizes).
+ Fix a big typo in TCP PPS profiles (s->c was not data, just RST).
+ Control transaction size via ASTF_N_DATA_FRAMES env variable.
 - Default value 5 leads to transactions smaller than before.
 + It ensures transaction is one burst (per direction) even for jumbo.
+ Edit autogen to set supported frame sizes based on suite id.
 + Both TCP and UDP use the same values:
  + 64B for CPS (exact for UDP, nominal for TCP).
  + 100B, 1518B and 9000B for TPUT and PPS.
   - TCP TPUT achievable minimum is 70B.
   + Used 100B to leave room for possible IPv6 ASTF tests.
 + Separate function for code reused by vpp and trex tests.
 - I do not really like the new "copy and edit" approach added here.
  + But it is a quick edit, better autogen refactor is low priority.
+ Consider both established and transitory sessions as valid.
 - Mostly for compatibility with 2202 behavior and to avoid ramp-ups.
 - Assuming both session states have similar enough VPP CPU overhead.
 + Added a TODO to investigate and maybe reconsider later.
+ Update the state timeout value to 240s.
 + That is the default for TCP (for transitory state).
 - UDP could keep using 300s.
  + But I prefer UDP and TCP to behave as similarly as possible.
+ Use TRex tunables to get the exact frame size (for data packets).
 - It is not clear why the recipe for MSS has to be this complicated.
 + Move code away from profile init, as frame size is not known there.
 + Change internal profile API, so values related to MSS are passed.
+ Lower ramp-up rate for TCP TPUT tests.
 + Because without lower rate, jumbo fails on packet loss in ramp-up.
 + UDP TPUT ramp-up rate also lowered (just to keep suites more similar).
+ Distinguish one-direction and aggregated average frame size.
 + Update keyword documentation where the distiction matters.
 + One-direction is needed for turning bandwidth limit to TPS limit.
 + Aggregated is needed for correct NDRPDR bandwidth result value.
 - TCP TPUT will always be few percent below bidirectional maximum.
  + That is unavoidable, as one direction sends more control packets.
+ Add runtime consistency checks so future refactors are safer.
 + Fail if padding requested would be negative.
 + Fail if suite claims unexpected values for packets per transaction.
+ Edit the 4 types of ASTF profiles to keep them similar to each other.
 + Move UDP TPUT limit value from a field back to direct argument.
 + Stop pretending first UDP packet is not data.
+ Apply small improvements where convenient.
 + Replace "aggregate" with "aggregated" where possible.
  + To lower probability of any future typos in variable names.
 + Avoid calling Set Numeric Frame Sizes twice.
 + Code formatting, keyword documentation, code comments, ...
 + Add TODOs for less important code quality improvements.
- Postpone updating of methodology pages to a subsequent change.

Change-Id: I4b381e5210e69669f972326202fdcc5a2c9c923b
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
63 files changed:
GPL/tools/trex/trex_astf_profile.py
GPL/traffic_profiles/trex/profile_trex_astf_base_class.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h-pps.py
GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h.py
resources/libraries/python/Constants.py
resources/libraries/python/NATUtil.py
resources/libraries/python/TrafficGenerator.py
resources/libraries/python/autogen/Regenerator.py
resources/libraries/robot/performance/performance_display.robot
resources/libraries/robot/performance/performance_utils.robot
resources/libraries/robot/performance/performance_vars.robot
tests/trex/perf/ip4/1n1l-10ge2p1x710-ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr.robot
tests/trex/perf/ip4/1n1l-10ge2p1x710-ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr.robot
tests/trex/perf/ip4/1n1l-10ge2p1x710-ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr.robot
tests/trex/perf/ip4/1n1l-10ge2p1x710-ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr.robot

index 193ff21..a2d177f 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/python3
 
 #!/usr/bin/python3
 
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -73,6 +73,7 @@ def simple_burst(
         profile_file,
         duration,
         framesize,
         profile_file,
         duration,
         framesize,
+        n_data_frames,
         multiplier,
         port_0,
         port_1,
         multiplier,
         port_0,
         port_1,
@@ -115,6 +116,7 @@ def simple_burst(
     :param duration: Expected duration for all transactions to finish,
         without any TRex related delays, without even latency.
     :param framesize: Frame size.
     :param duration: Expected duration for all transactions to finish,
         without any TRex related delays, without even latency.
     :param framesize: Frame size.
+    :param n_data_frames: Controls "size" of transaction for TPUT tests.
     :param multiplier: Multiplier of profile CPS.
     :param port_0: Port 0 on the traffic generator.
     :param port_1: Port 1 on the traffic generator.
     :param multiplier: Multiplier of profile CPS.
     :param port_0: Port 0 on the traffic generator.
     :param port_1: Port 1 on the traffic generator.
@@ -125,6 +127,7 @@ def simple_burst(
     :type profile_file: str
     :type duration: float
     :type framesize: int or str
     :type profile_file: str
     :type duration: float
     :type framesize: int or str
+    :type n_data_frames: int
     :type multiplier: int
     :type port_0: int
     :type port_1: int
     :type multiplier: int
     :type port_0: int
     :type port_1: int
@@ -151,7 +154,11 @@ def simple_burst(
         # TODO: key-values pairs to the profile file
         #  - ips ?
         print(f"### Profile file:\n{profile_file}")
         # TODO: key-values pairs to the profile file
         #  - ips ?
         print(f"### Profile file:\n{profile_file}")
-        profile = ASTFProfile.load(profile_file, framesize=framesize)
+        profile = ASTFProfile.load(
+            profile_file,
+            framesize=framesize,
+            n_data_frames=n_data_frames,
+        )
     except TRexError:
         print(f"Error while loading profile '{profile_file}'!")
         raise
     except TRexError:
         print(f"Error while loading profile '{profile_file}'!")
         raise
@@ -415,6 +422,10 @@ def main():
         u"-s", u"--frame_size", required=True,
         help=u"Size of a Frame without padding and IPG."
     )
         u"-s", u"--frame_size", required=True,
         help=u"Size of a Frame without padding and IPG."
     )
+    parser.add_argument(
+        u"--n_data_frames", type=int, default=5,
+        help=u"Use this many data frames per transaction and direction (TPUT)."
+    )
     parser.add_argument(
         u"-m", u"--multiplier", required=True, type=float,
         help=u"Multiplier of profile CPS."
     parser.add_argument(
         u"-m", u"--multiplier", required=True, type=float,
         help=u"Multiplier of profile CPS."
@@ -455,6 +466,7 @@ def main():
         profile_file=args.profile,
         duration=args.duration,
         framesize=framesize,
         profile_file=args.profile,
         duration=args.duration,
         framesize=framesize,
+        n_data_frames=args.n_data_frames,
         multiplier=args.multiplier,
         port_0=args.port_0,
         port_1=args.port_1,
         multiplier=args.multiplier,
         port_0=args.port_0,
         port_1=args.port_1,
index e36e52c..cb8fd76 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -46,13 +46,9 @@ class TrafficProfileBaseClass:
         ]
     }
 
         ]
     }
 
-    def __init__(self):
-        # Default values of required parameters; can be overwritten in
-        # "get_profile" method.
-        self.framesize = 64
-        self._pcap_dir = u""
-
-        # If needed, add your own parameters.
+    # TODO: Declare and document fields in a contructor to make pylint happier.
+    # TODO: Consider passing the values to define_profile(),
+    #       instead of keeping (and documenting) them as instance fields here.
 
     @property
     def pcap_dir(self):
 
     @property
     def pcap_dir(self):
@@ -72,7 +68,7 @@ class TrafficProfileBaseClass:
 
         :param current_length: Current length of the packet.
         :param required_length: Required length of the packet. If set to 0 then
 
         :param current_length: Current length of the packet.
         :param required_length: Required length of the packet. If set to 0 then
-        self.framesize value is used.
+            self.framesize value is used.
         :type current_length: int
         :type required_length: int
         :returns: The generated padding.
         :type current_length: int
         :type required_length: int
         :returns: The generated padding.
@@ -82,20 +78,25 @@ class TrafficProfileBaseClass:
         #  use random.randrange(0, len(self.STREAM_TABLE[self.framesize])) ?
         if not required_length:
             required_length = self.framesize
         #  use random.randrange(0, len(self.STREAM_TABLE[self.framesize])) ?
         if not required_length:
             required_length = self.framesize
-
-        return str(choices(ascii_letters, k=required_length - current_length))
+        missing = required_length - current_length
+        if missing < 0:
+            msg = f"Cannot to pad from {current_length} to {required_length}."
+            raise RuntimeError(msg)
+        padding = u"".join(choices(ascii_letters, k=missing))
+        return padding
 
     def define_profile(self):
         """Define profile to be used by T-Rex astf traffic generator.
 
         This method MUST return:
 
 
     def define_profile(self):
         """Define profile to be used by T-Rex astf traffic generator.
 
         This method MUST return:
 
-            return ip_gen, templates, cap_list
+            return ip_gen, templates, kwargs
 
 
-            templates or cap_list CAN be None.
+            templates or kwargs CAN be None.
+            Kwargs can be used to define PCAP file, set MSS, ...
 
         :returns: IP generator and profile templates or list of pcap files for
 
         :returns: IP generator and profile templates or list of pcap files for
-        traffic generator.
+            traffic generator.
         :rtype: tuple
         """
         raise NotImplementedError
         :rtype: tuple
         """
         raise NotImplementedError
@@ -108,15 +109,14 @@ class TrafficProfileBaseClass:
         :returns: Traffic profile.
         :rtype: trex.astf.trex_astf_profile.ASTFProfile
         """
         :returns: Traffic profile.
         :rtype: trex.astf.trex_astf_profile.ASTFProfile
         """
-        ip_gen, templates, cap_list = self.define_profile()
-
-        # In most cases you will not have to change the code below:
+        ip_gen, templates, kwargs = self.define_profile()
+        if kwargs is None:
+            kwargs = dict()
 
 
-        # profile
         profile = ASTFProfile(
             default_ip_gen=ip_gen,
             templates=templates,
         profile = ASTFProfile(
             default_ip_gen=ip_gen,
             templates=templates,
-            cap_list=cap_list
+            **kwargs
         )
 
         return profile
         )
 
         return profile
@@ -127,11 +127,13 @@ class TrafficProfileBaseClass:
         If needed, add your own parameters.
 
         :param kwargs: Key-value pairs used by "create_profile" method while
         If needed, add your own parameters.
 
         :param kwargs: Key-value pairs used by "create_profile" method while
-        creating the profile.
+            creating the profile.
+        :type kwargs: dict
         :returns: Traffic profile.
         :rtype: trex.astf.trex_astf_profile.ASTFProfile
         """
         self.framesize = kwargs[u"framesize"]
         :returns: Traffic profile.
         :rtype: trex.astf.trex_astf_profile.ASTFProfile
         """
         self.framesize = kwargs[u"framesize"]
+        self.n_data_frames = kwargs[u"n_data_frames"]
         self._pcap_dir = kwargs.get(
             u"pcap_dir", u"/opt/trex-core-2.88/scripts/avl"
         )
         self._pcap_dir = kwargs.get(
             u"pcap_dir", u"/opt/trex-core-2.88/scripts/avl"
         )
index 70fcaa0..546e11b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,22 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.3.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.3.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-        self.data_size = 11111
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -73,31 +57,44 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.3.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.3.255"
+
+        # Headers length, not sure why TRex needs 32B for segment header.
+        real_headers_size = 70  # 18B L2 + 20B IPv4 + 32B TCP.
+        trex_headers_size = real_headers_size - 12  # As if TCP header is 20B.
+        trex_mss = self.framesize - trex_headers_size
+        real_mss = trex_mss - 12  # TRex honors segment header+data limit.
+        data_size = self.n_data_frames * real_mss
+
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
-        prog_c.send(u"1" * self.data_size)
-        prog_c.recv(self.data_size)
+        prog_c.send(u"1" * data_size)
+        prog_c.recv(data_size)
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
-        prog_c.recv(self.data_size)
-        prog_c.send(u"1" * self.data_size)
+        prog_s.recv(data_size)
+        prog_s.send(u"1" * data_size)
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -108,12 +105,25 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=64512,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=64512,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
-        return ip_gen, template, None
+        globinfo = ASTFGlobalInfo()
+        # Ensure correct data frame size.
+        globinfo.tcp.mss = trex_mss
+        # Ensure the whole transaction is a single burst (per direction).
+        globinfo.tcp.initwnd = self.n_data_frames
+        # Ensure buffers are large enough so starting window works.
+        globinfo.tcp.txbufsize = data_size
+        globinfo.tcp.rxbufsize = data_size
+        kwargs = dict(
+            default_c_glob_info=globinfo,
+            default_s_glob_info=globinfo,
+        )
+
+        return ip_gen, template, kwargs
 
 
 def register():
 
 
 def register():
index 2e4fca2..4c6a15a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,21 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.3.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.3.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -72,6 +57,14 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # No data, no way to manipulate frame sizes via MSS.
+
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.3.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.3.255"
+
         # client commands
         prog_c = ASTFProgram()
         # send syn
         # client commands
         prog_c = ASTFProgram()
         # send syn
@@ -88,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass):
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -109,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=64512,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=64512,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 19402ba..565ccac 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,22 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.63.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.63.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-        self.data_size = 11111
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -73,31 +57,44 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.63.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.63.255"
+
+        # Headers length, not sure why TRex needs 32B for segment header.
+        real_headers_size = 70  # 18B L2 + 20B IPv4 + 32B TCP.
+        trex_headers_size = real_headers_size - 12  # As if TCP header is 20B.
+        trex_mss = self.framesize - trex_headers_size
+        real_mss = trex_mss - 12  # TRex honors segment header+data limit.
+        data_size = self.n_data_frames * real_mss
+
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
-        prog_c.send(u"1" * self.data_size)
-        prog_c.recv(self.data_size)
+        prog_c.send(u"1" * data_size)
+        prog_c.recv(data_size)
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
-        prog_c.recv(self.data_size)
-        prog_c.send(u"1" * self.data_size)
+        prog_s.recv(data_size)
+        prog_s.send(u"1" * data_size)
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -108,12 +105,25 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=1032192,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=1032192,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
-        return ip_gen, template, None
+        globinfo = ASTFGlobalInfo()
+        # Ensure correct data frame size.
+        globinfo.tcp.mss = trex_mss
+        # Ensure the whole transaction is a single burst (per direction).
+        globinfo.tcp.initwnd = self.n_data_frames
+        # Ensure buffers are large enough so starting window works.
+        globinfo.tcp.txbufsize = data_size
+        globinfo.tcp.rxbufsize = data_size
+        kwargs = dict(
+            default_c_glob_info=globinfo,
+            default_s_glob_info=globinfo,
+        )
+
+        return ip_gen, template, kwargs
 
 
 def register():
 
 
 def register():
index 8f4d12e..728ad5b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,21 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.63.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.63.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -72,6 +57,14 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # No data, no way to manipulate frame sizes via MSS.
+
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.63.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.63.255"
+
         # client commands
         prog_c = ASTFProgram()
         # send syn
         # client commands
         prog_c = ASTFProgram()
         # send syn
@@ -88,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass):
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -109,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=1032192,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=1032192,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 2a17430..54b38a4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,22 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"172.16.0.0"
-        self.p1_src_end_ip = u"172.19.255.255"
-        self.p1_dst_start_ip = u"20.16.0.0"
-        self.p1_dst_end_ip = u"20.19.255.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-        self.data_size = 11111
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -73,31 +57,44 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # IPs used in packet headers.
+        p1_src_start_ip = u"172.16.0.0"
+        p1_src_end_ip = u"172.19.255.255"
+        p1_dst_start_ip = u"20.16.0.0"
+        p1_dst_end_ip = u"20.19.255.255"
+
+        # Headers length, not sure why TRex needs 32B for segment header.
+        real_headers_size = 70  # 18B L2 + 20B IPv4 + 32B TCP.
+        trex_headers_size = real_headers_size - 12  # As if TCP header is 20B.
+        trex_mss = self.framesize - trex_headers_size
+        real_mss = trex_mss - 12  # TRex honors segment header+data limit.
+        data_size = self.n_data_frames * real_mss
+
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
-        prog_c.send(u"1" * self.data_size)
-        prog_c.recv(self.data_size)
+        prog_c.send(u"1" * data_size)
+        prog_c.recv(data_size)
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
-        prog_c.recv(self.data_size)
-        prog_c.send(u"1" * self.data_size)
+        prog_s.recv(data_size)
+        prog_s.send(u"1" * data_size)
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -108,12 +105,25 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=16515072,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=16515072,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
-        return ip_gen, template, None
+        globinfo = ASTFGlobalInfo()
+        # Ensure correct data frame size.
+        globinfo.tcp.mss = trex_mss
+        # Ensure the whole transaction is a single burst (per direction).
+        globinfo.tcp.initwnd = self.n_data_frames
+        # Ensure buffers are large enough so starting window works.
+        globinfo.tcp.txbufsize = data_size
+        globinfo.tcp.rxbufsize = data_size
+        kwargs = dict(
+            default_c_glob_info=globinfo,
+            default_s_glob_info=globinfo,
+        )
+
+        return ip_gen, template, kwargs
 
 
 def register():
 
 
 def register():
index 344bc7d..ec4870a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,21 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"172.16.0.0"
-        self.p1_src_end_ip = u"172.19.255.255"
-        self.p1_dst_start_ip = u"20.16.0.0"
-        self.p1_dst_end_ip = u"20.19.255.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -72,6 +57,14 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # No data, no way to manipulate frame sizes via MSS.
+
+        # IPs used in packet headers.
+        p1_src_start_ip = u"172.16.0.0"
+        p1_src_end_ip = u"172.19.255.255"
+        p1_dst_start_ip = u"20.16.0.0"
+        p1_dst_end_ip = u"20.19.255.255"
+
         # client commands
         prog_c = ASTFProgram()
         # send syn
         # client commands
         prog_c = ASTFProgram()
         # send syn
@@ -88,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass):
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -109,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=16515072,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=16515072,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 6999dee..0108edb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,22 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.15.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.15.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-        self.data_size = 11111
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -73,31 +57,44 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.15.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.15.255"
+
+        # Headers length, not sure why TRex needs 32B for segment header.
+        real_headers_size = 70  # 18B L2 + 20B IPv4 + 32B TCP.
+        trex_headers_size = real_headers_size - 12  # As if TCP header is 20B.
+        trex_mss = self.framesize - trex_headers_size
+        real_mss = trex_mss - 12  # TRex honors segment header+data limit.
+        data_size = self.n_data_frames * real_mss
+
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
-        prog_c.send(u"1" * self.data_size)
-        prog_c.recv(self.data_size)
+        prog_c.send(u"1" * data_size)
+        prog_c.recv(data_size)
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
-        prog_c.recv(self.data_size)
-        prog_c.send(u"1" * self.data_size)
+        prog_s.recv(data_size)
+        prog_s.send(u"1" * data_size)
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -108,12 +105,25 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=258048,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=258048,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
-        return ip_gen, template, None
+        globinfo = ASTFGlobalInfo()
+        # Ensure correct data frame size.
+        globinfo.tcp.mss = trex_mss
+        # Ensure the whole transaction is a single burst (per direction).
+        globinfo.tcp.initwnd = self.n_data_frames
+        # Ensure buffers are large enough so starting window works.
+        globinfo.tcp.txbufsize = data_size
+        globinfo.tcp.rxbufsize = data_size
+        kwargs = dict(
+            default_c_glob_info=globinfo,
+            default_s_glob_info=globinfo,
+        )
+
+        return ip_gen, template, kwargs
 
 
 def register():
 
 
 def register():
index 4278e3d..6124baa 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,21 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self, **kwargs):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.15.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.15.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -72,6 +57,14 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # No data, no way to manipulate frame sizes via MSS.
+
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.15.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.15.255"
+
         # client commands
         prog_c = ASTFProgram()
         # send syn
         # client commands
         prog_c = ASTFProgram()
         # send syn
@@ -88,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass):
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -109,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=258048,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=258048,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 6b3bbd4..54de3e5 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,22 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.255.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.255.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-        self.data_size = 11111
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -73,31 +57,44 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.255.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.255.255"
+
+        # Headers length, not sure why TRex needs 32B for segment header.
+        real_headers_size = 70  # 18B L2 + 20B IPv4 + 32B TCP.
+        trex_headers_size = real_headers_size - 12  # As if TCP header is 20B.
+        trex_mss = self.framesize - trex_headers_size
+        real_mss = trex_mss - 12  # TRex honors segment header+data limit.
+        data_size = self.n_data_frames * real_mss
+
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
         # client commands
         prog_c = ASTFProgram()
         prog_c.connect()
-        prog_c.send(u"1" * self.data_size)
-        prog_c.recv(self.data_size)
+        prog_c.send(u"1" * data_size)
+        prog_c.recv(data_size)
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
 
         # server commands
         prog_s = ASTFProgram()
         prog_s.accept()
-        prog_c.recv(self.data_size)
-        prog_c.send(u"1" * self.data_size)
+        prog_s.recv(data_size)
+        prog_s.send(u"1" * data_size)
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -108,12 +105,25 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=4128768,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=4128768,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
 
-        return ip_gen, template, None
+        globinfo = ASTFGlobalInfo()
+        # Ensure correct data frame size.
+        globinfo.tcp.mss = trex_mss
+        # Ensure the whole transaction is a single burst (per direction).
+        globinfo.tcp.initwnd = self.n_data_frames
+        # Ensure buffers are large enough so starting window works.
+        globinfo.tcp.txbufsize = data_size
+        globinfo.tcp.rxbufsize = data_size
+        kwargs = dict(
+            default_c_glob_info=globinfo,
+            default_s_glob_info=globinfo,
+        )
+
+        return ip_gen, template, kwargs
 
 
 def register():
 
 
 def register():
index 1be78d8..13c6ee8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -47,21 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.255.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.255.255"
-
-        # Headers length; not used in this profile, just for the record of
-        # header length for TCP packet with 0B payload
-        self.headers_size = 58  # 14B l2 + 20B ipv4 + 24B tcp incl. 4B options
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -72,6 +57,14 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
+        # No data, no way to manipulate frame sizes via MSS.
+
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.255.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.255.255"
+
         # client commands
         prog_c = ASTFProgram()
         # send syn
         # client commands
         prog_c = ASTFProgram()
         # send syn
@@ -88,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass):
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -109,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=4128768,  # TODO: set via input parameter
             program=prog_c,
             ip_gen=ip_gen,
             limit=4128768,  # TODO: set via input parameter
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 667385f..135e7fb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -46,84 +46,80 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self, **kwargs):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.3.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.3.255"
-
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B UDP
-
-        self.udp_data = u""
-
-        self.n_data = 32  # TODO: set via input parameter
-        self.m_delay = 2000000  # delay 2000s (2,000,000 ms)
-        self.u_delay = 1000 * self.m_delay  # delay 2000s (2,000,000,000 us)
-        self.limit = 64512
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
-            return ip_gen, templates
+            return ip_gen, templates, None
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
-        if self.framesize == 64:
-            self.udp_data += self._gen_padding(self.headers_size, 72)
-        if self.framesize == 1518:
-            self.udp_data += self._gen_padding(self.headers_size, 1514)
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.3.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.3.255"
+
+        # The difference between data size and frame size.
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # TODO: Use the "connection protocol" from CPS traffic profile?
+        # Currently, the first data packet is all DUT sees about the session.
+
+        # Avoid sending keepalives.
+        m_delay = 2000000  # delay 2000s (2,000,000 ms)
+
+        # Data, not padded yet.
+        udp_data = u""
+        # Pad the data to achieve the intended frame size.
+        udp_data += self._gen_padding(headers_size)
+
+        # Safety check, the current programs send at least 1 packet.
+        if self.n_data_frames < 1:
+            raise RuntimeError("n_data_frames < 1: {self.n_data_frames}")
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
-        prog_c.set_keepalive_msg(self.m_delay)
-        prog_c.send_msg(self.udp_data)
-        # No delay, PPS tests combine connect and data send (no data receive).
-        prog_c.set_var(u"var1", self.n_data)
+        prog_c.set_keepalive_msg(m_delay)
+        prog_c.set_var(u"var1", self.n_data_frames)
         prog_c.set_label(u"a:")
         prog_c.set_label(u"a:")
-        prog_c.send_msg(self.udp_data)
+        prog_c.send_msg(udp_data)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
-        prog_s.set_keepalive_msg(self.m_delay)
+        prog_s.set_keepalive_msg(m_delay)
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
-        prog_s.recv_msg(1 + self.n_data)
+        prog_s.recv_msg(self.n_data_frames)
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
-        prog_s.send_msg(self.udp_data)
-        prog_s.set_var(u"var2", self.n_data)
+        prog_s.set_var(u"var2", self.n_data_frames)
         prog_s.set_label(u"b:")
         prog_s.set_label(u"b:")
-        prog_s.send_msg(self.udp_data)
+        prog_s.send_msg(udp_data)
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -133,8 +129,8 @@ class TrafficProfile(TrafficProfileBaseClass):
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
-            limit=self.limit,
-            port=8080
+            limit=64512,  # TODO: Any benefit of making this configurable?
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 78ee8f3..a1282ad 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -49,26 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.3.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.3.255"
-
-        # UDP messages
-        self.udp_req = u"GET"
-        self.udp_res = u"ACK"
-
-        # Headers length
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B udp
-
-        # No need to set keepalive, both programs end just after start&send.
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -78,13 +58,29 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
-        self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
-        self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.3.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.3.255"
+
+        # Headers length
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # UDP messages, not padded yet.
+        udp_req = u"GET"
+        udp_res = u"ACK"
+
+        # Padd to the required frame size.
+        udp_req += self._gen_padding(headers_size + len(udp_req))
+        udp_res += self._gen_padding(headers_size + len(udp_res))
+
+        # No need to set keepalive, both programs end just after start&send.
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
-        prog_c.send_msg(self.udp_req)
+        prog_c.send_msg(udp_req)
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
@@ -93,22 +89,22 @@ class TrafficProfile(TrafficProfileBaseClass):
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
-        prog_s.send_msg(self.udp_res)
+        prog_s.send_msg(udp_res)
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -119,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=64512,  # TODO: set via input parameter ?
             program=prog_c,
             ip_gen=ip_gen,
             limit=64512,  # TODO: set via input parameter ?
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 1739fcc..05976bc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -46,84 +46,80 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self, **kwargs):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.63.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.63.255"
-
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B UDP
-
-        self.udp_data = u""
-
-        self.n_data = 32  # TODO: set via input parameter
-        self.m_delay = 2000000  # delay 2000s (2,000,000 ms)
-        self.u_delay = 1000 * self.m_delay  # delay 2000s (2,000,000,000 us)
-        self.limit = 1032192
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
-            return ip_gen, templates
+            return ip_gen, templates, None
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
-        if self.framesize == 64:
-            self.udp_data += self._gen_padding(self.headers_size, 72)
-        if self.framesize == 1518:
-            self.udp_data += self._gen_padding(self.headers_size, 1514)
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.63.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.63.255"
+
+        # The difference between data size and frame size.
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # TODO: Use the "connection protocol" from CPS traffic profile?
+        # Currently, the first data packet is all DUT sees about the session.
+
+        # Avoid sending keepalives.
+        m_delay = 2000000  # delay 2000s (2,000,000 ms)
+
+        # Data, not padded yet.
+        udp_data = u""
+        # Pad the data to achieve the intended frame size.
+        udp_data += self._gen_padding(headers_size)
+
+        # Safety check, the current programs send at least 1 packet.
+        if self.n_data_frames < 1:
+            raise RuntimeError("n_data_frames < 1: {self.n_data_frames}")
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
-        prog_c.set_keepalive_msg(self.m_delay)
-        prog_c.send_msg(self.udp_data)
-        # No delay, PPS tests combine connect and data send (no data receive).
-        prog_c.set_var(u"var1", self.n_data)
+        prog_c.set_keepalive_msg(m_delay)
+        prog_c.set_var(u"var1", self.n_data_frames)
         prog_c.set_label(u"a:")
         prog_c.set_label(u"a:")
-        prog_c.send_msg(self.udp_data)
+        prog_c.send_msg(udp_data)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
-        prog_s.set_keepalive_msg(self.m_delay)
+        prog_s.set_keepalive_msg(m_delay)
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
-        prog_s.recv_msg(1 + self.n_data)
+        prog_s.recv_msg(self.n_data_frames)
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
-        prog_s.send_msg(self.udp_data)
-        prog_s.set_var(u"var2", self.n_data)
+        prog_s.set_var(u"var2", self.n_data_frames)
         prog_s.set_label(u"b:")
         prog_s.set_label(u"b:")
-        prog_s.send_msg(self.udp_data)
+        prog_s.send_msg(udp_data)
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -133,8 +129,8 @@ class TrafficProfile(TrafficProfileBaseClass):
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
-            limit=self.limit,
-            port=8080
+            limit=1032192,  # TODO: Any benefit of making this configurable?
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 7d35a68..3a1793a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -49,26 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.63.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.63.255"
-
-        # UDP messages
-        self.udp_req = u"GET"
-        self.udp_res = u"ACK"
-
-        # Headers length
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B udp
-
-        # No need to set keepalive, both programs end just after start&send.
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -78,13 +58,29 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
-        self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
-        self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.63.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.63.255"
+
+        # Headers length
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # UDP messages, not padded yet.
+        udp_req = u"GET"
+        udp_res = u"ACK"
+
+        # Padd to the required frame size.
+        udp_req += self._gen_padding(headers_size + len(udp_req))
+        udp_res += self._gen_padding(headers_size + len(udp_res))
+
+        # No need to set keepalive, both programs end just after start&send.
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
-        prog_c.send_msg(self.udp_req)
+        prog_c.send_msg(udp_req)
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
@@ -93,22 +89,22 @@ class TrafficProfile(TrafficProfileBaseClass):
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
-        prog_s.send_msg(self.udp_res)
+        prog_s.send_msg(udp_res)
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -119,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=1032192,  # TODO: set via input parameter ?
             program=prog_c,
             ip_gen=ip_gen,
             limit=1032192,  # TODO: set via input parameter ?
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 9445b11..801db90 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -46,84 +46,80 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self, **kwargs):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"172.16.0.0"
-        self.p1_src_end_ip = u"172.19.255.255"
-        self.p1_dst_start_ip = u"20.16.0.0"
-        self.p1_dst_end_ip = u"20.19.255.255"
-
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B UDP
-
-        self.udp_data = u""
-
-        self.n_data = 32  # TODO: set via input parameter
-        self.m_delay = 2000000  # delay 2000s (2,000,000 ms)
-        self.u_delay = 1000 * self.m_delay  # delay 2000s (2,000,000,000 us)
-        self.limit = 16515072
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
-            return ip_gen, templates
+            return ip_gen, templates, None
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
-        if self.framesize == 64:
-            self.udp_data += self._gen_padding(self.headers_size, 72)
-        if self.framesize == 1518:
-            self.udp_data += self._gen_padding(self.headers_size, 1514)
+        # IPs used in packet headers.
+        p1_src_start_ip = u"172.16.0.0"
+        p1_src_end_ip = u"172.19.255.255"
+        p1_dst_start_ip = u"20.16.0.0"
+        p1_dst_end_ip = u"20.19.255.255"
+
+        # The difference between data size and frame size.
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # TODO: Use the "connection protocol" from CPS traffic profile?
+        # Currently, the first data packet is all DUT sees about the session.
+
+        # Avoid sending keepalives.
+        m_delay = 2000000  # delay 2000s (2,000,000 ms)
+
+        # Data, not padded yet.
+        udp_data = u""
+        # Pad the data to achieve the intended frame size.
+        udp_data += self._gen_padding(headers_size)
+
+        # Safety check, the current programs send at least 1 packet.
+        if self.n_data_frames < 1:
+            raise RuntimeError("n_data_frames < 1: {self.n_data_frames}")
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
-        prog_c.set_keepalive_msg(self.m_delay)
-        prog_c.send_msg(self.udp_data)
-        # No delay, PPS tests combine connect and data send (no data receive).
-        prog_c.set_var(u"var1", self.n_data)
+        prog_c.set_keepalive_msg(m_delay)
+        prog_c.set_var(u"var1", self.n_data_frames)
         prog_c.set_label(u"a:")
         prog_c.set_label(u"a:")
-        prog_c.send_msg(self.udp_data)
+        prog_c.send_msg(udp_data)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
-        prog_s.set_keepalive_msg(self.m_delay)
+        prog_s.set_keepalive_msg(m_delay)
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
-        prog_s.recv_msg(1 + self.n_data)
+        prog_s.recv_msg(self.n_data_frames)
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
-        prog_s.send_msg(self.udp_data)
-        prog_s.set_var(u"var2", self.n_data)
+        prog_s.set_var(u"var2", self.n_data_frames)
         prog_s.set_label(u"b:")
         prog_s.set_label(u"b:")
-        prog_s.send_msg(self.udp_data)
+        prog_s.send_msg(udp_data)
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -133,8 +129,8 @@ class TrafficProfile(TrafficProfileBaseClass):
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
-            limit=self.limit,
-            port=8080
+            limit=16515072,  # TODO: Any benefit of making this configurable?
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 8fe8f02..2203cf3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -49,26 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"172.16.0.0"
-        self.p1_src_end_ip = u"172.19.255.255"
-        self.p1_dst_start_ip = u"20.16.0.0"
-        self.p1_dst_end_ip = u"20.19.255.255"
-
-        # UDP messages
-        self.udp_req = u"GET"
-        self.udp_res = u"ACK"
-
-        # Headers length
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B udp
-
-        # No need to set keepalive, both programs end just after start&send.
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -78,13 +58,29 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
-        self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
-        self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
+        # IPs used in packet headers.
+        p1_src_start_ip = u"172.16.0.0"
+        p1_src_end_ip = u"172.19.255.255"
+        p1_dst_start_ip = u"20.16.0.0"
+        p1_dst_end_ip = u"20.19.255.255"
+
+        # Headers length
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # UDP messages, not padded yet.
+        udp_req = u"GET"
+        udp_res = u"ACK"
+
+        # Padd to the required frame size.
+        udp_req += self._gen_padding(headers_size + len(udp_req))
+        udp_res += self._gen_padding(headers_size + len(udp_res))
+
+        # No need to set keepalive, both programs end just after start&send.
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
-        prog_c.send_msg(self.udp_req)
+        prog_c.send_msg(udp_req)
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
@@ -93,22 +89,22 @@ class TrafficProfile(TrafficProfileBaseClass):
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
-        prog_s.send_msg(self.udp_res)
+        prog_s.send_msg(udp_res)
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -119,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=16515072,  # TODO: set via input parameter ?
             program=prog_c,
             ip_gen=ip_gen,
             limit=16515072,  # TODO: set via input parameter ?
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 00dbeee..5de2527 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -46,84 +46,80 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self, **kwargs):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.15.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.15.255"
-
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B UDP
-
-        self.udp_data = u""
-
-        self.n_data = 32  # TODO: set via input parameter
-        self.m_delay = 2000000  # delay 2000s (2,000,000 ms)
-        self.u_delay = 1000 * self.m_delay  # delay 2000s (2,000,000,000 us)
-        self.limit = 258048
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
-            return ip_gen, templates
+            return ip_gen, templates, None
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
-        if self.framesize == 64:
-            self.udp_data += self._gen_padding(self.headers_size, 72)
-        if self.framesize == 1518:
-            self.udp_data += self._gen_padding(self.headers_size, 1514)
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.15.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.15.255"
+
+        # The difference between data size and frame size.
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # TODO: Use the "connection protocol" from CPS traffic profile?
+        # Currently, the first data packet is all DUT sees about the session.
+
+        # Avoid sending keepalives.
+        m_delay = 2000000  # delay 2000s (2,000,000 ms)
+
+        # Data, not padded yet.
+        udp_data = u""
+        # Pad the data to achieve the intended frame size.
+        udp_data += self._gen_padding(headers_size)
+
+        # Safety check, the current programs send at least 1 packet.
+        if self.n_data_frames < 1:
+            raise RuntimeError("n_data_frames < 1: {self.n_data_frames}")
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
-        prog_c.set_keepalive_msg(self.m_delay)
-        prog_c.send_msg(self.udp_data)
-        # No delay, PPS tests combine connect and data send (no data receive).
-        prog_c.set_var(u"var1", self.n_data)
+        prog_c.set_keepalive_msg(m_delay)
+        prog_c.set_var(u"var1", self.n_data_frames)
         prog_c.set_label(u"a:")
         prog_c.set_label(u"a:")
-        prog_c.send_msg(self.udp_data)
+        prog_c.send_msg(udp_data)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
-        prog_s.set_keepalive_msg(self.m_delay)
+        prog_s.set_keepalive_msg(m_delay)
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
-        prog_s.recv_msg(1 + self.n_data)
+        prog_s.recv_msg(self.n_data_frames)
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
-        prog_s.send_msg(self.udp_data)
-        prog_s.set_var(u"var2", self.n_data)
+        prog_s.set_var(u"var2", self.n_data_frames)
         prog_s.set_label(u"b:")
         prog_s.set_label(u"b:")
-        prog_s.send_msg(self.udp_data)
+        prog_s.send_msg(udp_data)
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -133,8 +129,8 @@ class TrafficProfile(TrafficProfileBaseClass):
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
-            limit=self.limit,
-            port=8080
+            limit=258048,  # TODO: Any benefit of making this configurable?
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 2285a63..81c074e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -49,26 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.15.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.15.255"
-
-        # UDP messages
-        self.udp_req = u"GET"
-        self.udp_res = u"ACK"
-
-        # Headers length
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B udp
-
-        # No need to set keepalive, both programs end just after start&send.
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -78,13 +58,29 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
-        self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
-        self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.15.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.15.255"
+
+        # Headers length
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # UDP messages, not padded yet.
+        udp_req = u"GET"
+        udp_res = u"ACK"
+
+        # Padd to the required frame size.
+        udp_req += self._gen_padding(headers_size + len(udp_req))
+        udp_res += self._gen_padding(headers_size + len(udp_res))
+
+        # No need to set keepalive, both programs end just after start&send.
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
-        prog_c.send_msg(self.udp_req)
+        prog_c.send_msg(udp_req)
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
@@ -93,22 +89,22 @@ class TrafficProfile(TrafficProfileBaseClass):
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
-        prog_s.send_msg(self.udp_res)
+        prog_s.send_msg(udp_res)
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -119,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=258048,  # TODO: set via input parameter ?
             program=prog_c,
             ip_gen=ip_gen,
             limit=258048,  # TODO: set via input parameter ?
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 3b6c3c7..7327060 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -46,84 +46,80 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self, **kwargs):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.255.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.255.255"
-
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B UDP
-
-        self.udp_data = u""
-
-        self.n_data = 32  # TODO: set via input parameter
-        self.m_delay = 2000000  # delay 2000s (2,000,000 ms)
-        self.u_delay = 1000 * self.m_delay  # delay 2000s (2,000,000,000 us)
-        self.limit = 4128768
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
         This method MUST return:
 
-            return ip_gen, templates
+            return ip_gen, templates, None
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
 
         :returns: IP generator and profile templates for ASTFProfile().
         :rtype: tuple
         """
-        if self.framesize == 64:
-            self.udp_data += self._gen_padding(self.headers_size, 72)
-        if self.framesize == 1518:
-            self.udp_data += self._gen_padding(self.headers_size, 1514)
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.255.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.255.255"
+
+        # The difference between data size and frame size.
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # TODO: Use the "connection protocol" from CPS traffic profile?
+        # Currently, the first data packet is all DUT sees about the session.
+
+        # Avoid sending keepalives.
+        m_delay = 2000000  # delay 2000s (2,000,000 ms)
+
+        # Data, not padded yet.
+        udp_data = u""
+        # Pad the data to achieve the intended frame size.
+        udp_data += self._gen_padding(headers_size)
+
+        # Safety check, the current programs send at least 1 packet.
+        if self.n_data_frames < 1:
+            raise RuntimeError("n_data_frames < 1: {self.n_data_frames}")
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
 
         # Client program.
         prog_c = ASTFProgram(stream=False)
-        prog_c.set_keepalive_msg(self.m_delay)
-        prog_c.send_msg(self.udp_data)
-        # No delay, PPS tests combine connect and data send (no data receive).
-        prog_c.set_var(u"var1", self.n_data)
+        prog_c.set_keepalive_msg(m_delay)
+        prog_c.set_var(u"var1", self.n_data_frames)
         prog_c.set_label(u"a:")
         prog_c.set_label(u"a:")
-        prog_c.send_msg(self.udp_data)
+        prog_c.send_msg(udp_data)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
         prog_c.jmp_nz(u"var1", u"a:")
         # We should read the server response,
         # but no reason to overload client workers even more.
 
         # Server program.
         prog_s = ASTFProgram(stream=False)
-        prog_s.set_keepalive_msg(self.m_delay)
+        prog_s.set_keepalive_msg(m_delay)
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
         # If server closes too soon, new instances are started
         # leading in too much replies. To prevent that, we need to recv all.
-        prog_s.recv_msg(1 + self.n_data)
+        prog_s.recv_msg(self.n_data_frames)
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
         # In packet loss scenarios, some instances never get here.
         # This maybe increases server traffic duration,
         # but no other way if we want to avoid
         # TRex creating a second instance of the same server.
-        prog_s.send_msg(self.udp_data)
-        prog_s.set_var(u"var2", self.n_data)
+        prog_s.set_var(u"var2", self.n_data_frames)
         prog_s.set_label(u"b:")
         prog_s.set_label(u"b:")
-        prog_s.send_msg(self.udp_data)
+        prog_s.send_msg(udp_data)
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         prog_s.jmp_nz(u"var2", u"b:")
         # VPP never duplicates packets,
         # so it is safe to close the server instance now.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -133,8 +129,8 @@ class TrafficProfile(TrafficProfileBaseClass):
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
         temp_c = ASTFTCPClientTemplate(
             program=prog_c,
             ip_gen=ip_gen,
-            limit=self.limit,
-            port=8080
+            limit=4128768,  # TODO: Any benefit of making this configurable?
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 327cc36..f1ee912 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 #
@@ -49,26 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
 class TrafficProfile(TrafficProfileBaseClass):
     """Traffic profile."""
 
-    def __init__(self):
-        """Initialization and setting of profile parameters."""
-
-        super(TrafficProfileBaseClass, self).__init__()
-
-        # IPs used in packet headers.
-        self.p1_src_start_ip = u"192.168.0.0"
-        self.p1_src_end_ip = u"192.168.255.255"
-        self.p1_dst_start_ip = u"20.0.0.0"
-        self.p1_dst_end_ip = u"20.0.255.255"
-
-        # UDP messages
-        self.udp_req = u"GET"
-        self.udp_res = u"ACK"
-
-        # Headers length
-        self.headers_size = 42  # 14B l2 + 20B ipv4 + 8B udp
-
-        # No need to set keepalive, both programs end just after start&send.
-
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
     def define_profile(self):
         """Define profile to be used by advanced stateful traffic generator.
 
@@ -78,13 +58,29 @@ class TrafficProfile(TrafficProfileBaseClass):
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
         :returns: IP generator and profile templates ASTFProfile().
         :rtype: tuple
         """
-        self.udp_req += self._gen_padding(self.headers_size + len(self.udp_req))
-        self.udp_res += self._gen_padding(self.headers_size + len(self.udp_res))
+        # IPs used in packet headers.
+        p1_src_start_ip = u"192.168.0.0"
+        p1_src_end_ip = u"192.168.255.255"
+        p1_dst_start_ip = u"20.0.0.0"
+        p1_dst_end_ip = u"20.0.255.255"
+
+        # Headers length
+        headers_size = 46  # 18B L2 + 20B IPv4 + 8B UDP.
+
+        # UDP messages, not padded yet.
+        udp_req = u"GET"
+        udp_res = u"ACK"
+
+        # Padd to the required frame size.
+        udp_req += self._gen_padding(headers_size + len(udp_req))
+        udp_res += self._gen_padding(headers_size + len(udp_res))
+
+        # No need to set keepalive, both programs end just after start&send.
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
 
         # client commands
         prog_c = ASTFProgram(stream=False)
         # send REQ message
-        prog_c.send_msg(self.udp_req)
+        prog_c.send_msg(udp_req)
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
         # No need to process the response, seeing L2 counter is enough.
         # Client program can end here.
 
@@ -93,22 +89,22 @@ class TrafficProfile(TrafficProfileBaseClass):
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
         # When server instance is created means REQ is visible in L2 counter.
         # No need to receive explicitly?
         # send RES message
-        prog_s.send_msg(self.udp_res)
+        prog_s.send_msg(udp_res)
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
         # Server program can end here.
 
         # ip generators
         ip_gen_c = ASTFIPGenDist(
-            ip_range=[self.p1_src_start_ip, self.p1_src_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_src_start_ip, p1_src_end_ip],
+            distribution=u"seq",
         )
         ip_gen_s = ASTFIPGenDist(
         )
         ip_gen_s = ASTFIPGenDist(
-            ip_range=[self.p1_dst_start_ip, self.p1_dst_end_ip],
-            distribution=u"seq"
+            ip_range=[p1_dst_start_ip, p1_dst_end_ip],
+            distribution=u"seq",
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
         )
         ip_gen = ASTFIPGen(
             glob=ASTFIPGenGlobal(ip_offset=u"0.0.0.1"),
             dist_client=ip_gen_c,
-            dist_server=ip_gen_s
+            dist_server=ip_gen_s,
         )
 
         # server association
         )
 
         # server association
@@ -119,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass):
             program=prog_c,
             ip_gen=ip_gen,
             limit=4128768,  # TODO: set via input parameter ?
             program=prog_c,
             ip_gen=ip_gen,
             limit=4128768,  # TODO: set via input parameter ?
-            port=8080
+            port=8080,
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
         )
         temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc)
         template = ASTFTemplate(client_template=temp_c, server_template=temp_s)
index 6bcf541..bfbbfd7 100644 (file)
@@ -269,6 +269,14 @@ class Constants:
         u"PERF_TRIAL_ASTF_DELAY", 0.112
     )
 
         u"PERF_TRIAL_ASTF_DELAY", 0.112
     )
 
+    # Number of data frames in TPUT transaction, used both by TCP and UDP.
+    # The value should be 33 to keep historic continuity for UDP TPUT tests,
+    # but we are limited by TRex window of 48 KiB, so for 9000B tests
+    # it means we can send only 5 full data frames in a burst.
+    # https://github.com/cisco-system-traffic-generator/
+    # trex-core/blob/v2.88/src/44bsd/tcp_var.h#L896-L903
+    ASTF_N_DATA_FRAMES = get_int_from_env(u"ASTF_N_DATA_FRAMES", 5)
+
     # Extended debug (incl. vpp packet trace, linux perf stat, ...).
     # Full list is available as suite variable (__init__.robot) or is
     # override by test.
     # Extended debug (incl. vpp packet trace, linux perf stat, ...).
     # Full list is available as suite variable (__init__.robot) or is
     # override by test.
index ceed560..841bd2e 100644 (file)
@@ -278,7 +278,7 @@ class NATUtil:
 
     @staticmethod
     def get_nat44_sessions_number(node, proto):
 
     @staticmethod
     def get_nat44_sessions_number(node, proto):
-        """Get number of established NAT44 sessions from NAT44 mapping data.
+        """Get number of expected NAT44 sessions from NAT44 mapping data.
 
         This keyword uses output from a CLI command,
         so it can start failing when VPP changes the output format.
 
         This keyword uses output from a CLI command,
         so it can start failing when VPP changes the output format.
@@ -287,17 +287,21 @@ class NATUtil:
         The current implementation supports both 2202 and post-2202 format.
         (The Gerrit number changing the output format is 34877.)
 
         The current implementation supports both 2202 and post-2202 format.
         (The Gerrit number changing the output format is 34877.)
 
-        For TCP proto, the post-2202 format includes "timed out"
-        established sessions into its count of total sessions.
+        For TCP proto, the expected state after rampup is
+        some number of sessions in transitory state (VPP has seen the FINs),
+        and some number of sessions in established state (meaning
+        some FINs were lost in the last trial).
+        While the two states may need slightly different number of cycles
+        to process next packet, the current implementation considers
+        both of them the "fast path", so they are both counted as expected.
+
         As the tests should fail if a session is timed-out,
         As the tests should fail if a session is timed-out,
-        the logic substracts timed out sessions for the resturned value.
+        the logic substracts timed out sessions for the returned value
+        (only available for post-2202 format).
 
 
-        The 2202 output reports most of TCP sessions as in "transitory" state,
-        as opposed to "established", but the previous CSIT logic tolerated that.
-        Ideally, whis keyword would add establised and transitory sessions
-        (but without CLOSED and WAIT_CLOSED sessions) and return that.
-        The current implementation simply returns "total tcp sessions" value,
-        to preserve the previous CSIT behavior for 2202 output.
+        TODO: Investigate if it is worth to insert additional rampup trials
+        in TPUT tests to ensure all sessions are transitory before next
+        measurement.
 
         :param node: DUT node.
         :param proto: Required protocol - TCP/UDP/ICMP.
 
         :param node: DUT node.
         :param proto: Required protocol - TCP/UDP/ICMP.
@@ -328,9 +332,7 @@ class NATUtil:
                     found = True
                 continue
             # Proto is found, find the line we are interested in.
                     found = True
                 continue
             # Proto is found, find the line we are interested in.
-            if proto_l == u"tcp" and u"established" not in line:
-                continue
-            if u"total" not in line and u"established" not in line:
+            if u"total" not in line:
                 raise RuntimeError(f"show nat summary: no {proto} total.")
             # We have the line with relevant numbers.
             total_part, timed_out_part = line.split(u"(", 1)
                 raise RuntimeError(f"show nat summary: no {proto} total.")
             # We have the line with relevant numbers.
             total_part, timed_out_part = line.split(u"(", 1)
index b2748f7..03e3890 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -643,6 +643,9 @@ class TrafficGenerator(AbstractMeasurer):
         )
         command_line.add_with_value(u"duration", f"{computed_duration!r}")
         command_line.add_with_value(u"frame_size", self.frame_size)
         )
         command_line.add_with_value(u"duration", f"{computed_duration!r}")
         command_line.add_with_value(u"frame_size", self.frame_size)
+        command_line.add_with_value(
+            u"n_data_frames", Constants.ASTF_N_DATA_FRAMES
+        )
         command_line.add_with_value(u"multiplier", multiplier)
         command_line.add_with_value(u"port_0", p_0)
         command_line.add_with_value(u"port_1", p_1)
         command_line.add_with_value(u"multiplier", multiplier)
         command_line.add_with_value(u"port_0", p_0)
         command_line.add_with_value(u"port_1", p_1)
@@ -811,7 +814,7 @@ class TrafficGenerator(AbstractMeasurer):
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
-            state_timeout=300.0,
+            state_timeout=240.0,
             ramp_up_only=False,
         ):
         """Send traffic from all configured interfaces on TG.
             ramp_up_only=False,
         ):
         """Send traffic from all configured interfaces on TG.
@@ -1215,7 +1218,7 @@ class TrafficGenerator(AbstractMeasurer):
         The target_tr field of ReceiveRateMeasurement is in
         transactions per second. Transmit count and loss count units
         depend on the transaction type. Usually they are in transactions
         The target_tr field of ReceiveRateMeasurement is in
         transactions per second. Transmit count and loss count units
         depend on the transaction type. Usually they are in transactions
-        per second, or aggregate packets per second.
+        per second, or aggregated packets per second.
 
         TODO: Fail on running or already reported measurement.
 
 
         TODO: Fail on running or already reported measurement.
 
@@ -1382,7 +1385,7 @@ class TrafficGenerator(AbstractMeasurer):
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
-            state_timeout=300.0,
+            state_timeout=240.0,
         ):
         """Store values accessed by measure().
 
         ):
         """Store values accessed by measure().
 
@@ -1451,7 +1454,7 @@ class OptimizedSearch:
     """Class to be imported as Robot Library, containing search keywords.
 
     Aside of setting up measurer and forwarding arguments,
     """Class to be imported as Robot Library, containing search keywords.
 
     Aside of setting up measurer and forwarding arguments,
-    the main business is to translate min/max rate from unidir to aggregate.
+    the main business is to translate min/max rate from unidir to aggregated.
     """
 
     @staticmethod
     """
 
     @staticmethod
@@ -1475,7 +1478,7 @@ class OptimizedSearch:
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
-            state_timeout=300.0,
+            state_timeout=240.0,
             expansion_coefficient=4.0,
     ):
         """Setup initialized TG, perform optimized search, return intervals.
             expansion_coefficient=4.0,
     ):
         """Setup initialized TG, perform optimized search, return intervals.
@@ -1616,7 +1619,7 @@ class OptimizedSearch:
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
             use_latency=False,
             ramp_up_rate=None,
             ramp_up_duration=None,
-            state_timeout=300.0,
+            state_timeout=240.0,
     ):
         """Setup initialized TG, perform soak search, return avg and stdev.
 
     ):
         """Setup initialized TG, perform soak search, return avg and stdev.
 
@@ -1674,7 +1677,7 @@ class OptimizedSearch:
         :type ramp_up_rate: float
         :type ramp_up_duration: float
         :type state_timeout: float
         :type ramp_up_rate: float
         :type ramp_up_duration: float
         :type state_timeout: float
-        :returns: Average and stdev of estimated aggregate rate giving PLR.
+        :returns: Average and stdev of estimated aggregated rate giving PLR.
         :rtype: 2-tuple of float
         """
         tg_instance = BuiltIn().get_library_instance(
         :rtype: 2-tuple of float
         """
         tg_instance = BuiltIn().get_library_instance(
index 3011b06..4474996 100644 (file)
@@ -17,6 +17,7 @@ TODO: How can we check each suite id is unique,
       when currently the suite generation is run on each directory separately?
 """
 
       when currently the suite generation is run on each directory separately?
 """
 
+import copy
 import sys
 
 from glob import glob
 import sys
 
 from glob import glob
@@ -116,6 +117,39 @@ def check_suite_tag(suite_tag, prolog):
         raise ValueError(f"Suite tag found {found} times for {suite_tag}")
 
 
         raise ValueError(f"Suite tag found {found} times for {suite_tag}")
 
 
+def filter_and_edit_kwargs_for_astf(suite_id, kwargs):
+    """Return possibly edited kwargs, or None if to be skipped.
+
+    This is a code block used in few places.
+    Kwargs is (a copy of) one item from tc_kwargs_list.
+    Currently, the editable field is frame_size,
+    to be increased to for tests with data (not just CPS).
+
+    :param suite_id: Suite ID.
+    :param kwargs: Key-value pairs used to construct one testcase.
+    :type suite_id: str
+    :type tc_kwargs_list: dict
+    :returns: Edited kwargs.
+    :rtype Optional[dict]
+    """
+    if u"-cps-" in suite_id:
+        # Contrary to UDP, there is no place to affect frame size
+        # in TCP CPS tests. Actual frames are close to min size.
+        # UDP uses the min value too, for fairer comparison to TCP.
+        if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
+            return None
+    elif (u"-pps-" in suite_id or u"-tput-" in suite_id):
+        if u"imix" in str(kwargs[u"frame_size"]).lower():
+            # ASTF does not support IMIX (yet).
+            return None
+        if kwargs[u"frame_size"] in MIN_FRAME_SIZE_VALUES:
+            # Minimal (TRex) TCP data frame is 80B for IPv4.
+            # In future, we may want to have also IPv6 TCP.
+            # UDP uses the same value, for fairer comparison to TCP.
+            kwargs[u"frame_size"] = 100
+    return kwargs
+
+
 def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
     """Add default testcases to file.
 
 def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
     """Add default testcases to file.
 
@@ -130,7 +164,9 @@ def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
     :type file_out: file
     :type tc_kwargs_list: dict
     """
     :type file_out: file
     :type tc_kwargs_list: dict
     """
-    for kwargs in tc_kwargs_list:
+    for kwas in tc_kwargs_list:
+        # We may edit framesize for ASTF, the copy should be local.
+        kwargs = copy.deepcopy(kwas)
         # TODO: Is there a better way to disable some combinations?
         emit = True
         if kwargs[u"frame_size"] == 9000:
         # TODO: Is there a better way to disable some combinations?
         emit = True
         if kwargs[u"frame_size"] == 9000:
@@ -156,14 +192,8 @@ def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
                 emit = False
             if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
                 emit = False
                 emit = False
             if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
                 emit = False
-        if (
-                u"-cps-" in suite_id
-                or u"-pps-" in suite_id
-                or u"-tput-" in suite_id
-        ):
-            if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
-                emit = False
-        if emit:
+        kwargs = filter_and_edit_kwargs_for_astf(suite_id, kwargs)
+        if emit and kwargs is not None:
             file_out.write(testcase.generate(**kwargs))
 
 
             file_out.write(testcase.generate(**kwargs))
 
 
@@ -207,17 +237,11 @@ def add_trex_testcases(testcase, suite_id, file_out, tc_kwargs_list):
     :type file_out: file
     :type tc_kwargs_list: dict
     """
     :type file_out: file
     :type tc_kwargs_list: dict
     """
-    for kwargs in tc_kwargs_list:
-        # TODO: Is there a better way to disable some combinations?
-        emit = True
-        if (
-                u"-cps-" in suite_id
-                or u"-pps-" in suite_id
-                or u"-tput-" in suite_id
-        ):
-            if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
-                emit = False
-        if emit:
+    for kwas in tc_kwargs_list:
+        # We may edit framesize for ASTF, the copy should be local.
+        kwargs = copy.deepcopy(kwas)
+        kwargs = filter_and_edit_kwargs_for_astf(suite_id, kwargs)
+        if kwargs is not None:
             file_out.write(testcase.generate(**kwargs))
 
 
             file_out.write(testcase.generate(**kwargs))
 
 
index db2b522..a6df6f7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | | ... | ${message}${\n}${message_zero} | ${message}${\n}${message_other}
 | | Fail | ${message}
 
 | | ... | ${message}${\n}${message_zero} | ${message}${\n}${message_other}
 | | Fail | ${message}
 
-| Compute bandwidth
+| Compute Bandwidth
 | | [Documentation]
 | | ... | Compute (bidir) bandwidth from given (unidir) transaction rate.
 | | ...
 | | [Documentation]
 | | ... | Compute (bidir) bandwidth from given (unidir) transaction rate.
 | | ...
-| | ... | This keyword reads "ppta" and "avg_frame_size" set elsewhere.
-| | ... | The implementation should work for both pps and cps rates.
+| | ... | This keyword reads \${ppta} and \${avg_aggregated_frame_size} set
+| | ... | elsewhere. The implementation should work for both pps and cps rates.
 | | ... |
 | | ... | *Arguments:*
 | | ... | - tps - Transaction rate (unidirectional) [tps]. Type: float
 | | ...
 | | ... | *Returns:*
 | | ... | - Computed bandwidth in Gbps.
 | | ... |
 | | ... | *Arguments:*
 | | ... | - tps - Transaction rate (unidirectional) [tps]. Type: float
 | | ...
 | | ... | *Returns:*
 | | ... | - Computed bandwidth in Gbps.
-| | ... | - Computed aggregate packet rate in pps.
+| | ... | - Computed aggregated packet rate in pps.
 | |
 | | ... | *Example:*
 | |
 | |
 | | ... | *Example:*
 | |
@@ -68,7 +68,7 @@
 | |
 | | ${ppta} = | Get Packets Per Transaction Aggregated
 | | ${pps} = | Evaluate | ${tps} * ${ppta}
 | |
 | | ${ppta} = | Get Packets Per Transaction Aggregated
 | | ${pps} = | Evaluate | ${tps} * ${ppta}
-| | ${bandwidth} = | Evaluate | ${pps} * (${avg_frame_size}+20)*8 / 1e9
+| | ${bandwidth} = | Evaluate | ${pps} * (${avg_aggregated_frame_size}+20)*8/1e9
 | | Return From Keyword | ${bandwidth} | ${pps}
 
 | Display Reconfig Test Message
 | | Return From Keyword | ${bandwidth} | ${pps}
 
 | Display Reconfig Test Message
@@ -96,7 +96,7 @@
 | Display result of NDRPDR search
 | | [Documentation]
 | | ... | Display result of NDR+PDR search, both quantities, both bounds,
 | Display result of NDRPDR search
 | | [Documentation]
 | | ... | Display result of NDR+PDR search, both quantities, both bounds,
-| | ... | aggregate in units given by trasaction type, e.g. by default
+| | ... | aggregated, in units given by trasaction type, e.g. by default
 | | ... | in packet per seconds and Gbps total bandwidth
 | | ... | (for initial packet size).
 | | ... |
 | | ... | in packet per seconds and Gbps total bandwidth
 | | ... | (for initial packet size).
 | | ... |
 | | ... | - transaction_type - String identifier to determine how to count
 | | ... | transactions. Default is "packet".
 | | ... | *Arguments:*
 | | ... | - transaction_type - String identifier to determine how to count
 | | ... | transactions. Default is "packet".
 | | ... | *Arguments:*
-| | ... | - result - Measured result data. Aggregate rate, tps or pps.
+| | ... | - result - Measured result data. Aggregated rate, tps or pps.
 | | ... | Type: NdrPdrResult
 | |
 | | ... | *Example:*
 | | ... | Type: NdrPdrResult
 | |
 | | ... | *Example:*
 | | ... | it is in transactions per second. Bidirectional traffic
 | | ... | transaction is understood as having 2 packets, for this purpose.
 | | ... |
 | | ... | it is in transactions per second. Bidirectional traffic
 | | ... | transaction is understood as having 2 packets, for this purpose.
 | | ... |
-| | ... | Pps values are aggregate in packet per seconds,
+| | ... | Pps values are aggregated, in packet per seconds
 | | ... | and Gbps total bandwidth (for initial packet size).
 | | ... |
 | | ... | Througput is calculated as:
 | | ... | and Gbps total bandwidth (for initial packet size).
 | | ... |
 | | ... | Througput is calculated as:
 
 | Display single pps bound
 | | [Documentation]
 
 | Display single pps bound
 | | [Documentation]
-| | ... | Display one pps bound of NDR+PDR search,
-| | ... | aggregate in packet per seconds and Gbps total bandwidth
+| | ... | Display one pps bound of NDR+PDR search, aggregated,
+| | ... | in packet per seconds and Gbps total bandwidth
 | | ... | (for initial packet size).
 | | ... |
 | | ... | The bound to display is given as target transfer rate, it is assumed
 | | ... | (for initial packet size).
 | | ... |
 | | ... | The bound to display is given as target transfer rate, it is assumed
index 8350db0..c90fc74 100644 (file)
@@ -46,7 +46,7 @@
 | | ... | Display results as formatted test message.
 | | ... | Fail if computed lower bound is 110% of the minimal rate or less.
 | | ... | Input rates are unidirectional, in transaction per second.
 | | ... | Display results as formatted test message.
 | | ... | Fail if computed lower bound is 110% of the minimal rate or less.
 | | ... | Input rates are unidirectional, in transaction per second.
-| | ... | Reported result may contain aggregate pps rates, depending on test.
+| | ... | Reported result may contain aggregated pps rates, depending on test.
 | | ... | Call \${resetter} (if defined) to reset DUT state before each trial.
 | |
 | | ... | *Test (or broader scope) variables read:*
 | | ... | Call \${resetter} (if defined) to reset DUT state before each trial.
 | |
 | | ... | *Test (or broader scope) variables read:*
 | | ... | Display findings as a formatted test message.
 | | ... | Fail if a resulting lower bound has too high loss ratio.
 | | ... | Input rates are unidirectional, in transaction per second.
 | | ... | Display findings as a formatted test message.
 | | ... | Fail if a resulting lower bound has too high loss ratio.
 | | ... | Input rates are unidirectional, in transaction per second.
-| | ... | Reported result may contain aggregate pps rates, depending on test.
+| | ... | Reported result may contain aggregated pps rates, depending on test.
 | | ... | Additional latency measurements are performed for smaller loads,
 | | ... | even if latency stream is disabled in search. Their results
 | | ... | are also displayed.
 | | ... | Additional latency measurements are performed for smaller loads,
 | | ... | even if latency stream is disabled in search. Their results
 | | ... | are also displayed.
 | | ... | *Arguments:*
 | | ... | - trial_duration - Duration of single trial [s].
 | | ... | Type: float
 | | ... | *Arguments:*
 | | ... | - trial_duration - Duration of single trial [s].
 | | ... | Type: float
-| | ... | - rate - Target aggregate transmit rate [bps] / Bits per second
+| | ... | - rate - Target aggregated transmit rate [bps] / Bits per second.
 | | ... | Type: float
 | | ... | - frame_size - L2 Frame Size [B].
 | | ... | Type: integer or string
 | | ... | Type: float
 | | ... | - frame_size - L2 Frame Size [B].
 | | ... | Type: integer or string
index 4f2cc50..f75d585 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | Get Packets Per Transaction Aggregated
 | | [Documentation]
 | | ... | Return value of \${packets_per_transaction_aggregated};
 | Get Packets Per Transaction Aggregated
 | | [Documentation]
 | | ... | Return value of \${packets_per_transaction_aggregated};
-| | ... | if not defined, assume traffic is symmetric and compute
-| | ... | from unidirectional values.
+| | ... | if not defined, assume traffic is symmetric (or unidirectional)
+| | ... | and compute from unidirectional values.
 | |
 | |
-| | ... | The return value is used when reporting PPS values from TPS found
-| | ... | by some search (e.g. NDRPDR).
+| | ... | The return value is used when reporting PPS (and bandwidth) values
+| | ... | from TPS found by some search (e.g. NDRPDR).
 | | ... | Return type: integer.
 | |
 | | ... | *Example:*
 | | ... | Return type: integer.
 | |
 | | ... | *Example:*
 | | ${ppta} = | Get Variable Value | \${packets_per_transaction_aggregated}
 | | ... | ${0}
 | | Return From Keyword If | "${ppta}" != "0" | ${ppta}
 | | ${ppta} = | Get Variable Value | \${packets_per_transaction_aggregated}
 | | ... | ${0}
 | | Return From Keyword If | "${ppta}" != "0" | ${ppta}
-| | # TODO: Insert TCP computation from packet size here.
 | | ${pptad} = | Get Packets Per Transaction And Direction
 | | ${traffic_directions} = | Get Traffic Directions
 | | # We do not support ASTF profiles with multiple transactions, yet.
 | | ${pptad} = | Get Packets Per Transaction And Direction
 | | ${traffic_directions} = | Get Traffic Directions
 | | # We do not support ASTF profiles with multiple transactions, yet.
 | | ... | Return value of \${packets_per_transaction_and_direction},
 | | ... | or ${1} if not defined.
 | |
 | | ... | Return value of \${packets_per_transaction_and_direction},
 | | ... | or ${1} if not defined.
 | |
-| | ... | The return value is used when computing max rate (TPS),
-| | ... | so for asymmetric transaction use the more numerous direction.
+| | ... | The return value is used when computing max rate (TPS)
+| | ... | from packet level (pps or bps) limits.
+| | ... | For asymmetric transactions, use the more numerous direction.
 | | ... | Return type: integer.
 | |
 | | ... | *Example:*
 | | ... | Return type: integer.
 | |
 | | ... | *Example:*
 
 | Set Jumbo
 | | [Documentation]
 
 | Set Jumbo
 | | [Documentation]
-| | ... | For jumbo frames detection, the maximal packet size is relevant,
-| | ... | encapsulation overhead (if any) has effect.
-| |
-| | ... | This keyword computes jumbo boolean (some suites need that for
-| | ... | configuration decisions).
+| | ... | Call Set Numeric Frame Sizes and set jumbo based on max framesize.
 | | ... | To streamline suite autogeneration, both input and output values
 | | ... | are communicated as test (or broader scope) variables,
 | | ... | instead of explicit arguments and return values.
 | |
 | | ... | *Test (or broader scope) variables read:*
 | | ... | - overhead - Overhead in bytes; default value: 0. Type: integer
 | | ... | To streamline suite autogeneration, both input and output values
 | | ... | are communicated as test (or broader scope) variables,
 | | ... | instead of explicit arguments and return values.
 | |
 | | ... | *Test (or broader scope) variables read:*
 | | ... | - overhead - Overhead in bytes; default value: 0. Type: integer
-| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
-| | ... | string
+| | ... | - frame_size - Framesize. Type: integer or string
 | |
 | | ... | *Test variables set:*
 | | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
 | |
 | | ... | *Test variables set:*
 | | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
 | |
 | | ... | \| Set Jumbo \|
 | |
 | |
 | | ... | \| Set Jumbo \|
 | |
-| | # Already called by Set Max Rate And Jumbo, but some suites (e.g. device)
-| | # are calling this directly.
+| | # Some suites (e.g. device) are not calling Set Max Rate And Jumbo.
 | | Set Numeric Frame Sizes
 | | Set Numeric Frame Sizes
-| | ${jumbo} = | Set Variable If | ${max_frame_size} < 1522
-| | ... | ${False} | ${True}
+| | ${jumbo} = | Evaluate | ${max_frame_size} >= 1522
 | | Set Test Variable | \${jumbo}
 
 | Set Max Rate And Jumbo
 | | [Documentation]
 | | Set Test Variable | \${jumbo}
 
 | Set Max Rate And Jumbo
 | | [Documentation]
-| | ... | Input framesize can be either integer in case of a single packet
-| | ... | in stream, or IMIX string defining mix of packets.
-| | ... | For jumbo frames detection, the maximal packet size is relevant.
-| | ... | For maximal transmit rate, the average packet size is relevant.
-| | ... | In both cases, encapsulation overhead (if any) has effect.
-| | ... | The maximal rate is computed from NIC name.
-| | ... | The implementation works by mapping from exact
-| | ... | whitelisted NIC names.
-| | ... | The mapping is hardcoded in nic_limits.yaml
-| | ... | TODO: Make the mapping from NIC names case insensistive.
-| |
 | | ... | This keyword computes maximal unidirectional transmit rate
 | | ... | and jumbo boolean (some suites need that for configuration decisions).
 | | ... | To streamline suite autogeneration, both input and output values
 | | ... | are communicated as test (or broader scope) variables,
 | | ... | instead of explicit arguments and return values.
 | |
 | | ... | This keyword computes maximal unidirectional transmit rate
 | | ... | and jumbo boolean (some suites need that for configuration decisions).
 | | ... | To streamline suite autogeneration, both input and output values
 | | ... | are communicated as test (or broader scope) variables,
 | | ... | instead of explicit arguments and return values.
 | |
+| | ... | For correctly applying bandwidth limit, average frame size is used,
+| | ... | see Set Numeric Frame Sizes keyword documentation for details.
+| |
 | | ... | If this keyword detects the test is interested in (unidirectional)
 | | ... | transactons per second maximal rate (tps), that is returned (not pps).
 | |
 | | ... | If this keyword detects the test is interested in (unidirectional)
 | | ... | transactons per second maximal rate (tps), that is returned (not pps).
 | |
 | | ... | - overhead - Overhead in bytes; default value: 0. Type: integer
 | | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
 | | ... | string
 | | ... | - overhead - Overhead in bytes; default value: 0. Type: integer
 | | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
 | | ... | string
-| | ... | - packets_per_transaction_and_direction - Pps-tps conversion.
-| | ... | Optional, default 1.
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| | ... | - TEST_TAGS - Robot tags of this test. Type: list of string
 | |
 | | ... | *Test variables set:*
 | | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
 | |
 | | ... | *Test variables set:*
 | | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
 | | ... | Type: float
 | | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
 | | ... | enabled. Type: boolean
 | | ... | Type: float
 | | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
 | | ... | enabled. Type: boolean
-| | ... | avg_frame_size - Average frame size including overhead. Type: float
-| | ... | max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - avg_directional_frame_size - Average frame size including overhead
+| | ... | for the more loaded direction. Type: float
+| | ... | - avg_aggregated_frame_size - Average frame size including overhead
+| | ... | across both traffic directions. Type: float
 | |
 | | ... | *Example:*
 | |
 | |
 | | ... | *Example:*
 | |
 | | ... | ${NIC_NAME_TO_PPS_LIMIT} | ${nic_name}
 | | ${bps_limit} = | Get From Dictionary
 | | ... | ${NIC_NAME_TO_BPS_LIMIT} | ${nic_name}
 | | ... | ${NIC_NAME_TO_PPS_LIMIT} | ${nic_name}
 | | ${bps_limit} = | Get From Dictionary
 | | ... | ${NIC_NAME_TO_BPS_LIMIT} | ${nic_name}
-| | Set Numeric Frame Sizes
-| | # We need to add 20B (Ethernet preamble and inter-frame gap)
-| | # to avg_frame_size
-| | ${rate} = | Evaluate | ${bps_limit} / ((${avg_frame_size} + 20.0) * 8)
+| | # Set Jumbo also calls Set Numeric Frame Sizes.
+| | Set Jumbo
+| | # We need to add 20B (Ethernet preamble and inter-frame gap).
+| | ${adfs} = | Get Variable Value | \${avg_directional_frame_size}
+| | ${rate} = | Evaluate | ${bps_limit} / ((${adfs} + 20.0) * 8)
 | | ${max_rate} = | Set Variable If | ${rate} > ${pps_limit}
 | | ... | ${pps_limit} | ${rate}
 | | ${pptad} = | Get Packets Per Transaction And Direction
 | | ${max_rate} = | Evaluate | ${max_rate} / ${pptad}
 | | Set Test Variable | \${max_rate}
 | | ${max_rate} = | Set Variable If | ${rate} > ${pps_limit}
 | | ... | ${pps_limit} | ${rate}
 | | ${pptad} = | Get Packets Per Transaction And Direction
 | | ${max_rate} = | Evaluate | ${max_rate} / ${pptad}
 | | Set Test Variable | \${max_rate}
-| | Set Jumbo
 
 | Set Numeric Frame Sizes
 | | [Documentation]
 | | ... | Framesize can be either integer in case of a single packet
 | | ... | in stream, or set of packets in case of IMIX type or simmilar.
 | | ... | For jumbo decisions, we need a numeric size of the biggest packet.
 
 | Set Numeric Frame Sizes
 | | [Documentation]
 | | ... | Framesize can be either integer in case of a single packet
 | | ... | in stream, or set of packets in case of IMIX type or simmilar.
 | | ... | For jumbo decisions, we need a numeric size of the biggest packet.
-| | ... | For max rate decisions, we need a numeric average packet size.
-| | ... | This keyword computes both and sets them as test variables.
+| | ... | For bandwidth limit decisions, we need a numeric average packet size
+| | ... | in the more bit intensive direction if traffic is non-symmetric.
+| | ... | Computation of max_rate assumes it is also the more pps direction
+| | ... | (so it can have smaller average frame size than the aggregated one).
+| | ... | Average (across both directions) frame size is also used
+| | ... | for displaying the bidirectional bandwidth forwarded.
+| | ... | This keyword computes all three values (accounting for overheads)
+| | ... | and sets them as test variables.
 | |
 | | ... | Each suite sets a value named \${overhead},
 | | ... | which describes by how many bytes the frames on DUT-DUT link
 | | ... | are larger (due to encapsulation) than those
 | |
 | | ... | Each suite sets a value named \${overhead},
 | | ... | which describes by how many bytes the frames on DUT-DUT link
 | | ... | are larger (due to encapsulation) than those
-| | ... | on the primary TG-DUT link. But for some suites that value
+| | ... | on the primary TG-DUT link. For some suites that value
 | | ... | can be negaive (if TG-DUT is encapsulated more heavily).
 | | ... | For calculations in this keyword, we need largest sizes
 | | ... | across links, so zero is used if \${overhead} is negative.
 | |
 | | ... | can be negaive (if TG-DUT is encapsulated more heavily).
 | | ... | For calculations in this keyword, we need largest sizes
 | | ... | across links, so zero is used if \${overhead} is negative.
 | |
+| | ... | The other overhead is from TCP control packets (only IPv4 supported).
+| | ... | TCP_CPS tests have SYN frames of length 78B and other frames 70B.
+| | ... | The more loaded is client-to-server direction with 1 SYN and 3 other,
+| | ... | across both directions it is 2 SYN and 5 other.
+| | ... | TCP_PPS and TCP_TPUT tests have one other control packet less
+| | ... | (in the less loaded direction), but they do contain data frames.
+| |
 | | ... | *Test variables read:*
 | | ... | - frame_size - Framesize. Type: integer or string
 | | ... | - overhead - Overhead in bytes; default value: ${0}. Type: integer
 | | ... | *Test variables read:*
 | | ... | - frame_size - Framesize. Type: integer or string
 | | ... | - overhead - Overhead in bytes; default value: ${0}. Type: integer
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| | ... | - TEST_TAGS - Robot tags of this test. Type: list of string
 | |
 | | ... | *Test variables set*
 | |
 | | ... | *Test variables set*
-| | ... | avg_frame_size - Average frame size including overhead. Type: float
-| | ... | max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - avg_directional_frame_size - Average frame size including overhead
+| | ... | for the more loaded direction. Type: float
+| | ... | - avg_aggregated_frame_size - Average frame size including overhead
+| | ... | across both traffic directions. Type: float
 | |
 | | ... | *Example:*
 | |
 | | ... | \| Set Numeric Frame Sizes \|
 | |
 | |
 | | ... | *Example:*
 | |
 | | ... | \| Set Numeric Frame Sizes \|
 | |
+| | ${bare_max_frame_size} = | Run Keyword If
+| | ... | '${frame_size}' == 'IMIX_v4_1' | Set Variable | ${1518.0}
+| | ... | ELSE | Convert To Number | ${frame_size}
+| | ${bafs} = | Run Keyword If
+| | ... | '${frame_size}' == 'IMIX_v4_1' | Set Variable | ${353.8333333333333}
+| | ... | ELSE | Convert To Number | ${frame_size}
+| | # Long boolean formula in 2 lines.
+| | ${is_tcp_pps} = | Evaluate | 'TCP_PPS' in ${TEST_TAGS}
+| | ${is_tcp_tput} = | Evaluate | ${is_tcp_pps} or 'TCP_TPUT' in ${TEST_TAGS}
+| | ${avg_dir_frame_size} | ${avg_agg_frame_size} = | Run Keyword If
+| | ... | 'TCP_CPS' in ${TEST_TAGS} | Apply Tcp Cps Proto Overhead | ${bafs}
+| | ... | ELSE IF | ${is_tcp_tput} | Apply Tcp Tput Proto Overhead | ${bafs}
+| | ... | ELSE | Set Variable | ${bafs} | ${bafs}
 | | ${max_overhead} = | Set Variable If | ${overhead} >= 0 | ${overhead} | ${0}
 | | ${max_overhead} = | Set Variable If | ${overhead} >= 0 | ${overhead} | ${0}
-| | ${bare_avg_frame_size} = | Run Keyword If | '${frame_size}' == 'IMIX_v4_1'
-| | ... | Set Variable | ${353.83333}
-| | ... | ELSE
-| | ... | Convert To Number | ${frame_size}
-| | # Do not use $max_overhead (without braces), that does not tolerate string.
-| | ${avg_frame_size} = | Evaluate | ${bare_avg_frame_size} + ${max_overhead}
-| | Set Test Variable | \${avg_frame_size}
-| | ${bare_max_frame_size} = | Run Keyword If | '${frame_size}' == 'IMIX_v4_1'
-| | ... | Set Variable | ${1518}
-| | ... | ELSE
-| | ... | Convert To Number | ${frame_size}
-| | ${max_frame_size} = | Evaluate | $bare_max_frame_size + $max_overhead
-| | Set Test Variable | ${max_frame_size}
+| | ${mfs} = | Evaluate | ${bare_max_frame_size} + ${max_overhead}
+| | ${adfs} = | Evaluate | ${avg_dir_frame_size} + ${max_overhead}
+| | ${aafs} = | Evaluate | ${avg_agg_frame_size} + ${max_overhead}
+| | Set Test Variable | \${max_frame_size} | ${mfs}
+| | Set Test Variable | \${avg_directional_frame_size} | ${adfs}
+| | Set Test Variable | \${avg_aggregated_frame_size} | ${aafs}
+
+| Apply Tcp Cps Proto Overhead
+| | [Documentation]
+| | ... | Recompute average frame size for TCP CPS test cases.
+| |
+| | ... | This is contitionally called from Set Numeric Frame Sizes.
+| | ... | In Robot Framework it is more convenient to wrap such a block
+| | ... | as a standalone keyword to Run Keyword If.
+| |
+| | ... | *Test variables read:*
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Usually set globally. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| |
+| | ... | *Arguments:*
+| | ... | - bare_avg_frame_size - Average numeric framesize without overheads.
+| |
+| | ... | *Returns:*
+| | ... | - avg_dir_frame_size - Average framesize for more loaded direction.
+| | ... | - avg_agg_frame_size - Average framesize across both directions.
+| |
+| | ... | *Example:*
+| |
+| | ... | \| \${adfs} \| \${aafs} = \| Apply Tcp Cps Proto Overhead \| \${bafs}
+| |
+| | [Arguments] | ${bare_avg_frame_size}
+| |
+| | # Increase max_frame_size for TCP tests if used for more than just jumbo.
+| | Run Keyword If | ${bare_avg_frame_size} != 64
+| | ... | Fail | TCP_CPS tests are only supported for (nominal) 64B frames.
+| | # TODO: Unify with packets_per_transaction_* variables when adding PCAP.
+| | ${pptad} = | Get Packets Per Transaction And Direction
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | ${avg_dir_frame_size} = | Evaluate | (78.0 * 1 + 70.0 * 3) / (1 + 3)
+| | Run Keyword If | '${pptad}' != '4'
+| | ... | Fail | TCP CPS with pptad '${pptad}' != '4'.
+| | ${avg_agg_frame_size} = | Evaluate | (78.0 * 2 + 70.0 * 5) / (2 + 5)
+| | Run Keyword If | '${ppta}' != '7'
+| | ... | Fail | TCP CPS with ppta '${ppta}' != '7'.
+| | Return From Keyword | ${avg_dir_frame_size} | ${avg_agg_frame_size}
+
+| Apply Tcp Tput Proto Overhead
+| | [Documentation]
+| | ... | Recompute average frame size for TCP TPUT (or PPS) test cases.
+| |
+| | ... | This is contitionally called from Set Numeric Frame Sizes.
+| | ... | In Robot Framework it is more convenient to wrap such a block
+| | ... | as a standalone keyword to Run Keyword If.
+| |
+| | ... | *Test variables read:*
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Usually set globally. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| |
+| | ... | *Arguments:*
+| | ... | - bare_framesize - Average numeric framesize without overheads.
+| |
+| | ... | *Returns:*
+| | ... | - avg_dir_frame_size - Average framesize for more loaded direction.
+| | ... | - avg_agg_frame_size - Average framesize across both directions.
+| |
+| | ... | *Example:*
+| |
+| | ... | \| \${adfs} \| \${aafs} = \| Apply Tcp Cps Proto Overhead \| \${bafs}
+| |
+| | [Arguments] | ${bare_framesize}
+| |
+| | # TODO: Unify with packets_per_transaction_* variables when adding PCAP.
+| | ${pptad} = | Get Packets Per Transaction And Direction
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | # Long float formula in 4 lines.
+| | ${numerator} = | Evaluate | ${bare_framesize} * ${ASTF_N_DATA_FRAMES}
+| | ${numerator} = | Evaluate | 78.0 * 1 + 70.0 * 3 + ${numerator}
+| | ${denominator} = | Evaluate | 1 + 3 + ${ASTF_N_DATA_FRAMES}
+| | ${avg_dir_frame_size} = | Evaluate | ${numerator} / ${denominator}
+| | Run Keyword If | '${pptad}' != '${denominator}'
+| | ... | Fail | TCP TPUT with pptad '${pptad}' != '${denominator}'.
+| | # Long float formula in 4 lines.
+| | ${numerator} = | Evaluate | ${bare_framesize} * 2 * ${ASTF_N_DATA_FRAMES}
+| | ${numerator} = | Evaluate | 78.0 * 2 + 70.0 * 4 + ${numerator}
+| | ${denominator} = | Evaluate | 2 + 4 + 2 * ${ASTF_N_DATA_FRAMES}
+| | ${avg_agg_frame_size} = | Evaluate | ${numerator} / ${denominator}
+| | Run Keyword If | '${ppta}' != '${denominator}'
+| | ... | Fail | TCP TPUT with ppta '${ppta}' != '${denominator}'.
+| | Return From Keyword | ${avg_dir_frame_size} | ${avg_agg_frame_size}
 
 | Set Rates For Policer
 | | [Documentation]
 | | ... | Policer tests need these values,
 
 | Set Rates For Policer
 | | [Documentation]
 | | ... | Policer tests need these values,
-| | ... | currently computed from \${avg_frame_size}.
+| | ... | currently computed from \${avg_directional_frame_size}.
 | | ... | TODO: Verify the units match and computation is correct.
 | |
 | | ... | *Test (or broader scope) variables read:*
 | | ... | TODO: Verify the units match and computation is correct.
 | |
 | | ... | *Test (or broader scope) variables read:*
-| | ... | - avg_frame_size - Average L2 Frame Size [B]. Type: float
+| | ... | - avg_directional_frame_size - Average L2 Frame Size [B]. Type: float
 | | ... | Set by Set Max Rate And Jumbo keyword.
 | |
 | | ... | *Test variables set:*
 | | ... | Set by Set Max Rate And Jumbo keyword.
 | |
 | | ... | *Test variables set:*
 | |
 | | ... | \| Set Rates For Policer \|
 | |
 | |
 | | ... | \| Set Rates For Policer \|
 | |
-| | Set Test Variable | \${eb} | ${avg_frame_size}
-| | Set Test Variable | \${cb} | ${avg_frame_size}
+| | Set Test Variable | \${eb} | ${avg_directional_frame_size}
+| | Set Test Variable | \${cb} | ${avg_directional_frame_size}
index 2aff856..eb4561c 100644 (file)
@@ -57,7 +57,8 @@
 # Scale settings
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B--ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
-| | [Tags] | 64B
-| | frame_size=${64}
+| 100B--ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
+| | [Tags] | 100B
+| | frame_size=${100}
+
+| 1518B--ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
+| | [Tags] | 1518B
+| | frame_size=${1518}
+
+| 9000B--ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
+| | [Tags] | 9000B
+| | frame_size=${9000}
index d898b08..7d9ac98 100644 (file)
@@ -57,7 +57,8 @@
 # Scale settings
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B--ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
-| | [Tags] | 64B
-| | frame_size=${64}
+| 100B--ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
+| | [Tags] | 100B
+| | frame_size=${100}
+
+| 1518B--ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
+| | [Tags] | 1518B
+| | frame_size=${1518}
+
+| 9000B--ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
+| | [Tags] | 9000B
+| | frame_size=${9000}
index 9fee391..9d94da7 100644 (file)
@@ -58,7 +58,7 @@
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B--ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
-| | [Tags] | 64B
-| | frame_size=${64}
+| 100B--ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
+| | [Tags] | 100B
+| | frame_size=${100}
+
+| 1518B--ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
+| | [Tags] | 1518B
+| | frame_size=${1518}
+
+| 9000B--ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr
+| | [Tags] | 9000B
+| | frame_size=${9000}
index 7f19359..547c214 100644 (file)
@@ -57,7 +57,7 @@
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B--ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
-| | [Tags] | 64B
-| | frame_size=${64}
+| 100B--ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
+| | [Tags] | 100B
+| | frame_size=${100}
+
+| 1518B--ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
+| | [Tags] | 1518B
+| | frame_size=${1518}
+
+| 9000B--ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr
+| | [Tags] | 9000B
+| | frame_size=${9000}
index 276e71d..ed44269 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,8 @@
 # Scale settings
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 3765ee6..87cfbcb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,8 @@
 # Scale settings
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index b126444..d21184b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,8 @@
 # Scale settings
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 6b6cf17..d3cf025 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,8 @@
 # Scale settings
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 8d2f9de..35100bf 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,8 @@
 # Scale settings
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 # Scale settings
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index e2f1ab3..89bc7d9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,8 @@
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${n_sessions}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 964eac7..a14a655 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Ramp-up settings
 | ${transaction_scale}= | ${n_sessions}
 # Ramp-up settings
-| ${ramp_up_rate}= | ${70000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 08cb4ed..9c9ae4d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,8 @@
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${n_sessions}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index edc2629..1c78556 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Ramp-up settings
 | ${transaction_scale}= | ${n_sessions}
 # Ramp-up settings
-| ${ramp_up_rate}= | ${70000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 7b7ebc8..f4d2754 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,8 @@
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 8154b1d..3758c30 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 # Ramp-up settings
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 # Ramp-up settings
-| ${ramp_up_rate}= | ${70000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index b9a4c49..34b90c9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,8 @@
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_scale}= | ${n_sessions}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 927ba9b..e006a1b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Ramp-up settings
 | ${transaction_scale}= | ${n_sessions}
 # Ramp-up settings
-| ${ramp_up_rate}= | ${70000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 691c320..82279bb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,8 @@
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 7011470..0ab425b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${11}
+| ${packets_per_transaction_and_direction}= | ${4 + ${ASTF_N_DATA_FRAMES}}
+| ${packets_per_transaction_aggregated}= | ${6 + 2 * ${ASTF_N_DATA_FRAMES}}
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 # Ramp-up settings
 | ${transaction_scale}= | ${n_sessions}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 # Ramp-up settings
-| ${ramp_up_rate}= | ${70000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4tcp-${n_hosts}h-pps
 | ${transaction_type}= | tcp_pps
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 TCP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index c72f66e..ba11e1f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,7 @@
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${1024}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 5491205..74049bf 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,7 @@
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${16384}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 63e19b3..516708e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,7 @@
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${262144}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 8bb7dda..e15527e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,7 @@
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${4096}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index e7135a7..ab38c6c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -66,7 +66,7 @@
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
 | ${n_hosts}= | ${65536}
 | ${n_ports}= | ${63}
 | ${transaction_scale}= | ${${n_hosts} * ${n_ports}}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile:
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 1efffef..67ed916 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,7 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 39e5d24..5135ac7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,9 +85,9 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Ramp-up settings
 # Ramp-up settings
-| ${ramp_up_rate}= | ${36000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 35852dc..711db0c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,7 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 9aa2358..021f787 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -86,9 +86,9 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Ramp-up settings
 # Ramp-up settings
-| ${ramp_up_rate}= | ${36000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index b2f95d7..d94a5b5 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,7 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 # Traffic profile
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 # Traffic profile
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index b1dbdfa..d2b08f7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 # Ramp-up settings
 # This scale needs more than 55 ktps, which is more than current NDR results.
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${7}
 # Ramp-up settings
 # This scale needs more than 55 ktps, which is more than current NDR results.
-| ${ramp_up_rate}= | ${56000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 7d71793..d3aee21 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -86,7 +86,7 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index d76e7e5..6febe23 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -86,9 +86,9 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Ramp-up settings
 # Ramp-up settings
-| ${ramp_up_rate}= | ${36000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index 383c9eb..63da9ec 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -85,7 +85,7 @@
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 # Traffic profile
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 # Traffic profile
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
index a743ad1..0dcff13 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
 | ${n_ports}= | ${63}
 | ${n_sessions}= | ${${n_hosts} * ${n_ports}}
 | ${transaction_scale}= | ${n_sessions}
-| ${packets_per_transaction_and_direction}= | ${33}
+| ${packets_per_transaction_and_direction}= | ${ASTF_N_DATA_FRAMES}
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 # Ramp-up settings
 # Main heap size multiplicator
 | ${heap_size_mult}= | ${2}
 # Ramp-up settings
-| ${ramp_up_rate}= | ${36000}
+| ${ramp_up_rate}= | ${30000}
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 # Traffic profile
 | ${traffic_profile}= | trex-astf-ethip4udp-${n_hosts}h-pps
 | ${transaction_type}= | udp_pps
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
 | | And Verify NAT44 UDP sessions number on DUT1 node
 
 *** Test Cases ***
-| 64B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
-| | [Tags] | 64B | 1C
-| | frame_size=${64} | phy_cores=${1}
+| 100B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 100B | 1C
+| | frame_size=${100} | phy_cores=${1}
 
 
-| 64B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
-| | [Tags] | 64B | 2C
-| | frame_size=${64} | phy_cores=${2}
+| 100B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 100B | 2C
+| | frame_size=${100} | phy_cores=${2}
 
 
-| 64B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
-| | [Tags] | 64B | 4C
-| | frame_size=${64} | phy_cores=${4}
+| 100B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 100B | 4C
+| | frame_size=${100} | phy_cores=${4}
+
+| 1518B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}