diff options
Diffstat (limited to 'GPL')
239 files changed, 12398 insertions, 4436 deletions
diff --git a/GPL/LICENSE b/GPL/LICENSE new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/GPL/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/GPL/README.txt b/GPL/README.txt index 36de320ab5..e99f3a8fc4 100644 --- a/GPL/README.txt +++ b/GPL/README.txt @@ -4,8 +4,3 @@ mostly because of linking with scapy. When migrating more files here, make sure to migrate also everything linking with them. - -Currently the license listed is still Apache 2.0, -we are waiting for sign-offs as described in -https://wiki.fd.io/view/TSC/Relicensing_Procedure -before we switch the licenses. diff --git a/GPL/relicense/cisco b/GPL/relicense/cisco index 6ca8865745..7e86a6f20c 100644 --- a/GPL/relicense/cisco +++ b/GPL/relicense/cisco @@ -16,3 +16,4 @@ matfabia@cisco.com jsloboda@cisco.com ludovit.mikula@pantheon.tech maros.mullner@pantheon.tech +nidhyanandhan.a@hcl.com diff --git a/GPL/tools/trex/trex_astf_assert.py b/GPL/tools/trex/trex_astf_assert.py index d6d74bcff8..107253f5f0 100644 --- a/GPL/tools/trex/trex_astf_assert.py +++ b/GPL/tools/trex/trex_astf_assert.py @@ -1,11 +1,21 @@ #!/usr/bin/python3 -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -28,9 +38,9 @@ Functionality: import sys sys.path.insert( - 0, u"/opt/trex-core-2.82/scripts/automation/trex_control_plane/interactive/" + 0, u"/opt/trex-core-3.03/scripts/automation/trex_control_plane/interactive/" ) -from trex.astf.api import * +from trex.astf.api import ASTFClient, TRexError def main(): diff --git a/GPL/tools/trex/trex_astf_profile.py b/GPL/tools/trex/trex_astf_profile.py index 0542486105..44d81e92f9 100644 --- a/GPL/tools/trex/trex_astf_profile.py +++ b/GPL/tools/trex/trex_astf_profile.py @@ -1,11 +1,21 @@ #!/usr/bin/python3 -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -15,7 +25,7 @@ """This module gets T-Rex advanced stateful (astf) traffic profile together with other parameters, reads the profile and sends the traffic. At the end, it -measures the packet loss and latency. +parses for various counters. """ import argparse @@ -24,9 +34,9 @@ import sys import time sys.path.insert( - 0, u"/opt/trex-core-2.82/scripts/automation/trex_control_plane/interactive/" + 0, u"/opt/trex-core-3.03/scripts/automation/trex_control_plane/interactive/" ) -from trex.astf.api import * +from trex.astf.api import ASTFClient, ASTFProfile, TRexError def fmt_latency(lat_min, lat_avg, lat_max, hdrh): @@ -60,8 +70,18 @@ def fmt_latency(lat_min, lat_avg, lat_max, hdrh): def simple_burst( - profile_file, duration, framesize, mult, warmup_time, port_0, port_1, - latency, async_start=False, traffic_directions=2): + profile_file, + duration, + framesize, + n_data_frames, + multiplier, + port_0, + port_1, + latency, + async_start=False, + traffic_directions=2, + delay=0.0, + ): """Send traffic and measure packet loss and latency. Procedure: @@ -70,38 +90,54 @@ def simple_burst( - resets the ports, - removes all existing streams, - adds streams from the traffic profile to the ports, - - if the warm-up time is more than 0, sends the warm-up traffic, reads the - statistics, - clears the statistics from the client, - starts the traffic, - waits for the defined time (or runs forever if async mode is defined), - - stops the traffic, + - explicitly stops the traffic, - reads and displays the statistics and - disconnects from the client. + Duration details: + Contrary to stateless mode, ASTF profiles typically limit the number + of flows/transactions that can happen. + The caller is expected to set the duration parameter to idealized value, + but set the delay arguments when TRex is expected + to finish processing replies later (including a window for latency). + See *_traffic_duration output fields for TRex's measurement + of the real traffic duration (should be without any inactivity overheads). + If traffic has not ended by the final time, the traffic + is stopped explicitly, counters reflect the state just after the stop. + + TODO: Support tests which focus only on some transaction phases, + e.g. TCP tests ignoring init and teardown separated by delays. + Currently, approximated time measures the whole traffic duration. + :param profile_file: A python module with T-rex traffic profile. - :param duration: Duration of traffic run in seconds (-1=infinite). + :param duration: Expected duration for all transactions to finish, + without any TRex related delays, without even latency. :param framesize: Frame size. - :param mult: Multiplier of profile CPS. - :param warmup_time: Traffic warm-up time in seconds, 0 = disable. + :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 latency: With latency stats. :param async_start: Start the traffic and exit. :param traffic_directions: Bidirectional (2) or unidirectional (1) traffic. + :param delay: Time increase [s] for sleep duration. :type profile_file: str :type duration: float :type framesize: int or str - :type mult: int - :type warmup_time: float + :type n_data_frames: int + :type multiplier: int :type port_0: int :type port_1: int :type latency: bool :type async_start: bool :type traffic_directions: int + :type delay: float """ client = None - total_rcvd = 0 + total_received = 0 total_sent = 0 lost_a = 0 lost_b = 0 @@ -111,7 +147,6 @@ def simple_burst( lat_b_hist = u"" l7_data = u"" stats = dict() - stats_sampling = 1.0 approximated_duration = 0 # Read the profile. @@ -119,7 +154,11 @@ def simple_burst( # 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 @@ -135,40 +174,7 @@ def simple_burst( # Load the profile. client.load_profile(profile) - ports = [port_0] - if traffic_directions > 1: - ports.append(port_1) - - # Warm-up phase. - if warmup_time > 0: - # Clear the stats before injecting. - client.clear_stats() - # Choose CPS and start traffic. - client.start(mult=mult, duration=warmup_time) - time_start = time.monotonic() - - # Read the stats after the warmup duration (no sampling needed). - time.sleep(warmup_time) - stats[time.monotonic()-time_start] = client.get_stats() - - if client.get_warnings(): - for warning in client.get_warnings(): - print(warning) - - client.reset() - - print(u"##### Warmup Statistics #####") - print(json.dumps(stats, indent=4, separators=(u",", u": "))) - - # TODO: check stats format - stats = stats[sorted(stats.keys())[-1]] - lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"] - if traffic_directions > 1: - lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"] - - print(f"packets lost from {port_0} --> {port_1}: {lost_a} pkts") - if traffic_directions > 1: - print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts") + ports = [port_0, port_1] # Clear the stats before injecting. lost_a = 0 @@ -177,60 +183,49 @@ def simple_burst( # Choose CPS and start traffic. client.start( - mult=mult, duration=duration, nc=True, - latency_pps=mult if latency else 0, client_mask=2**len(ports)-1 + mult=multiplier, + duration=duration, + nc=True, + latency_pps=int(multiplier) if latency else 0, + client_mask=2**len(ports)-1, ) - time_start = time.monotonic() - # t-rex starts the packet flow with the delay - stats[time.monotonic()-time_start] = client.get_stats(ports=[port_0]) - while stats[sorted(stats.keys())[-1]][port_0][u"opackets"] == 0: - stats.clear() - time.sleep(0.001) - stats[time.monotonic() - time_start] = \ - client.get_stats(ports=[port_0]) - else: - trex_start_time = list(sorted(stats.keys()))[-1] - time_start += trex_start_time - stats.clear() + time_stop = time.monotonic() + duration + delay if async_start: # For async stop, we need to export the current snapshot. xsnap0 = client.ports[port_0].get_xstats().reference_stats print(f"Xstats snapshot 0: {xsnap0!r}") - if traffic_directions > 1: - xsnap1 = client.ports[port_1].get_xstats().reference_stats - print(f"Xstats snapshot 1: {xsnap1!r}") + xsnap1 = client.ports[port_1].get_xstats().reference_stats + print(f"Xstats snapshot 1: {xsnap1!r}") else: - time.sleep( - stats_sampling if stats_sampling < duration else duration + time.sleep(duration + delay) + # Do not block yet, the existing transactions may take long time + # to finish. We need an action that is almost reset(), + # but without clearing stats. + client.stop(block=False) + client.stop_latency() + client.remove_rx_queue(client.get_all_ports()) + # Now we can wait for the real traffic stop. + client.stop(block=True) + + # Read the stats after the traffic stopped (or time up). + stats[time.monotonic() - time_stop] = client.get_stats( + ports=ports ) - # Do not block until done. - while client.is_traffic_active(ports=ports): - # Sample the stats. - stats[time.monotonic()-time_start] = \ - client.get_stats(ports=ports) - time.sleep( - stats_sampling if stats_sampling < duration else duration - ) - else: - # Read the stats after the test - stats[time.monotonic()-time_start] = \ - client.get_stats(ports=ports) if client.get_warnings(): for warning in client.get_warnings(): print(warning) - client.reset() + # No profile cleanup here, reset will be done in the finally block. print(u"##### Statistics #####") print(json.dumps(stats, indent=4, separators=(u",", u": "))) - approximated_duration = list(sorted(stats.keys()))[-1] + approximated_duration = duration + list(sorted(stats.keys()))[-1] stats = stats[sorted(stats.keys())[-1]] lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"] - if traffic_directions > 1: - lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"] + lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"] # TODO: Latency measurement not used at this phase. This part will # be aligned in another commit. @@ -250,126 +245,126 @@ def simple_burst( str(lat_obj[u"max_usec"]), u"-") lat_b_hist = str(lat_obj[u"histogram"]) - if traffic_directions > 1: - total_sent = \ - stats[port_0][u"opackets"] + stats[port_1][u"opackets"] - total_rcvd = \ - stats[port_0][u"ipackets"] + stats[port_1][u"ipackets"] - client_stats = stats[u"traffic"][u"client"] - server_stats = stats[u"traffic"][u"server"] - # Some zero counters are not sent - # Active and established flows UDP/TCP + total_sent = \ + stats[port_0][u"opackets"] + stats[port_1][u"opackets"] + total_received = \ + stats[port_0][u"ipackets"] + stats[port_1][u"ipackets"] + client_sent = stats[port_0][u"opackets"] + client_received = stats[port_0][u"ipackets"] + client_stats = stats[u"traffic"][u"client"] + server_stats = stats[u"traffic"][u"server"] + # Some zero counters are not sent + # Active and established flows UDP/TCP + # Client + c_act_flows = client_stats[u"m_active_flows"] + c_est_flows = client_stats[u"m_est_flows"] + c_traffic_duration = client_stats.get(u"m_traffic_duration", 0) + l7_data = f"client_active_flows={c_act_flows}; " + l7_data += f"client_established_flows={c_est_flows}; " + l7_data += f"client_traffic_duration={c_traffic_duration}; " + # Possible errors + # Too many packets in NIC rx queue + c_err_rx_throttled = client_stats.get(u"err_rx_throttled", 0) + l7_data += f"client_err_rx_throttled={c_err_rx_throttled}; " + # Number of client side flows that were not opened + # due to flow-table overflow + c_err_nf_throttled = client_stats.get(u"err_c_nf_throttled", 0) + l7_data += f"client_err_nf_throttled={c_err_nf_throttled}; " + # Too many flows + c_err_flow_overflow = client_stats.get(u"err_flow_overflow", 0) + l7_data += f"client_err_flow_overflow={c_err_flow_overflow}; " + # Server + s_act_flows = server_stats[u"m_active_flows"] + s_est_flows = server_stats[u"m_est_flows"] + s_traffic_duration = server_stats.get(u"m_traffic_duration", 0) + l7_data += f"server_active_flows={s_act_flows}; " + l7_data += f"server_established_flows={s_est_flows}; " + l7_data += f"server_traffic_duration={s_traffic_duration}; " + # Possible errors + # Too many packets in NIC rx queue + s_err_rx_throttled = server_stats.get(u"err_rx_throttled", 0) + l7_data += f"client_err_rx_throttled={s_err_rx_throttled}; " + if u"udp" in profile_file: # Client - c_act_flows = client_stats[u"m_active_flows"] - c_est_flows = client_stats[u"m_est_flows"] - c_traffic_duration = client_stats.get(u"m_traffic_duration", 0) - l7_data = f"client_active_flows={c_act_flows}, " - l7_data += f"client_established_flows={c_est_flows}, " - l7_data += f"client_traffic_duration={c_traffic_duration}, " - # Possible errors - # Too many packets in NIC rx queue - c_err_rx_throttled = client_stats.get(u"err_rx_throttled", 0) - l7_data += f"client_err_rx_throttled={c_err_rx_throttled}, " - # Number of client side flows that were not opened - # due to flow-table overflow - c_err_nf_throttled = client_stats.get(u"err_c_nf_throttled", 0) - l7_data += f"client_err_nf_throttled={c_err_nf_throttled}, " - # Too many flows - c_err_flow_overflow = client_stats.get(u"err_flow_overflow", 0) - l7_data += f"client_err_flow_overflow={c_err_flow_overflow}, " + # Established connections + c_udp_connects = client_stats.get(u"udps_connects", 0) + l7_data += f"client_udp_connects={c_udp_connects}; " + # Closed connections + c_udp_closed = client_stats.get(u"udps_closed", 0) + l7_data += f"client_udp_closed={c_udp_closed}; " + # Sent bytes + c_udp_sndbyte = client_stats.get(u"udps_sndbyte", 0) + l7_data += f"client_udp_tx_bytes={c_udp_sndbyte}; " + # Sent packets + c_udp_sndpkt = client_stats.get(u"udps_sndpkt", 0) + l7_data += f"client_udp_tx_packets={c_udp_sndpkt}; " + # Received bytes + c_udp_rcvbyte = client_stats.get(u"udps_rcvbyte", 0) + l7_data += f"client_udp_rx_bytes={c_udp_rcvbyte}; " + # Received packets + c_udp_rcvpkt = client_stats.get(u"udps_rcvpkt", 0) + l7_data += f"client_udp_rx_packets={c_udp_rcvpkt}; " + # Keep alive drops + c_udp_keepdrops = client_stats.get(u"udps_keepdrops", 0) + l7_data += f"client_udp_keep_drops={c_udp_keepdrops}; " + # Client without flow + c_err_cwf = client_stats.get(u"err_cwf", 0) + l7_data += f"client_err_cwf={c_err_cwf}; " # Server - s_act_flows = server_stats[u"m_active_flows"] - s_est_flows = server_stats[u"m_est_flows"] - s_traffic_duration = server_stats.get(u"m_traffic_duration", 0) - l7_data += f"server_active_flows={s_act_flows}, " - l7_data += f"server_established_flows={s_est_flows}, " - l7_data += f"server_traffic_duration={s_traffic_duration}, " - # Possible errors - # Too many packets in NIC rx queue - s_err_rx_throttled = server_stats.get(u"err_rx_throttled", 0) - l7_data += f"client_err_rx_throttled={s_err_rx_throttled}, " - if u"udp" in profile_file: - # Client - # Established connections - c_udp_connects = client_stats.get(u"udps_connects", 0) - l7_data += f"client_udp_connects={c_udp_connects}, " - # Closed connections - c_udp_closed = client_stats.get(u"udps_closed", 0) - l7_data += f"client_udp_closed={c_udp_closed}, " - # Sent bytes - c_udp_sndbyte = client_stats.get(u"udps_sndbyte", 0) - l7_data += f"client_udp_tx_bytes={c_udp_sndbyte}, " - # Sent packets - c_udp_sndpkt = client_stats.get(u"udps_sndpkt", 0) - l7_data += f"client_udp_tx_packets={c_udp_sndpkt}, " - # Received bytes - c_udp_rcvbyte = client_stats.get(u"udps_rcvbyte", 0) - l7_data += f"client_udp_rx_bytes={c_udp_rcvbyte}, " - # Received packets - c_udp_rcvpkt = client_stats.get(u"udps_rcvpkt", 0) - l7_data += f"client_udp_rx_packets={c_udp_rcvpkt}, " - # Keep alive drops - c_udp_keepdrops = client_stats.get(u"udps_keepdrops", 0) - l7_data += f"client_udp_keep_drops={c_udp_keepdrops}, " - # Server - # Accepted connections - s_udp_accepts = server_stats.get(u"udps_accepts", 0) - l7_data += f"server_udp_accepts={s_udp_accepts}, " - # Closed connections - s_udp_closed = server_stats.get(u"udps_closed", 0) - l7_data += f"server_udp_closed={s_udp_closed}, " - # Sent bytes - s_udp_sndbyte = server_stats.get(u"udps_sndbyte", 0) - l7_data += f"server_udp_tx_bytes={s_udp_sndbyte}, " - # Sent packets - s_udp_sndpkt = server_stats.get(u"udps_sndpkt", 0) - l7_data += f"server_udp_tx_packets={s_udp_sndpkt}, " - # Received bytes - s_udp_rcvbyte = server_stats.get(u"udps_rcvbyte", 0) - l7_data += f"server_udp_rx_bytes={s_udp_rcvbyte}, " - # Received packets - s_udp_rcvpkt = server_stats.get(u"udps_rcvpkt", 0) - l7_data += f"server_udp_rx_packets={s_udp_rcvpkt}, " - elif u"tcp" in profile_file: - # Client - # Initiated connections - c_tcp_connatt = client_stats.get(u"tcps_connattempt", 0) - l7_data += f"client_tcp_connect_inits={c_tcp_connatt}, " - # Established connections - c_tcp_connects = client_stats.get(u"tcps_connects", 0) - l7_data += f"client_tcp_connects={c_tcp_connects}, " - # Closed connections - c_tcp_closed = client_stats.get(u"tcps_closed", 0) - l7_data += f"client_tcp_closed={c_tcp_closed}, " - # Send bytes - c_tcp_sndbyte = client_stats.get(u"tcps_sndbyte", 0) - l7_data += f"client_tcp_tx_bytes={c_tcp_sndbyte}, " - # Received bytes - c_tcp_rcvbyte = client_stats.get(u"tcps_rcvbyte", 0) - l7_data += f"client_tcp_rx_bytes={c_tcp_rcvbyte}, " - # Server - # Accepted connections - s_tcp_accepts = server_stats.get(u"tcps_accepts", 0) - l7_data += f"server_tcp_accepts={s_tcp_accepts}, " - # Established connections - s_tcp_connects = server_stats.get(u"tcps_connects", 0) - l7_data += f"server_tcp_connects={s_tcp_connects}, " - # Closed connections - s_tcp_closed = server_stats.get(u"tcps_closed", 0) - l7_data += f"server_tcp_closed={s_tcp_closed}, " - # Sent bytes - s_tcp_sndbyte = server_stats.get(u"tcps_sndbyte", 0) - l7_data += f"server_tcp_tx_bytes={s_tcp_sndbyte}, " - # Received bytes - s_tcp_rcvbyte = server_stats.get(u"tcps_rcvbyte", 0) - l7_data += f"server_tcp_rx_bytes={s_tcp_rcvbyte}, " - else: - total_sent = stats[port_0][u"opackets"] - total_rcvd = stats[port_1][u"ipackets"] + # Accepted connections + s_udp_accepts = server_stats.get(u"udps_accepts", 0) + l7_data += f"server_udp_accepts={s_udp_accepts}; " + # Closed connections + s_udp_closed = server_stats.get(u"udps_closed", 0) + l7_data += f"server_udp_closed={s_udp_closed}; " + # Sent bytes + s_udp_sndbyte = server_stats.get(u"udps_sndbyte", 0) + l7_data += f"server_udp_tx_bytes={s_udp_sndbyte}; " + # Sent packets + s_udp_sndpkt = server_stats.get(u"udps_sndpkt", 0) + l7_data += f"server_udp_tx_packets={s_udp_sndpkt}; " + # Received bytes + s_udp_rcvbyte = server_stats.get(u"udps_rcvbyte", 0) + l7_data += f"server_udp_rx_bytes={s_udp_rcvbyte}; " + # Received packets + s_udp_rcvpkt = server_stats.get(u"udps_rcvpkt", 0) + l7_data += f"server_udp_rx_packets={s_udp_rcvpkt}; " + elif u"tcp" in profile_file: + # Client + # Connection attempts + c_tcp_connattempt = client_stats.get(u"tcps_connattempt", 0) + l7_data += f"client_tcp_connattempt={c_tcp_connattempt}; " + # Established connections + c_tcp_connects = client_stats.get(u"tcps_connects", 0) + l7_data += f"client_tcp_connects={c_tcp_connects}; " + # Closed connections + c_tcp_closed = client_stats.get(u"tcps_closed", 0) + l7_data += f"client_tcp_closed={c_tcp_closed}; " + # Send bytes + c_tcp_sndbyte = client_stats.get(u"tcps_sndbyte", 0) + l7_data += f"client_tcp_tx_bytes={c_tcp_sndbyte}; " + # Received bytes + c_tcp_rcvbyte = client_stats.get(u"tcps_rcvbyte", 0) + l7_data += f"client_tcp_rx_bytes={c_tcp_rcvbyte}; " + # Server + # Accepted connections + s_tcp_accepts = server_stats.get(u"tcps_accepts", 0) + l7_data += f"server_tcp_accepts={s_tcp_accepts}; " + # Established connections + s_tcp_connects = server_stats.get(u"tcps_connects", 0) + l7_data += f"server_tcp_connects={s_tcp_connects}; " + # Closed connections + s_tcp_closed = server_stats.get(u"tcps_closed", 0) + l7_data += f"server_tcp_closed={s_tcp_closed}; " + # Sent bytes + s_tcp_sndbyte = server_stats.get(u"tcps_sndbyte", 0) + l7_data += f"server_tcp_tx_bytes={s_tcp_sndbyte}; " + # Received bytes + s_tcp_rcvbyte = server_stats.get(u"tcps_rcvbyte", 0) + l7_data += f"server_tcp_rx_bytes={s_tcp_rcvbyte}; " print(f"packets lost from {port_0} --> {port_1}: {lost_a} pkts") - if traffic_directions > 1: - print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts") + print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts") except TRexError: print(u"T-Rex ASTF runtime error!", file=sys.stderr) @@ -380,17 +375,20 @@ def simple_burst( if async_start: client.disconnect(stop_traffic=False, release_ports=True) else: - client.clear_profile() + client.reset() client.disconnect() print( - f"trex_start_time={trex_start_time}, " - f"cps={mult!r}, total_received={total_rcvd}, " - f"total_sent={total_sent}, frame_loss={lost_a + lost_b}, " - f"approximated_duration={approximated_duration}, " - f"latency_stream_0(usec)={lat_a}, " - f"latency_stream_1(usec)={lat_b}, " - f"latency_hist_stream_0={lat_a_hist}, " - f"latency_hist_stream_1={lat_b_hist}, " + f"multiplier={multiplier!r}; " + f"total_received={total_received}; " + f"total_sent={total_sent}; " + f"frame_loss={lost_a + lost_b}; " + f"approximated_duration={approximated_duration}; " + f"latency_stream_0(usec)={lat_a}; " + f"latency_stream_1(usec)={lat_b}; " + f"latency_hist_stream_0={lat_a_hist}; " + f"latency_hist_stream_1={lat_b_hist}; " + f"client_sent={client_sent}; " + f"client_received={client_received}; " f"{l7_data}" ) @@ -408,19 +406,19 @@ def main(): ) parser.add_argument( u"-d", u"--duration", required=True, type=float, - help=u"Duration of traffic run." + help=u"Duration of the whole traffic run, including overheads." ) parser.add_argument( u"-s", u"--frame_size", required=True, help=u"Size of a Frame without padding and IPG." ) parser.add_argument( - u"-m", u"--mult", required=True, type=int, - help=u"Multiplier of profile CPS." + u"--n_data_frames", type=int, default=5, + help=u"Use this many data frames per transaction and direction (TPUT)." ) parser.add_argument( - u"-w", u"--warmup_time", type=float, default=5.0, - help=u"Traffic warm-up time in seconds, 0 = disable." + u"-m", u"--multiplier", required=True, type=float, + help=u"Multiplier of profile CPS." ) parser.add_argument( u"--port_0", required=True, type=int, @@ -442,6 +440,10 @@ def main(): u"--traffic_directions", type=int, default=2, help=u"Send bi- (2) or uni- (1) directional traffic." ) + parser.add_argument( + u"--delay", required=True, type=float, default=0.0, + help=u"Allowed time overhead, sleep time is increased by this [s]." + ) args = parser.parse_args() @@ -451,10 +453,17 @@ def main(): framesize = args.frame_size simple_burst( - profile_file=args.profile, duration=args.duration, framesize=framesize, - mult=args.mult, warmup_time=args.warmup_time, port_0=args.port_0, - port_1=args.port_1, latency=args.latency, async_start=args.async_start, - traffic_directions=args.traffic_directions + 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, + latency=args.latency, + async_start=args.async_start, + traffic_directions=args.traffic_directions, + delay=args.delay, ) diff --git a/GPL/tools/trex/trex_astf_stop.py b/GPL/tools/trex/trex_astf_stop.py index 655bdf1a97..73c058390c 100644 --- a/GPL/tools/trex/trex_astf_stop.py +++ b/GPL/tools/trex/trex_astf_stop.py @@ -1,11 +1,21 @@ #!/usr/bin/python3 -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -20,11 +30,6 @@ Requirements: - compiled and running T-REX process (eg. ./t-rex-64 -i) - trex.astf.api library - Script must be executed on a node with T-REX instance - -Functionality: -1. Stop any running traffic -2. Optionally restore reference counter values. -3. Return conter differences. """ import argparse @@ -34,72 +39,63 @@ import sys from collections import OrderedDict # Needed to parse xstats representation. sys.path.insert( - 0, u"/opt/trex-core-2.82/scripts/automation/trex_control_plane/interactive/" + 0, "/opt/trex-core-3.03/scripts/automation/trex_control_plane/interactive/" ) -from trex.astf.api import * +from trex.astf.api import ASTFClient def main(): """Stop traffic if any is running. Report xstats.""" parser = argparse.ArgumentParser() parser.add_argument( - u"--xstat0", type=str, default=u"", - help=u"Reference xstat object if any." - ) - parser.add_argument( - u"--xstat1", type=str, default=u"", - help=u"Reference xstat object if any." + "--xstat", type=str, nargs="*", help="Reference xstat object if any." ) args = parser.parse_args() client = ASTFClient() try: - # connect to server client.connect() - client.acquire(force=True) client.stop() + xstats = list() # Read the stats after the test, # we need to update values before the last trial started. - if args.xstat0: - snapshot = eval(args.xstat0) - client.ports[0].get_xstats().reference_stats = snapshot - if args.xstat1: - snapshot = eval(args.xstat1) - client.ports[1].get_xstats().reference_stats = snapshot - # Now we can call the official method to get differences. - xstats0 = client.get_xstats(0) - xstats1 = client.get_xstats(1) - - # If TRexError happens, let the script fail with stack trace. + for i in range(len(client.ports)): + if args.xstat[i]: + snapshot = eval(args.xstat[i]) + client.ports[i].get_xstats().reference_stats = snapshot + # Now we can call the official method to get differences. + xstats.append(client.get_xstats(i)) + print(f"##### statistics port {i} #####") + print(json.dumps(xstats[i], indent=4, separators=(",", ": "))) finally: - client.clear_profile() + client.reset() client.disconnect() - # TODO: check xstats format - print(u"##### statistics port 0 #####") - print(json.dumps(xstats0, indent=4, separators=(u",", u": "))) - print(u"##### statistics port 1 #####") - print(json.dumps(xstats1, indent=4, separators=(u",", u": "))) - - tx_0, rx_0 = xstats0[u"tx_good_packets"], xstats0[u"rx_good_packets"] - tx_1, rx_1 = xstats1[u"tx_good_packets"], xstats1[u"rx_good_packets"] - lost_a, lost_b = tx_0 - rx_1, tx_1 - rx_0 + for idx,stat in enumerate(zip(xstats[0::2], xstats[1::2])): + lost_r = stat[0]["tx_good_packets"] - stat[1]["rx_good_packets"] + lost_l = stat[1]["tx_good_packets"] - stat[0]["rx_good_packets"] + print(f"packets lost from {idx*2} --> {idx*2+1}: {lost_r} pkts") + print(f"packets lost from {idx*2+1} --> {idx*2}: {lost_l} pkts") - print(f"packets lost from 0 --> 1: {lost_a} pkts") - print(f"packets lost from 1 --> 0: {lost_b} pkts") + total_rcvd = 0 + total_sent = 0 + for stat in xstats: + total_rcvd += stat["rx_good_packets"] + total_sent += stat["tx_good_packets"] - total_rcvd, total_sent = rx_0 + rx_1, tx_0 + tx_1 - total_lost = total_sent - total_rcvd - # TODO: Add latency. print( - f"cps='unknown', total_received={total_rcvd}, total_sent={total_sent}, " - f"frame_loss={total_lost}, " - f"latency_stream_0(usec)=-1/-1/-1, latency_stream_1(usec)=-1/-1/-1, " - u"latency_hist_stream_0={}, latency_hist_stream_1={}, " + f"cps='unknown'; " + f"total_received={total_rcvd}; " + f"total_sent={total_sent}; " + f"frame_loss={total_sent - total_rcvd}; " + f"latency_stream_0(usec)=-1/-1/-1; " + f"latency_stream_1(usec)=-1/-1/-1; " + f"latency_hist_stream_0=; " + f"latency_hist_stream_1=; " ) -if __name__ == u"__main__": +if __name__ == "__main__": main() diff --git a/GPL/tools/trex/trex_stl_assert.py b/GPL/tools/trex/trex_stl_assert.py index 7c7e9215b8..d4a092b4b9 100644 --- a/GPL/tools/trex/trex_stl_assert.py +++ b/GPL/tools/trex/trex_stl_assert.py @@ -1,11 +1,21 @@ #!/usr/bin/python3 -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -20,17 +30,14 @@ Requirements: - compiled and running T-Rex process (eg. ./t-rex-64 -i) - trex.stl.api library - Script must be executed on a node with T-Rex instance. - -Functionality: -1. Verify the API functionality and get server information. """ import sys sys.path.insert( - 0, u"/opt/trex-core-2.82/scripts/automation/trex_control_plane/interactive/" + 0, "/opt/trex-core-3.03/scripts/automation/trex_control_plane/interactive/" ) -from trex.stl.api import * +from trex.stl.api import STLClient, STLError def main(): @@ -49,5 +56,5 @@ def main(): client.disconnect() -if __name__ == u"__main__": +if __name__ == "__main__": main() diff --git a/GPL/tools/trex/trex_stl_profile.py b/GPL/tools/trex/trex_stl_profile.py index ac09b8dda1..ac53e90571 100644 --- a/GPL/tools/trex/trex_stl_profile.py +++ b/GPL/tools/trex/trex_stl_profile.py @@ -1,11 +1,21 @@ #!/usr/bin/python3 -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -24,9 +34,9 @@ import sys import time sys.path.insert( - 0, u"/opt/trex-core-2.82/scripts/automation/trex_control_plane/interactive/" + 0, "/opt/trex-core-3.03/scripts/automation/trex_control_plane/interactive/" ) -from trex.stl.api import * +from trex.stl.api import STLClient, STLProfile, STLError def fmt_latency(lat_min, lat_avg, lat_max, hdrh): @@ -56,12 +66,21 @@ def fmt_latency(lat_min, lat_avg, lat_max, hdrh): except ValueError: t_max = int(-1) - return u"/".join(str(tmp) for tmp in (t_min, t_avg, t_max, hdrh)) + return "/".join(str(tmp) for tmp in (t_min, t_avg, t_max, hdrh)) def simple_burst( - profile_file, duration, framesize, rate, warmup_time, port_0, port_1, - latency, async_start=False, traffic_directions=2, force=False): + profile_file, + duration, + framesize, + rate, + ports, + latency, + async_start=False, + traffic_directions=2, + force=False, + delay=0.0, + ): """Send traffic and measure packet loss and latency. Procedure: @@ -83,34 +102,29 @@ def simple_burst( :param framesize: Frame size. :param duration: Duration of traffic run in seconds (-1=infinite). :param rate: Traffic rate [percentage, pps, bps]. - :param warmup_time: Traffic warm-up time in seconds, 0 = disable. - :param port_0: Port 0 on the traffic generator. - :param port_1: Port 1 on the traffic generator. + :param ports: Port list on the traffic generator. :param latency: With latency stats. :param async_start: Start the traffic and exit. :param traffic_directions: Bidirectional (2) or unidirectional (1) traffic. :param force: Force start regardless of ports state. + :param delay: Sleep overhead [s]. :type profile_file: str :type framesize: int or str :type duration: float :type rate: str - :type warmup_time: float - :type port_0: int - :type port_1: int + :type ports: list :type latency: bool :type async_start: bool :type traffic_directions: int :type force: bool + :type delay: float """ client = None total_rcvd = 0 total_sent = 0 - approximated_duration = 0 - approximated_rate = 0 - lost_a = 0 - lost_b = 0 - lat_a = u"-1/-1/-1/" - lat_b = u"-1/-1/-1/" + approximated_duration = 0.0 + lat_a = "-1/-1/-1/" + lat_b = "-1/-1/-1/" # Read the profile: try: @@ -130,141 +144,109 @@ def simple_burst( # Connect to server: client.connect() # Prepare our ports (the machine has 0 <--> 1 with static route): - client.reset(ports=[port_0, port_1]) - client.remove_all_streams(ports=[port_0, port_1]) + client.reset() + client.remove_all_streams() - if u"macsrc" in profile_file: - client.set_port_attr(ports=[port_0, port_1], promiscuous=True) + if "macsrc" in profile_file: + client.set_port_attr(promiscuous=True) if isinstance(framesize, int): - last_stream_a = int((len(streams) - 2 ) / 2) - last_stream_b = (last_stream_a * 2) - client.add_streams(streams[0:last_stream_a], ports=[port_0]) + mark_a = len(streams) // 4 + mark_b = len(streams) // 2 + for i,j in zip(streams[:mark_a], ports[::2]): + client.add_streams(streams=[i], ports=[j]) if traffic_directions > 1: - client.add_streams( - streams[last_stream_a:last_stream_b], ports=[port_1]) + for i,j in zip(streams[mark_a:mark_b], ports[1::2]): + print(i, j) + client.add_streams(streams=[i], ports=[j]) elif isinstance(framesize, str): - client.add_streams(streams[0:3], ports=[port_0]) + mark = 0 + for i in ports[::2]: + client.add_streams(streams=streams[mark:mark+3], ports=[i]) + mark = mark + 3 if traffic_directions > 1: - client.add_streams(streams[3:6], ports=[port_1]) + mark = len(streams) // 2 + for i in ports[1::2]: + client.add_streams(streams=streams[mark:mark+3], ports=[i]) + mark = mark + 3 if latency: try: if isinstance(framesize, int): - client.add_streams(streams[last_stream_b], ports=[port_0]) + mark_c = len(streams) // 2 + mark_d = len(streams) // 2 + len(streams) // 4 + for i,j in zip(streams[mark_c:mark_d], ports[::2]): + client.add_streams(streams=[i], ports=[j]) if traffic_directions > 1: - client.add_streams( - streams[last_stream_b + 1], ports=[port_1]) + for i,j in zip(streams[mark_d:], ports[1::2]): + client.add_streams(streams=[i], ports=[j]) elif isinstance(framesize, str): latency = False except STLError: # Disable latency if NIC does not support requested stream type - print(u"##### FAILED to add latency streams #####") + print("##### FAILED to add latency streams #####") latency = False - ports = [port_0] - if traffic_directions > 1: - ports.append(port_1) - # Warm-up phase: - if warmup_time > 0: - # Clear the stats before injecting: - client.clear_stats() - - # Choose rate and start traffic: - client.start( - ports=ports, mult=rate, duration=warmup_time, force=force, - core_mask=STLClient.CORE_MASK_PIN - ) - - # Block until done: - time_start = time.monotonic() - client.wait_on_traffic(ports=ports, timeout=warmup_time+30) - time_stop = time.monotonic() - approximated_duration = time_stop - time_start - - if client.get_warnings(): - for warning in client.get_warnings(): - print(warning) - - # Read the stats after the test: - stats = client.get_stats() - - print(u"##### Warmup statistics #####") - print(json.dumps(stats, indent=4, separators=(u",", u": "))) - - lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"] - if traffic_directions > 1: - lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"] - - print(f"\npackets lost from {port_0} --> {port_1}: {lost_a} pkts") - if traffic_directions > 1: - print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts") # Clear the stats before injecting: client.clear_stats() - lost_a = 0 - lost_b = 0 # Choose rate and start traffic: client.start( - ports=ports, mult=rate, duration=duration, force=force, - core_mask=STLClient.CORE_MASK_PIN + ports=ports[::] if traffic_directions == 2 else ports[::2], + mult=rate, + duration=duration, + force=force, + core_mask=STLClient.CORE_MASK_PIN, ) if async_start: # For async stop, we need to export the current snapshot. - xsnap0 = client.ports[0].get_xstats().reference_stats - print(f"Xstats snapshot 0: {xsnap0!r}") - if traffic_directions > 1: - xsnap1 = client.ports[1].get_xstats().reference_stats - print(f"Xstats snapshot 1: {xsnap1!r}") + for i in range(len(client.ports)): + xsnap = client.ports[i].get_xstats().reference_stats + print(f"Xstats snapshot {i}: {xsnap!r}") else: - # Block until done: time_start = time.monotonic() - client.wait_on_traffic(ports=ports, timeout=duration+30) + # wait_on_traffic fails if duration stretches by 30 seconds or more. + # TRex has some overhead, wait some more. + time.sleep(duration + delay) + client.stop() time_stop = time.monotonic() - approximated_duration = time_stop - time_start - + approximated_duration = time_stop - time_start - delay + # Read the stats after the traffic stopped (or time up). + stats = client.get_stats() if client.get_warnings(): for warning in client.get_warnings(): print(warning) + # Now finish the complete reset. + client.reset() - # Read the stats after the test - stats = client.get_stats() + print("##### Statistics #####") + print(json.dumps(stats, indent=4, separators=(",", ": "))) - print(u"##### Statistics #####") - print(json.dumps(stats, indent=4, separators=(u",", u": "))) - - lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"] - if traffic_directions > 1: - lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"] + nr_ports = len(client.ports) + for i,j in zip(range(nr_ports)[0::2], range(nr_ports)[1::2]): + lost_r = stats[i]["opackets"] - stats[j]["ipackets"] + lost_l = stats[j]["opackets"] - stats[i]["ipackets"] + print(f"packets lost from {i} --> {j}: {lost_r} pkts") + print(f"packets lost from {j} --> {i}: {lost_l} pkts") # Stats index is not a port number, but "pgid". + # We will take latency read from only first link. if latency: - lat_obj = stats[u"latency"][0][u"latency"] + lat_obj = stats["latency"][0]["latency"] lat_a = fmt_latency( - str(lat_obj[u"total_min"]), str(lat_obj[u"average"]), - str(lat_obj[u"total_max"]), str(lat_obj[u"hdrh"])) + str(lat_obj["total_min"]), str(lat_obj["average"]), + str(lat_obj["total_max"]), str(lat_obj["hdrh"])) + # Do not bother with the other dir latency if unidir. if traffic_directions > 1: - lat_obj = stats[u"latency"][1][u"latency"] + lat_obj = stats["latency"][1]["latency"] lat_b = fmt_latency( - str(lat_obj[u"total_min"]), str(lat_obj[u"average"]), - str(lat_obj[u"total_max"]), str(lat_obj[u"hdrh"])) + str(lat_obj["total_min"]), str(lat_obj["average"]), + str(lat_obj["total_max"]), str(lat_obj["hdrh"])) - if traffic_directions > 1: - total_sent = stats[0][u"opackets"] + stats[1][u"opackets"] - total_rcvd = stats[0][u"ipackets"] + stats[1][u"ipackets"] - else: - total_sent = stats[port_0][u"opackets"] - total_rcvd = stats[port_1][u"ipackets"] - try: - approximated_rate = total_sent / approximated_duration - except ZeroDivisionError: - pass - - print(f"\npackets lost from {port_0} --> {port_1}: {lost_a} pkts") - if traffic_directions > 1: - print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts") + total_rcvd = stats["total"]["ipackets"] + total_sent = stats["total"]["opackets"] except STLError: - print(u"T-Rex STL runtime error!", file=sys.stderr) + print("T-Rex STL runtime error!", file=sys.stderr) raise finally: @@ -275,13 +257,14 @@ def simple_burst( if client: client.disconnect() print( - f"rate={rate!r}, total_received={total_rcvd}, " - f"total_sent={total_sent}, frame_loss={lost_a + lost_b}, " - f"target_duration={duration!r}, " - f"approximated_duration={approximated_duration!r}, " - f"approximated_rate={approximated_rate}, " - f"latency_stream_0(usec)={lat_a}, " - f"latency_stream_1(usec)={lat_b}, " + f"rate={rate!r}; " + f"total_received={total_rcvd}; " + f"total_sent={total_sent}; " + f"frame_loss={total_sent - total_rcvd}; " + f"target_duration={duration!r}; " + f"approximated_duration={approximated_duration!r}; " + f"latency_stream_0(usec)={lat_a}; " + f"latency_stream_1(usec)={lat_b}; " ) @@ -293,48 +276,44 @@ def main(): """ parser = argparse.ArgumentParser() parser.add_argument( - u"-p", u"--profile", required=True, type=str, - help=u"Python traffic profile." - ) - parser.add_argument( - u"-d", u"--duration", required=True, type=float, - help=u"Duration of traffic run." + "-p", "--profile", required=True, type=str, + help="Python traffic profile." ) parser.add_argument( - u"-s", u"--frame_size", required=True, - help=u"Size of a Frame without padding and IPG." + "-d", "--duration", required=True, type=float, + help="Duration of traffic run." ) parser.add_argument( - u"-r", u"--rate", required=True, - help=u"Traffic rate with included units (pps)." + "-s", "--frame_size", required=True, + help="Size of a Frame without padding and IPG." ) parser.add_argument( - u"-w", u"--warmup_time", type=float, default=5.0, - help=u"Traffic warm-up time in seconds, 0 = disable." + "-r", "--rate", required=True, + help="Traffic rate with included units (pps)." ) parser.add_argument( - u"--port_0", required=True, type=int, - help=u"Port 0 on the traffic generator." + "--ports", required=True, type=int, nargs="+", + help="Port list on the traffic generator." ) parser.add_argument( - u"--port_1", required=True, type=int, - help=u"Port 1 on the traffic generator." + "--async_start", action="store_true", default=False, + help="Non-blocking call of the script." ) parser.add_argument( - u"--async_start", action=u"store_true", default=False, - help=u"Non-blocking call of the script." + "--latency", action="store_true", default=False, + help="Add latency stream." ) parser.add_argument( - u"--latency", action=u"store_true", default=False, - help=u"Add latency stream." + "--traffic_directions", type=int, default=2, + help="Send bi- (2) or uni- (1) directional traffic." ) parser.add_argument( - u"--traffic_directions", type=int, default=2, - help=u"Send bi- (2) or uni- (1) directional traffic." + "--force", action="store_true", default=False, + help="Force start regardless of ports state." ) parser.add_argument( - u"--force", action=u"store_true", default=False, - help=u"Force start regardless of ports state." + "--delay", required=True, type=float, default=0.0, + help="Delay assumed for traffic, sleep time is increased by this [s]." ) args = parser.parse_args() @@ -345,12 +324,18 @@ def main(): framesize = args.frame_size simple_burst( - profile_file=args.profile, duration=args.duration, framesize=framesize, - rate=args.rate, warmup_time=args.warmup_time, port_0=args.port_0, - port_1=args.port_1, latency=args.latency, async_start=args.async_start, - traffic_directions=args.traffic_directions, force=args.force + profile_file=args.profile, + duration=args.duration, + framesize=framesize, + rate=args.rate, + ports=args.ports, + latency=args.latency, + async_start=args.async_start, + traffic_directions=args.traffic_directions, + force=args.force, + delay=args.delay, ) -if __name__ == u"__main__": +if __name__ == "__main__": main() diff --git a/GPL/tools/trex/trex_stl_stop.py b/GPL/tools/trex/trex_stl_stop.py index dcdae7c10a..c03624ba24 100644 --- a/GPL/tools/trex/trex_stl_stop.py +++ b/GPL/tools/trex/trex_stl_stop.py @@ -1,11 +1,21 @@ #!/usr/bin/python3 -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -20,11 +30,6 @@ Requirements: - compiled and running T-REX process (eg. ./t-rex-64 -i) - trex.stl.api library - Script must be executed on a node with T-REX instance - -Functionality: -1. Stop any running traffic -2. Optionally restore reference counter values. -3. Return conter differences. """ import argparse @@ -34,72 +39,63 @@ import sys from collections import OrderedDict # Needed to parse xstats representation. sys.path.insert( - 0, u"/opt/trex-core-2.82/scripts/automation/trex_control_plane/interactive/" + 0, "/opt/trex-core-3.03/scripts/automation/trex_control_plane/interactive/" ) -from trex.stl.api import * +from trex.stl.api import STLClient def main(): """Stop traffic if any is running. Report xstats.""" parser = argparse.ArgumentParser() parser.add_argument( - u"--xstat0", type=str, default=u"", - help=u"Reference xstat object if any." - ) - parser.add_argument( - u"--xstat1", type=str, default=u"", - help=u"Reference xstat object if any." + "--xstat", type=str, nargs="*", help="Reference xstat object if any." ) args = parser.parse_args() client = STLClient() try: - # connect to server client.connect() - client.acquire(force=True) - # TODO: Support unidirection. - client.stop(ports=[0, 1]) + client.stop() + xstats = list() # Read the stats after the test, # we need to update values before the last trial started. - if args.xstat0: - snapshot = eval(args.xstat0) - client.ports[0].get_xstats().reference_stats = snapshot - if args.xstat1: - snapshot = eval(args.xstat1) - client.ports[1].get_xstats().reference_stats = snapshot - # Now we can call the official method to get differences. - xstats0 = client.get_xstats(0) - xstats1 = client.get_xstats(1) - - # If STLError happens, let the script fail with stack trace. + for i in range(len(client.ports)): + if args.xstat[i]: + snapshot = eval(args.xstat[i]) + client.ports[i].get_xstats().reference_stats = snapshot + # Now we can call the official method to get differences. + xstats.append(client.get_xstats(i)) + print(f"##### statistics port {i} #####") + print(json.dumps(xstats[i], indent=4, separators=(",", ": "))) finally: client.disconnect() - print(u"##### statistics port 0 #####") - print(json.dumps(xstats0, indent=4, separators=(u",", u": "))) - print(u"##### statistics port 1 #####") - print(json.dumps(xstats1, indent=4, separators=(u",", u": "))) - - tx_0, rx_0 = xstats0[u"tx_good_packets"], xstats0[u"rx_good_packets"] - tx_1, rx_1 = xstats1[u"tx_good_packets"], xstats1[u"rx_good_packets"] - lost_a, lost_b = tx_0 - rx_1, tx_1 - rx_0 + for idx,stat in enumerate(zip(xstats[0::2], xstats[1::2])): + lost_r = stat[0]["tx_good_packets"] - stat[1]["rx_good_packets"] + lost_l = stat[1]["tx_good_packets"] - stat[0]["rx_good_packets"] + print(f"packets lost from {idx*2} --> {idx*2+1}: {lost_r} pkts") + print(f"packets lost from {idx*2+1} --> {idx*2}: {lost_l} pkts") - print(f"\npackets lost from 0 --> 1: {lost_a} pkts") - print(f"packets lost from 1 --> 0: {lost_b} pkts") + total_rcvd = 0 + total_sent = 0 + for stat in xstats: + total_rcvd += stat["rx_good_packets"] + total_sent += stat["tx_good_packets"] - total_rcvd, total_sent = rx_0 + rx_1, tx_0 + tx_1 - total_lost = total_sent - total_rcvd - # TODO: Add latency. print( - f"rate='unknown', total_received={total_rcvd}, " - f"total_sent={total_sent}, frame_loss={total_lost}, " - f"target_duration='manual', approximated_duration='manual', " - f"approximated_rate='unknown', " - f"latency_stream_0(usec)=-1/-1/-1, latency_stream_1(usec)=-1/-1/-1" + f"rate='unknown'; " + f"total_received={total_rcvd}; " + f"total_sent={total_sent}; " + f"frame_loss={total_sent - total_rcvd}; " + f"target_duration='manual'; " + f"approximated_duration='manual'; " + f"approximated_rate='unknown'; " + f"latency_stream_0(usec)=-1/-1/-1; " + f"latency_stream_1(usec)=-1/-1/-1; " ) -if __name__ == u"__main__": +if __name__ == "__main__": main() diff --git a/GPL/traffic_profiles/trex/profile_trex_astf_base_class.py b/GPL/traffic_profiles/trex/profile_trex_astf_base_class.py index 913a44754c..55aedd0543 100644 --- a/GPL/traffic_profiles/trex/profile_trex_astf_base_class.py +++ b/GPL/traffic_profiles/trex/profile_trex_astf_base_class.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -36,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): @@ -62,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 - self.framesize value is used. + self.framesize value is used. :type current_length: int :type required_length: int :returns: The generated padding. @@ -72,20 +78,25 @@ class TrafficProfileBaseClass: # 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: - 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 - traffic generator. + traffic generator. :rtype: tuple """ raise NotImplementedError @@ -98,15 +109,14 @@ class TrafficProfileBaseClass: :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, - cap_list=cap_list + **kwargs ) return profile @@ -117,13 +127,15 @@ class TrafficProfileBaseClass: 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"] + self.n_data_frames = kwargs[u"n_data_frames"] self._pcap_dir = kwargs.get( - u"pcap_dir",u"/opt/trex-core-2.82/scripts/avl" + u"pcap_dir", u"/opt/trex-core-3.03/scripts/avl" ) return self.create_profile() diff --git a/GPL/traffic_profiles/trex/profile_trex_stateless_base_class.py b/GPL/traffic_profiles/trex/profile_trex_stateless_base_class.py index 32ffe9efd6..5b86192021 100644 --- a/GPL/traffic_profiles/trex/profile_trex_stateless_base_class.py +++ b/GPL/traffic_profiles/trex/profile_trex_stateless_base_class.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -14,7 +24,6 @@ """Base class for stream profiles for T-rex traffic generator. """ -import sys import socket import struct @@ -119,35 +128,39 @@ class TrafficStreamsBaseClass: # Frame size is defined as an integer, e.g. 64, 1518: if isinstance(self.framesize, int): - # Create a base packet and pad it to size - payload_len = max(0, self.framesize - len(base_pkt_a) - 4) # No FCS + # Create a base packet and pad it to size; deduct FCS + payload_len_a = max(0, self.framesize - len(base_pkt_a) - 4) + payload_len_b = max(0, self.framesize - len(base_pkt_b) - 4) # Direction 0 --> 1 pkt_a = STLPktBuilder( - pkt=base_pkt_a / self._gen_payload(payload_len), vm=vm1 + pkt=base_pkt_a / self._gen_payload(payload_len_a), vm=vm1 ) # Direction 1 --> 0 pkt_b = STLPktBuilder( - pkt=base_pkt_b / self._gen_payload(payload_len), vm=vm2 + pkt=base_pkt_b / self._gen_payload(payload_len_b), vm=vm2 ) # Packets for latency measurement: # Direction 0 --> 1 pkt_lat_a = STLPktBuilder( - pkt=base_pkt_a / self._gen_payload(payload_len), vm=vm1 + pkt=base_pkt_a / self._gen_payload(payload_len_a), vm=vm1 ) # Direction 1 --> 0 pkt_lat_b = STLPktBuilder( - pkt=base_pkt_b / self._gen_payload(payload_len), vm=vm2 + pkt=base_pkt_b / self._gen_payload(payload_len_b), vm=vm2 ) # Create the streams: # Direction 0 --> 1 - stream1 = STLStream(packet=pkt_a, mode=STLTXCont(pps=9000)) + stream1 = STLStream( + packet=pkt_a, mode=STLTXCont(pps=9000) + ) # Direction 1 --> 0 # second traffic stream with a phase of 10ns (inter-stream gap) - stream2 = STLStream(packet=pkt_b, isg=10.0, - mode=STLTXCont(pps=9000)) + stream2 = STLStream( + packet=pkt_b, isg=10.0, mode=STLTXCont(pps=9000) + ) # Streams for latency measurement: # Direction 0 --> 1 @@ -179,10 +192,12 @@ class TrafficStreamsBaseClass: # Create a base packet and pad it to size pkt_a = STLPktBuilder( pkt=base_pkt_a / self._gen_payload(payload_len_a), - vm=vm1) + vm=vm1 + ) pkt_b = STLPktBuilder( pkt=base_pkt_b / self._gen_payload(payload_len_b), - vm=vm2) + vm=vm2 + ) # Create the streams: stream1.append(STLStream( diff --git a/GPL/traffic_profiles/trex/profile_trex_stateless_scale_class.py b/GPL/traffic_profiles/trex/profile_trex_stateless_scale_class.py new file mode 100644 index 0000000000..33cf090da2 --- /dev/null +++ b/GPL/traffic_profiles/trex/profile_trex_stateless_scale_class.py @@ -0,0 +1,196 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for stream profiles for T-rex traffic generator. +""" + +import socket +import struct + +from random import choice +from string import ascii_letters + +from trex.stl.api import * + + +class TrafficStreamsScaleClass: + """Base class for stream profiles for T-rex traffic generator.""" + + STREAM_TABLE = { + "IMIX_v4": [ + {"size": 60, "pps": 28, "isg": 0}, + {"size": 590, "pps": 20, "isg": 0.1}, + {"size": 1514, "pps": 4, "isg": 0.2} + ], + "IMIX_v4_1": [ + {"size": 64, "pps": 28, "isg": 0}, + {"size": 570, "pps": 16, "isg": 0.1}, + {"size": 1518, "pps": 4, "isg": 0.2} + ] + } + + def __init__(self): + # Default value of frame size, it will be overwritten by the value of + # "framesize" parameter of "get_streams" method. + self.framesize = 64 + + # If needed, add your own parameters. + + def _gen_payload(self, length): + """Generate payload. + + If needed, implement your own algorithm. + + :param length: Length of generated payload. + :type length: int + :returns: The generated payload. + :rtype: str + """ + payload = "" + for _ in range(length): + payload += choice(ascii_letters) + + return payload + + def _get_start_end_ipv6(self, start_ip, end_ip): + """Get start host and number of hosts from IPv6 as integer. + + :param start_ip: Start IPv6. + :param end_ip: End IPv6. + :type start_ip: string + :type end_ip: string + :return: Start host, number of hosts. + :rtype tuple of int + :raises: ValueError if start_ip is greater then end_ip. + :raises: socket.error if the IP addresses are not valid IPv6 addresses. + """ + try: + ip1 = socket.inet_pton(socket.AF_INET6, start_ip) + ip2 = socket.inet_pton(socket.AF_INET6, end_ip) + + hi1, lo1 = struct.unpack("!QQ", ip1) + hi2, lo2 = struct.unpack("!QQ", ip2) + + if ((hi1 << 64) | lo1) > ((hi2 << 64) | lo2): + raise ValueError("IPv6: start_ip is greater then end_ip") + + return lo1, abs(int(lo1) - int(lo2)) + + except socket.error as err: + print(err) + raise + + def define_packets(self): + """Define the packets to be sent from the traffic generator. + + This method MUST return: + + return base_pkt_a, base_pkt_b, vm1, vm2 + + vm1 and vm2 CAN be None. + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + raise NotImplementedError + + def create_streams(self): + """Create traffic streams. + + Implement your own traffic streams. + + :returns: Traffic streams. + :rtype: list + """ + pkts, vms = self.define_packets() + + # Frame size is defined as an integer, e.g. 64, 1518: + if isinstance(self.framesize, int): + pkt_streams = list() + lat_streams = list() + for i in range(len(pkts)): + payload_len = max(0, self.framesize - len(pkts[i]) - 4) + + pkt = STLPktBuilder( + pkt=pkts[i] / self._gen_payload(payload_len), + vm=vms[i] + ) + pkt_lat = STLPktBuilder( + pkt=pkts[i] / self._gen_payload(payload_len), + vm=vms[i] + ) + pkt_streams.append( + STLStream( + packet=pkt, + isg=10.0 * (i // (len(pkts) // 2)), + mode=STLTXCont(pps=9000) + ) + ) + lat_streams.append( + STLStream( + packet=pkt_lat, + isg=10.0 * (i // (len(pkts) // 2)), + flow_stats=STLFlowLatencyStats(pg_id=i), + mode=STLTXCont(pps=9000) + ) + ) + + streams = list() + streams.extend(pkt_streams) + streams.extend(lat_streams) + return streams + + # Frame size is defined as a string, e.g.IMIX_v4_1: + elif isinstance(self.framesize, str): + pkt_streams = list() + for i in range(len(pkts)): + for stream in self.STREAM_TABLE[self.framesize]: + payload_len = max(0, stream["size"] - len(pkts[i]) - 4) + + pkt = STLPktBuilder( + pkt=pkts[i] / self._gen_payload(payload_len), + vm=vms[i] + ) + pkt_streams.append( + STLStream( + packet=pkt, + isg=stream["isg"], + mode=STLTXCont(pps=stream["pps"]) + ) + ) + return pkt_streams + + def get_streams(self, **kwargs): + """Get traffic streams created by "create_streams" method. + + If needed, add your own parameters. + + :param kwargs: Key-value pairs used by "create_streams" method while + creating streams. + :returns: Traffic streams. + :rtype: list + """ + self.framesize = kwargs["framesize"] + self.rate = kwargs["rate"] + + return self.create_streams() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h-pps.py new file mode 100644 index 0000000000..9c3ab873c1 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h-pps.py @@ -0,0 +1,140 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. + +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / TCP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.3.255 + - Destination IP address range: 20.0.0.0 - 20.0.3.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines TCP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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() + prog_c.set_var(u"var1", self.n_data_frames) + prog_c.set_label(u"a1:") + prog_c.send(u"1" * real_mss) + prog_c.recv(real_mss) + prog_c.jmp_nz(u"var1", u"a1:") + + # server commands + prog_s = ASTFProgram() + prog_s.accept() + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"a2:") + prog_s.recv(real_mss) + prog_s.send(u"1" * real_mss) + prog_s.jmp_nz(u"var2", u"a2:") + + # ip generators + ip_gen_c = ASTFIPGenDist( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + limit=64512, # TODO: set via input parameter + port=8080, + ) + temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc) + template = ASTFTemplate(client_template=temp_c, server_template=temp_s) + + globinfo = ASTFGlobalInfo() + # Ensure correct data frame size. + globinfo.tcp.mss = trex_mss + globinfo.tcp.txbufsize = trex_mss + globinfo.tcp.rxbufsize = trex_mss + kwargs = dict( + default_c_glob_info=globinfo, + default_s_glob_info=globinfo, + ) + + return ip_gen, template, kwargs + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h.py index 809a954a30..4c6a15ac7d 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-1024h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,9 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up and tears down TCP session. +No delays, no data transfer. """ from trex.astf.api import * @@ -34,24 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Delay for keeping tcp sessions active - self.delay = 2000000 # delay 2s (2,000,000 usec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -62,14 +57,20 @@ class TrafficProfile(TrafficProfileBaseClass): :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 prog_c.connect() # receive syn-ack (0B sent in tcp syn-ack packet) and send ack prog_c.recv(0) - # wait defined time, then send fin-ack - prog_c.delay(self.delay) # server commands prog_s = ASTFProgram() @@ -80,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass): # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -101,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h-pps.py new file mode 100644 index 0000000000..ae5879a98f --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h-pps.py @@ -0,0 +1,140 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. + +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / TCP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.63.255 + - Destination IP address range: 20.0.0.0 - 20.0.63.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines TCP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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() + prog_c.set_var(u"var1", self.n_data_frames) + prog_c.set_label(u"a1:") + prog_c.send(u"1" * real_mss) + prog_c.recv(real_mss) + prog_c.jmp_nz(u"var1", u"a1:") + + # server commands + prog_s = ASTFProgram() + prog_s.accept() + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"a2:") + prog_s.recv(real_mss) + prog_s.send(u"1" * real_mss) + prog_s.jmp_nz(u"var2", u"a2:") + + # ip generators + ip_gen_c = ASTFIPGenDist( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + limit=1032192, # TODO: set via input parameter + port=8080, + ) + temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc) + template = ASTFTemplate(client_template=temp_c, server_template=temp_s) + + globinfo = ASTFGlobalInfo() + # Ensure correct data frame size. + globinfo.tcp.mss = trex_mss + globinfo.tcp.txbufsize = trex_mss + globinfo.tcp.rxbufsize = trex_mss + kwargs = dict( + default_c_glob_info=globinfo, + default_s_glob_info=globinfo, + ) + + return ip_gen, template, kwargs + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h.py index 0d7f9a5974..728ad5b0d9 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-16384h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,9 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up and tears down TCP session. +No delays, no data transfer. """ from trex.astf.api import * @@ -34,24 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Delay for keeping tcp sessions active - self.delay = 2000000 # delay 2s (2,000,000 usec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -62,14 +57,20 @@ class TrafficProfile(TrafficProfileBaseClass): :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 prog_c.connect() # receive syn-ack (0B sent in tcp syn-ack packet) and send ack prog_c.recv(0) - # wait defined time, then send fin-ack - prog_c.delay(self.delay) # server commands prog_s = ASTFProgram() @@ -80,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass): # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -101,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h-pps.py new file mode 100644 index 0000000000..46468386b1 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h-pps.py @@ -0,0 +1,140 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. + +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / TCP + - Direction 0 --> 1: + - Source IP address range: 172.16.0.0 - 172.19.255.255 + - Destination IP address range: 20.16.0.0 - 20.19.255.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines TCP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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() + prog_c.set_var(u"var1", self.n_data_frames) + prog_c.set_label(u"a1:") + prog_c.send(u"1" * real_mss) + prog_c.recv(real_mss) + prog_c.jmp_nz(u"var1", u"a1:") + + # server commands + prog_s = ASTFProgram() + prog_s.accept() + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"a2:") + prog_s.recv(real_mss) + prog_s.send(u"1" * real_mss) + prog_s.jmp_nz(u"var2", u"a2:") + + # ip generators + ip_gen_c = ASTFIPGenDist( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + limit=16515072, # TODO: set via input parameter + port=8080, + ) + temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc) + template = ASTFTemplate(client_template=temp_c, server_template=temp_s) + + globinfo = ASTFGlobalInfo() + # Ensure correct data frame size. + globinfo.tcp.mss = trex_mss + globinfo.tcp.txbufsize = trex_mss + globinfo.tcp.rxbufsize = trex_mss + kwargs = dict( + default_c_glob_info=globinfo, + default_s_glob_info=globinfo, + ) + + return ip_gen, template, kwargs + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h.py index 6f533844e0..ec4870a95e 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-262144h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,9 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up and tears down TCP session. +No delays, no data transfer. """ from trex.astf.api import * @@ -34,24 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Delay for keeping tcp sessions active - self.delay = 2000000 # delay 2s (2,000,000 usec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -62,14 +57,20 @@ class TrafficProfile(TrafficProfileBaseClass): :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 prog_c.connect() # receive syn-ack (0B sent in tcp syn-ack packet) and send ack prog_c.recv(0) - # wait defined time, then send fin-ack - prog_c.delay(self.delay) # server commands prog_s = ASTFProgram() @@ -80,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass): # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -101,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h-pps.py new file mode 100644 index 0000000000..35e961495d --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h-pps.py @@ -0,0 +1,140 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. + +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / TCP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.15.255 + - Destination IP address range: 20.0.0.0 - 20.0.15.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines TCP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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() + prog_c.set_var(u"var1", self.n_data_frames) + prog_c.set_label(u"a1:") + prog_c.send(u"1" * real_mss) + prog_c.recv(real_mss) + prog_c.jmp_nz(u"var1", u"a1:") + + # server commands + prog_s = ASTFProgram() + prog_s.accept() + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"a2:") + prog_s.recv(real_mss) + prog_s.send(u"1" * real_mss) + prog_s.jmp_nz(u"var2", u"a2:") + + # ip generators + ip_gen_c = ASTFIPGenDist( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + limit=258048, # TODO: set via input parameter + port=8080, + ) + temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc) + template = ASTFTemplate(client_template=temp_c, server_template=temp_s) + + globinfo = ASTFGlobalInfo() + # Ensure correct data frame size. + globinfo.tcp.mss = trex_mss + globinfo.tcp.txbufsize = trex_mss + globinfo.tcp.rxbufsize = trex_mss + kwargs = dict( + default_c_glob_info=globinfo, + default_s_glob_info=globinfo, + ) + + return ip_gen, template, kwargs + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h.py index acfc5e109a..6124baa6a1 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-4096h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,9 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up and tears down TCP session. +No delays, no data transfer. """ from trex.astf.api import * @@ -34,24 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Delay for keeping tcp sessions active - self.delay = 2000000 # delay 2s (2,000,000 usec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -62,14 +57,20 @@ class TrafficProfile(TrafficProfileBaseClass): :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 prog_c.connect() # receive syn-ack (0B sent in tcp syn-ack packet) and send ack prog_c.recv(0) - # wait defined time, then send fin-ack - prog_c.delay(self.delay) # server commands prog_s = ASTFProgram() @@ -80,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass): # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -101,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h-pps.py new file mode 100644 index 0000000000..5dcfb70cb7 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h-pps.py @@ -0,0 +1,140 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. + +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / TCP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.255.255 + - Destination IP address range: 20.0.0.0 - 20.0.255.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines TCP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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() + prog_c.set_var(u"var1", self.n_data_frames) + prog_c.set_label(u"a1:") + prog_c.send(u"1" * real_mss) + prog_c.recv(real_mss) + prog_c.jmp_nz(u"var1", u"a1:") + + # server commands + prog_s = ASTFProgram() + prog_s.accept() + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"a2:") + prog_s.recv(real_mss) + prog_s.send(u"1" * real_mss) + prog_s.jmp_nz(u"var2", u"a2:") + + # ip generators + ip_gen_c = ASTFIPGenDist( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + limit=4128768, # TODO: set via input parameter + port=8080, + ) + temp_s = ASTFTCPServerTemplate(program=prog_s, assoc=s_assoc) + template = ASTFTemplate(client_template=temp_c, server_template=temp_s) + + globinfo = ASTFGlobalInfo() + # Ensure correct data frame size. + globinfo.tcp.mss = trex_mss + globinfo.tcp.txbufsize = trex_mss + globinfo.tcp.rxbufsize = trex_mss + kwargs = dict( + default_c_glob_info=globinfo, + default_s_glob_info=globinfo, + ) + + return ip_gen, template, kwargs + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h.py index 7d2f5b6265..13c6ee8f38 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4tcp-65536h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,9 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up and tears down TCP session. +No delays, no data transfer. """ from trex.astf.api import * @@ -34,24 +47,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Delay for keeping tcp sessions active - self.delay = 2000000 # delay 2s (2,000,000 usec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -62,14 +57,20 @@ class TrafficProfile(TrafficProfileBaseClass): :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 prog_c.connect() # receive syn-ack (0B sent in tcp syn-ack packet) and send ack prog_c.recv(0) - # wait defined time, then send fin-ack - prog_c.delay(self.delay) # server commands prog_s = ASTFProgram() @@ -80,17 +81,17 @@ class TrafficProfile(TrafficProfileBaseClass): # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -101,7 +102,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h-pps.py new file mode 100644 index 0000000000..135e7fbdc7 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h-pps.py @@ -0,0 +1,149 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / UDP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.3.255 + - Destination IP address range: 20.0.0.0 - 20.0.3.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines UDP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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" + + # 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) + 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.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_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. + 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. + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"b:") + 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( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + 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) + + return ip_gen, template, None + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h.py index 6bf0d53d1f..a1282adf2f 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-1024h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,10 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up UDP session. +No delays, no data transfer. +Keepalive mechanism cannot be disabled, so it is at least set to long waits. """ from trex.astf.api import * @@ -35,27 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Required UDP keepalive value for T-Rex - self.udp_keepalive = 2000 # 2s (2,000 msec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -65,46 +58,53 @@ class TrafficProfile(TrafficProfileBaseClass): :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) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) # send REQ message - prog_c.send_msg(self.udp_req) - # receive RES message - prog_c.recv_msg(1) - - prog_c.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_c.send_msg(udp_req) + # No need to process the response, seeing L2 counter is enough. + # Client program can end here. # server commands prog_s = ASTFProgram(stream=False) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) - # receive REQ message - prog_s.recv_msg(1) + # 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.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_s.send_msg(udp_res) + # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -115,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h-pps.py new file mode 100644 index 0000000000..05976bc45c --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h-pps.py @@ -0,0 +1,149 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / UDP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.63.255 + - Destination IP address range: 20.0.0.0 - 20.0.63.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines UDP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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" + + # 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) + 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.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_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. + 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. + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"b:") + 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( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + 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) + + return ip_gen, template, None + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h.py index 9237831aa5..3a1793a617 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-16384h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,10 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up UDP session. +No delays, no data transfer. +Keepalive mechanism cannot be disabled, so it is at least set to long waits. """ from trex.astf.api import * @@ -35,27 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Required UDP keepalive value for T-Rex - self.udp_keepalive = 2000 # 2s (2,000 msec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -65,46 +58,53 @@ class TrafficProfile(TrafficProfileBaseClass): :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) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) # send REQ message - prog_c.send_msg(self.udp_req) - # receive RES message - prog_c.recv_msg(1) - - prog_c.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_c.send_msg(udp_req) + # No need to process the response, seeing L2 counter is enough. + # Client program can end here. # server commands prog_s = ASTFProgram(stream=False) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) - # receive REQ message - prog_s.recv_msg(1) + # 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.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_s.send_msg(udp_res) + # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -115,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h-pps.py new file mode 100644 index 0000000000..801db90095 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h-pps.py @@ -0,0 +1,149 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / UDP + - Direction 0 --> 1: + - Source IP address range: 172.16.0.0 - 172.19.255.255 + - Destination IP address range: 20.16.0.0 - 20.19.255.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines UDP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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" + + # 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) + 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.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_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. + 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. + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"b:") + 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( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + 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) + + return ip_gen, template, None + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h.py index 728eba8a04..2203cf3d0b 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-262144h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,10 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up UDP session. +No delays, no data transfer. +Keepalive mechanism cannot be disabled, so it is at least set to long waits. """ from trex.astf.api import * @@ -35,27 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Required UDP keepalive value for T-Rex - self.udp_keepalive = 2000 # 2s (2,000 msec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -65,46 +58,53 @@ class TrafficProfile(TrafficProfileBaseClass): :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) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) # send REQ message - prog_c.send_msg(self.udp_req) - # receive RES message - prog_c.recv_msg(1) - - prog_c.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_c.send_msg(udp_req) + # No need to process the response, seeing L2 counter is enough. + # Client program can end here. # server commands prog_s = ASTFProgram(stream=False) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) - # receive REQ message - prog_s.recv_msg(1) + # 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.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_s.send_msg(udp_res) + # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -115,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h-pps.py new file mode 100644 index 0000000000..5de25273ef --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h-pps.py @@ -0,0 +1,149 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / UDP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.15.255 + - Destination IP address range: 20.0.0.0 - 20.0.15.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines UDP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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" + + # 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) + 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.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_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. + 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. + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"b:") + 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( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + 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) + + return ip_gen, template, None + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h.py index 0807175d36..81c074e5e3 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-4096h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,10 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up UDP session. +No delays, no data transfer. +Keepalive mechanism cannot be disabled, so it is at least set to long waits. """ from trex.astf.api import * @@ -35,27 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Required UDP keepalive value for T-Rex - self.udp_keepalive = 2000 # 2s (2,000 msec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -65,46 +58,53 @@ class TrafficProfile(TrafficProfileBaseClass): :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) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) # send REQ message - prog_c.send_msg(self.udp_req) - # receive RES message - prog_c.recv_msg(1) - - prog_c.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_c.send_msg(udp_req) + # No need to process the response, seeing L2 counter is enough. + # Client program can end here. # server commands prog_s = ASTFProgram(stream=False) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) - # receive REQ message - prog_s.recv_msg(1) + # 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.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_s.send_msg(udp_res) + # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -115,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h-pps.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h-pps.py new file mode 100644 index 0000000000..73270607c1 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h-pps.py @@ -0,0 +1,149 @@ +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic profile for T-rex advanced stateful (astf) traffic generator. +Traffic profile: + - Two streams sent in directions 0 --> 1 (client -> server, requests) and + 1 --> 0 (server -> client, responses) at the same time. + - Packet: ETH / IP / UDP + - Direction 0 --> 1: + - Source IP address range: 192.168.0.0 - 192.168.255.255 + - Destination IP address range: 20.0.0.0 - 20.0.255.255 + - Direction 1 --> 0: + - Source IP address range: destination IP address from packet received + on port 1 + - Destination IP address range: source IP address from packet received + on port 1 + +This is a profile for PPS tests, it combines UDP connect and data transfer. +No delays, server response waits for full request. +""" + +from trex.astf.api import * +from profile_trex_astf_base_class import TrafficProfileBaseClass + + +class TrafficProfile(TrafficProfileBaseClass): + """Traffic profile.""" + + def define_profile(self): + """Define profile to be used by advanced stateful traffic generator. + + This method MUST return: + + return ip_gen, templates, None + + :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" + + # 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) + 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.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_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. + 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. + prog_s.set_var(u"var2", self.n_data_frames) + prog_s.set_label(u"b:") + 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( + ip_range=[p1_src_start_ip, p1_src_end_ip], + distribution=u"seq", + ) + ip_gen_s = ASTFIPGenDist( + 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, + dist_server=ip_gen_s, + ) + + # server association + s_assoc = ASTFAssociation(rules=ASTFAssociationRule(port=8080)) + + # template + temp_c = ASTFTCPClientTemplate( + program=prog_c, + ip_gen=ip_gen, + 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) + + return ip_gen, template, None + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic Profiles. + :rtype: Object + """ + return TrafficProfile() diff --git a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h.py b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h.py index 85eaff005c..f1ee9125f2 100644 --- a/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h.py +++ b/GPL/traffic_profiles/trex/trex-astf-ethip4udp-65536h.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -25,6 +35,10 @@ Traffic profile: on port 1 - Destination IP address range: source IP address from packet received on port 1 + +This is a profile for CPS tests, it only sets up UDP session. +No delays, no data transfer. +Keepalive mechanism cannot be disabled, so it is at least set to long waits. """ from trex.astf.api import * @@ -35,27 +49,6 @@ from profile_trex_astf_base_class import TrafficProfileBaseClass 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 - - # Required UDP keepalive value for T-Rex - self.udp_keepalive = 2000 # 2s (2,000 msec) - def define_profile(self): """Define profile to be used by advanced stateful traffic generator. @@ -65,46 +58,53 @@ class TrafficProfile(TrafficProfileBaseClass): :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) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) # send REQ message - prog_c.send_msg(self.udp_req) - # receive RES message - prog_c.recv_msg(1) - - prog_c.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_c.send_msg(udp_req) + # No need to process the response, seeing L2 counter is enough. + # Client program can end here. # server commands prog_s = ASTFProgram(stream=False) - # set the keepalive timer for UDP flows to not close udp session - # immediately after packet exchange - prog_c.set_keepalive_msg(self.udp_keepalive) - # receive REQ message - prog_s.recv_msg(1) + # 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.delay(self.udp_keepalive * 1000) # delay is defined in usec + prog_s.send_msg(udp_res) + # 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_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, - dist_server=ip_gen_s + dist_server=ip_gen_s, ) # server association @@ -115,7 +115,7 @@ class TrafficProfile(TrafficProfileBaseClass): 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) diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-dot1qip4asym-ip4src254.py b/GPL/traffic_profiles/trex/trex-stl-2n-dot1qip4asym-ip4src254.py deleted file mode 100644 index ae411e233b..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-dot1qip4asym-ip4src254.py +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Direction 0 --> 1: - - Packet: ETH / IP / - - Source IP address range: 10.10.10.1 - 10.10.10.254 - - Destination IP address range: 20.20.20.1 - - Direction 1 --> 0: - - Packet: ETH / DOT1Q / IP / - - Source IP address range: 20.20.20.1 - 20.20.20.254 - - Destination IP address range: 10.10.10.1 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # VLAN ID - self.vlan_id = 10 - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.10.10.1" - self.p1_src_end_ip = u"10.10.10.254" - self.p1_dst_start_ip = u"20.20.20.1" - - self.p2_src_start_ip = u"20.20.20.1" - self.p2_src_end_ip = u"20.20.20.254" - self.p2_dst_start_ip = u"10.10.10.1" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - Dot1Q( - vlan=self.vlan_id - ) / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"src", - min_value=self.p1_src_start_ip, - max_value=self.p1_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"src", - pkt_offset=u"IP.src" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"src", - min_value=self.p2_src_start_ip, - max_value=self.p2_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"src", - pkt_offset=u"IP.src" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd10000.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd10000.py deleted file mode 100644 index 16627f0884..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd10000.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source IP address range: 10.0.0.1 - - Destination IP address range: 20.0.0.0 - 20.0.39.15 - - Direction 1 --> 0: - - Source IP address range: 20.0.0.1 - - Destination IP address range: 10.0.0.0 - 10.0.39.15 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams" parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.1" - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.0.39.15" - - self.p2_src_start_ip = u"20.0.0.1" - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.0.39.15" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVarRepeatableRandom( - name=u"dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - limit=10000 - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVarRepeatableRandom( - name=u"dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - limit=10000 - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd100000.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd100000.py deleted file mode 100644 index 751528d10c..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd100000.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source IP address range: 10.0.0.1 - - Destination IP address range: 20.0.0.0 - 20.1.134.159 - - Direction 1 --> 0: - - Source IP address range: 20.0.0.1 - - Destination IP address range: 10.0.0.0 - 10.1.134.159 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams" parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.1" - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.1.134.159" - - self.p2_src_start_ip = u"20.0.0.1" - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.1.134.159" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVarRepeatableRandom( - name=u"dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - limit=100000 - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVarRepeatableRandom( - name=u"dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - limit=100000 - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd1000000.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd1000000.py deleted file mode 100644 index 58ab03516c..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst-rnd1000000.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source IP address range: 10.0.0.1 - - Destination IP address range: 20.0.0.0 - 20.15.66.63 - - Direction 1 --> 0: - - Source IP address range: 20.0.0.1 - - Destination IP address range: 10.0.0.0 - 10.15.66.63 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams" parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.1" - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.15.66.63" - - self.p2_src_start_ip = u"20.0.0.1" - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.15.66.63" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVarRepeatableRandom( - name=u"dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - limit=1000000 - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVarRepeatableRandom( - name=u"dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - limit=1000000 - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4src253.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4src253.py deleted file mode 100644 index 883883ad18..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4src253.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source IP address range: 10.10.10.2 - 10.10.10.254 - - Destination IP address range: 20.20.20.2 - - Direction 1 --> 0: - - Source IP address range: 20.20.20.2 - 20.20.20.254 - - Destination IP address range: 10.10.10.2 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.10.10.2" - self.p1_src_end_ip = u"10.10.10.254" - self.p1_dst_start_ip = u"20.20.20.2" - - self.p2_src_start_ip = u"20.20.20.2" - self.p2_src_end_ip = u"20.20.20.254" - self.p2_dst_start_ip = u"10.10.10.2" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"src", - min_value=self.p1_src_start_ip, - max_value=self.p1_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"src", - pkt_offset=u"IP.src" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"src", - min_value=self.p2_src_start_ip, - max_value=self.p2_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"src", - pkt_offset=u"IP.src" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc500kdst500k.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc500kdst500k.py deleted file mode 100644 index 9c55482078..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc500kdst500k.py +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source MAC address range: ca:fe:00:00:00:00 - ca:fe:00:07:a1:1f - - Destination MAC address range: fa:ce:00:00:00:00 - fa:ce:00:07:a1:1f - - Source IP address range: 10.0.0.0 - 10.7.161.31 - - Destination IP address range: 20.0.0.0 - 20.7.161.31 - - Direction 1 --> 0: - - Source MAC address range: fa:ce:00:00:00:00 - fa:ce:00:07:a1:1f - - Destination MAC address range: ca:fe:00:00:00:00 - ca:fe:00:07:a1:1f - - Source IP address range: 20.0.0.0 - 20.7.161.31 - - Destination IP address range: 10.0.0.0 - 10.7.161.31 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - self.clients = 500000 - - # MACs used in packet headers. - self.p1_src_start_mac = u"ca:fe:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - self.p1_dst_start_mac = u"fa:ce:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - - self.p2_src_start_mac = u"fa:ce:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - self.p2_dst_start_mac = u"ca:fe:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.0" - self.p1_src_end_ip = u"10.7.161.31" - - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.7.161.31" - - self.p2_src_start_ip = u"20.0.0.0" - self.p2_src_end_ip = u"20.7.161.31" - - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.7.161.31" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether( - src=self.p1_src_start_mac, - dst=self.p1_dst_start_mac - ) / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether( - src=self.p2_src_start_mac, - dst=self.p2_dst_start_mac - ) / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"mac_src", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmFlowVar( - name=u"mac_dst", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"mac_src", - pkt_offset= 8 - ), - STLVmWrFlowVar( - fv_name=u"mac_dst", - pkt_offset= 2 - ), - STLVmFlowVar( - name=u"ip_src", - min_value=self.p1_src_start_ip, - max_value=self.p1_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_src", - pkt_offset=u"IP.src" - ), - STLVmFlowVar( - name=u"ip_dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"mac_src", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmFlowVar( - name=u"mac_dst", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"mac_src", - pkt_offset= 8 - ), - STLVmWrFlowVar( - fv_name=u"mac_dst", - pkt_offset= 2 - ), - STLVmFlowVar( - name=u"ip_src", - min_value=self.p2_src_start_ip, - max_value=self.p2_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_src", - pkt_offset=u"IP.src" - ), - STLVmFlowVar( - name=u"ip_dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc5kdst5k.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc5kdst5k.py deleted file mode 100644 index 29df3373d3..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc5kdst5k.py +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source MAC address range: ca:fe:00:00:00:00 - ca:fe:00:00:13:87 - - Destination MAC address range: fa:ce:00:00:00:00 - fa:ce:00:00:13:87 - - Source IP address range: 10.0.0.0 - 10.0.19.135 - - Destination IP address range: 20.0.0.0 - 20.0.19.135 - - Direction 1 --> 0: - - Source MAC address range: fa:ce:00:00:00:00 - fa:ce:00:00:13:87 - - Destination MAC address range: ca:fe:00:00:00:00 - ca:fe:00:00:13:87 - - Source IP address range: 20.0.0.0 - 20.0.19.135 - - Destination IP address range: 10.0.0.0 - 10.0.19.135 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - self.clients = 5000 - - # MACs used in packet headers. - self.p1_src_start_mac = u"ca:fe:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - self.p1_dst_start_mac = u"fa:ce:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - - self.p2_src_start_mac = u"fa:ce:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - self.p2_dst_start_mac = u"ca:fe:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.0" - self.p1_src_end_ip = u"10.0.19.135" - - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.0.19.135" - - self.p2_src_start_ip = u"20.0.0.0" - self.p2_src_end_ip = u"20.0.19.135" - - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.0.19.135" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether( - src=self.p1_src_start_mac, - dst=self.p1_dst_start_mac - ) / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether( - src=self.p2_src_start_mac, - dst=self.p2_dst_start_mac - ) / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"mac_src", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmFlowVar( - name=u"mac_dst", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"mac_src", - pkt_offset= 8 - ), - STLVmWrFlowVar( - fv_name=u"mac_dst", - pkt_offset= 2 - ), - STLVmFlowVar( - name=u"ip_src", - min_value=self.p1_src_start_ip, - max_value=self.p1_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_src", - pkt_offset=u"IP.src" - ), - STLVmFlowVar( - name=u"ip_dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"mac_src", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmFlowVar( - name=u"mac_dst", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"mac_src", - pkt_offset= 8 - ), - STLVmWrFlowVar( - fv_name=u"mac_dst", - pkt_offset= 2 - ), - STLVmFlowVar( - name=u"ip_src", - min_value=self.p2_src_start_ip, - max_value=self.p2_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_src", - pkt_offset=u"IP.src" - ), - STLVmFlowVar( - name=u"ip_dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst10000.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst10000.py deleted file mode 100644 index f1b90350fb..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst10000.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::1 - - Destination IP address range: 2001:2::0 - 2001:2::270F - - Direction 1 --> 0: - - Source IP address range: 2001:2::1 - - Destination IP address range: 2001:1::0 - 2001:1::270F -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::1" - self.p1_dst_start_ip = u"2001:2::0" - self.p1_dst_end_ip = u"2001:2::270F" - - self.p2_src_start_ip = u"2001:2::1" - self.p2_dst_start_ip = u"2001:1::0" - self.p2_dst_end_ip = u"2001:1::270F" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_dst_start_ip, - self.p1_dst_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_dst_start_ip, - self.p2_dst_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst100000.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst100000.py deleted file mode 100644 index 87e76726b2..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst100000.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::1 - - Destination IP address range: 2001:2::0 - 2001:2::1:869F - - Direction 1 --> 0: - - Source IP address range: 2001:2::1 - - Destination IP address range: 2001:1::0 - 2001:1::1:869F -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::1" - self.p1_dst_start_ip = u"2001:2::0" - self.p1_dst_end_ip = u"2001:2::1:869F" - - self.p2_src_start_ip = u"2001:2::1" - self.p2_dst_start_ip = u"2001:1::0" - self.p2_dst_end_ip = u"2001:1::1:869F" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_dst_start_ip, - self.p1_dst_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_dst_start_ip, - self.p2_dst_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst1000000.py b/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst1000000.py deleted file mode 100644 index 9214b6239d..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6dst1000000.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::1 - - Destination IP address range: 2001:2::0 - 2001:2::F:423F - - Direction 1 --> 0: - - Source IP address range: 2001:2::1 - - Destination IP address range: 2001:1::0 - 2001:1::F:423F -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::1" - self.p1_dst_start_ip = u"2001:2::0" - self.p1_dst_end_ip = u"2001:2::F:423F" - - self.p2_src_start_ip = u"2001:2::1" - self.p2_dst_start_ip = u"2001:1::0" - self.p2_dst_end_ip = u"2001:1::F:423F" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_dst_start_ip, - self.p1_dst_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_dst_start_ip, - self.p2_dst_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c1n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c1n.py index 3707ec6b9a..c1bf3086fa 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c1n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c1n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c2n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c2n.py index 52396c3723..6b01f76020 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c2n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-10c2n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c10n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c10n.py index 8d29f86b49..ef1477b47c 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c10n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c10n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c1n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c1n.py index f50e2e6c1d..21b0b5065a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c1n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c1n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c2n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c2n.py index 1923f72504..7ad1f03424 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c2n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c2n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c4n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c4n.py index a1e55c5253..1d27d4c6d2 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c4n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c4n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c6n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c6n.py index ffc8b428ef..4aff263248 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c6n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c6n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c8n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c8n.py index 952859b31d..27fd588123 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c8n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-1c8n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c10n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c10n.py index 84440af422..c47045a31b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c10n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c10n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c1n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c1n.py index 91941769a3..1c9858098c 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c1n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c1n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c2n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c2n.py index d66271f076..29bdf28b30 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c2n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c2n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c4n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c4n.py index 7eadae361b..1d981c877a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c4n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c4n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c6n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c6n.py index 3725f75b3e..fbf9b903ff 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c6n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c6n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c8n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c8n.py index 024cbc34f3..bdbb2e8044 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c8n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-2c8n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c1n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c1n.py index e8c62b9c41..094563a11b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c1n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c1n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c2n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c2n.py index a6fbe9ea79..805dfda3a3 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c2n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c2n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c4n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c4n.py index f1477419c3..2aa5963c8c 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c4n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c4n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c6n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c6n.py index 7e2b79fdac..734e8dd409 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c6n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-4c6n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c1n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c1n.py index dc8616c6fe..ae3d9c66f7 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c1n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c1n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c2n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c2n.py index 53a83db70b..6f528b8796 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c2n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c2n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c4n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c4n.py index ac697e60ec..5780be398f 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c4n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-6c4n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c1n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c1n.py index 587dfc3406..607389fa3f 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c1n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c1n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c2n.py b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c2n.py index 9123a752b2..e8000cf787 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c2n.py +++ b/GPL/traffic_profiles/trex/trex-stl-2n3n-ethip4-ip4src254-8c2n.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst100000.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst100000.py deleted file mode 100644 index ae36cf9995..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst100000.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source IP address range: 10.0.0.1 - - Destination IP address range: 20.0.0.0 - 20.1.134.159 - - Direction 1 --> 0: - - Source IP address range: 20.0.0.1 - - Destination IP address range: 10.0.0.0 - 10.1.134.159 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.1" - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.1.134.159" - - self.p2_src_start_ip = u"20.0.0.1" - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.1.134.159" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc50kdst50k.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc50kdst50k.py deleted file mode 100644 index 6cf066367b..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc50kdst50k.py +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - - Direction 0 --> 1: - - Source MAC address range: ca:fe:00:00:00:00 - ca:fe:00:00:c3:4f - - Destination MAC address range: fa:ce:00:00:00:00 - fa:ce:00:00:c3:4f - - Source IP address range: 10.0.0.0 - 10.0.195.79 - - Destination IP address range: 20.0.0.0 - 20.0.195.79 - - Direction 1 --> 0: - - Source MAC address range: fa:ce:00:00:00:00 - fa:ce:00:00:c3:4f - - Destination MAC address range: ca:fe:00:00:00:00 - ca:fe:00:00:c3:4f - - Source IP address range: 20.0.0.0 - 20.0.195.79 - - Destination IP address range: 10.0.0.0 - 10.0.195.79 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - self.clients = 50000 - - # MACs used in packet headers. - self.p1_src_start_mac = u"ca:fe:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - self.p1_dst_start_mac = u"fa:ce:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - - self.p2_src_start_mac = u"fa:ce:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - self.p2_dst_start_mac = u"ca:fe:00:00:00:00" # mask: 00:00:FF:FF:FF:FF - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.0.0.0" - self.p1_src_end_ip = u"10.0.195.79" - - self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.0.195.79" - - self.p2_src_start_ip = u"20.0.0.0" - self.p2_src_end_ip = u"20.0.195.79" - - self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.0.195.79" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether( - src=self.p1_src_start_mac, - dst=self.p1_dst_start_mac - ) / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=61 - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether( - src=self.p2_src_start_mac, - dst=self.p2_dst_start_mac - ) / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=61 - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"mac_src", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmFlowVar( - name=u"mac_dst", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"mac_src", - pkt_offset= 8 - ), - STLVmWrFlowVar( - fv_name=u"mac_dst", - pkt_offset= 2 - ), - STLVmFlowVar( - name=u"ip_src", - min_value=self.p1_src_start_ip, - max_value=self.p1_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_src", - pkt_offset=u"IP.src" - ), - STLVmFlowVar( - name=u"ip_dst", - min_value=self.p1_dst_start_ip, - max_value=self.p1_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"mac_src", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmFlowVar( - name=u"mac_dst", - min_value=0, - max_value=self.clients-1, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"mac_src", - pkt_offset= 8 - ), - STLVmWrFlowVar( - fv_name=u"mac_dst", - pkt_offset= 2 - ), - STLVmFlowVar( - name=u"ip_src", - min_value=self.p2_src_start_ip, - max_value=self.p2_src_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_src", - pkt_offset=u"IP.src" - ), - STLVmFlowVar( - name=u"ip_dst", - min_value=self.p2_dst_start_ip, - max_value=self.p2_dst_end_ip, - size=4, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1000u15p.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1000u15p.py deleted file mode 100644 index b7b364f195..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1000u15p.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / UDP - - Direction 0 --> 1: - - Source IP address range: 20.0.0.0 - 20.0.3.231 - - Destination IP address range: 12.0.0.2 - - Source UDP port range: 1024 - 1038 - - Destination UDP port range: 1024 - - Direction 1 --> 0: - - Source IP address range: 12.0.0.2 - - Destination IP address range: 200.0.0.0 - - Source UDP port range: 1024 - - Destination UDP port range: 1024 - 16023 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"20.0.0.0" - self.p1_src_end_ip = u"20.0.3.231" - self.p1_dst_start_ip = u"12.0.0.2" - - self.p2_src_start_ip = u"12.0.0.2" - self.p2_src_end_ip = u"12.0.0.2" - self.p2_dst_start_ip = u"200.0.0.0" - - # UDP ports used in packet headers. - self.p1_src_start_udp_port = 1024 - self.p1_src_end_udp_port = 1038 - self.p1_dst_start_udp_port = 1024 - - self.p2_src_start_udp_port = 1024 - self.p2_dst_start_udp_port = 1024 - self.p2_dst_end_udp_port = 16023 - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | UDP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=17 - ) / - UDP( - sport=self.p1_src_start_udp_port, - dport=self.p1_dst_start_udp_port - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=17 - ) / - UDP( - sport=self.p2_src_start_udp_port, - dport=self.p2_dst_start_udp_port - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmTupleGen( - ip_min=self.p1_src_start_ip, - ip_max=self.p1_src_end_ip, - port_min=self.p1_src_start_udp_port, - port_max=self.p1_src_end_udp_port, - name=u"tuple" - ), - STLVmWrFlowVar( - fv_name=u"tuple.ip", - pkt_offset=u"IP.src" - ), - STLVmFixIpv4( - offset=u"IP" - ), - STLVmWrFlowVar( - fv_name=u"tuple.port", - pkt_offset=u"UDP.sport" - ) - ] - ) - # Direction 0 --> 1 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"dport", - min_value=self.p2_dst_start_udp_port, - max_value=self.p2_dst_end_udp_port, - size=2, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"dport", - pkt_offset=u"UDP.dport" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u1000p-conc.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u1000p-conc.py deleted file mode 100644 index 9032a8c2f5..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u1000p-conc.py +++ /dev/null @@ -1,189 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / UDP - - Direction 0 --> 1: - - Source IP address range: 10.10.10.2 - 10.10.10.11 - - Destination IP address range: 20.20.20.2 - 20.20.20.11 - - Source UDP port range: 1001 - 2000 - - Destination UDP port range: 2001 - 3000 - - Direction 1 --> 0: - - Source IP address range: 20.20.20.2 - 20.20.20.11 - - Destination IP address range: 10.10.10.2 - 10.10.10.11 - - Source UDP port range: 2001 - 3000 - - Destination UDP port range: 1001 - 2000 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"10.10.10.2" - self.p1_src_end_ip = u"10.10.10.11" - self.p1_dst_start_ip = u"20.20.20.2" - self.p1_dst_end_ip = u"20.20.20.11" - - self.p2_src_start_ip = u"20.20.20.2" - self.p2_src_end_ip = u"20.20.20.11" - self.p2_dst_start_ip = u"10.10.10.2" - self.p2_dst_end_ip = u"10.10.10.11" - - # UDP ports used in packet headers. - self.p1_src_start_udp_port = 1001 - self.p1_src_end_udp_port = 2000 - self.p1_dst_start_udp_port = 2001 - self.p1_dst_end_udp_port = 3000 - - self.p2_src_start_udp_port = 2001 - self.p2_src_end_udp_port = 3000 - self.p2_dst_start_udp_port = 1001 - self.p2_dst_end_udp_port = 2000 - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IP | UDP | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IP( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip, - proto=17 - ) / - UDP( - sport=self.p1_src_start_udp_port, - dport=self.p1_dst_start_udp_port - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IP( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip, - proto=17 - ) / - UDP( - sport=self.p2_src_start_udp_port, - dport=self.p2_dst_start_udp_port - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmTupleGen( - ip_min=self.p1_src_start_ip, - ip_max=self.p1_src_end_ip, - port_min=self.p1_src_start_udp_port, - port_max=self.p1_src_end_udp_port, - name=u"tuple1_src" - ), - STLVmTupleGen( - ip_min=self.p1_dst_start_ip, - ip_max=self.p1_dst_end_ip, - port_min=self.p1_dst_start_udp_port, - port_max=self.p1_dst_end_udp_port, - name=u"tuple1_dst" - ), - STLVmWrFlowVar( - fv_name=u"tuple1_src.ip", - pkt_offset=u"IP.src" - ), - STLVmWrFlowVar( - fv_name=u"tuple1_dst.ip", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ), - STLVmWrFlowVar( - fv_name=u"tuple1_src.port", - pkt_offset=u"UDP.sport" - ), - STLVmWrFlowVar( - fv_name=u"tuple1_dst.port", - pkt_offset=u"UDP.dport" - ) - ] - ) - # Direction 0 --> 1 - vm2 = STLScVmRaw( - [ - STLVmTupleGen( - ip_min=self.p2_src_start_ip, - ip_max=self.p2_src_end_ip, - port_min=self.p2_src_start_udp_port, - port_max=self.p2_src_end_udp_port, - name=u"tuple2_src" - ), - STLVmTupleGen( - ip_min=self.p2_dst_start_ip, - ip_max=self.p2_dst_end_ip, - port_min=self.p2_dst_start_udp_port, - port_max=self.p2_dst_end_udp_port, - name=u"tuple2_dst" - ), - STLVmWrFlowVar( - fv_name=u"tuple2_src.ip", - pkt_offset=u"IP.src" - ), - STLVmWrFlowVar( - fv_name=u"tuple2_dst.ip", - pkt_offset=u"IP.dst" - ), - STLVmFixIpv4( - offset=u"IP" - ), - STLVmWrFlowVar( - fv_name=u"tuple2_src.port", - pkt_offset=u"UDP.sport" - ), - STLVmWrFlowVar( - fv_name=u"tuple2_dst.port", - pkt_offset=u"UDP.dport" - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst10000.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst10000.py deleted file mode 100644 index f1b90350fb..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst10000.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::1 - - Destination IP address range: 2001:2::0 - 2001:2::270F - - Direction 1 --> 0: - - Source IP address range: 2001:2::1 - - Destination IP address range: 2001:1::0 - 2001:1::270F -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::1" - self.p1_dst_start_ip = u"2001:2::0" - self.p1_dst_end_ip = u"2001:2::270F" - - self.p2_src_start_ip = u"2001:2::1" - self.p2_dst_start_ip = u"2001:1::0" - self.p2_dst_end_ip = u"2001:1::270F" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_dst_start_ip, - self.p1_dst_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_dst_start_ip, - self.p2_dst_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst100000.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst100000.py deleted file mode 100644 index 87e76726b2..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst100000.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::1 - - Destination IP address range: 2001:2::0 - 2001:2::1:869F - - Direction 1 --> 0: - - Source IP address range: 2001:2::1 - - Destination IP address range: 2001:1::0 - 2001:1::1:869F -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::1" - self.p1_dst_start_ip = u"2001:2::0" - self.p1_dst_end_ip = u"2001:2::1:869F" - - self.p2_src_start_ip = u"2001:2::1" - self.p2_dst_start_ip = u"2001:1::0" - self.p2_dst_end_ip = u"2001:1::1:869F" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_dst_start_ip, - self.p1_dst_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_dst_start_ip, - self.p2_dst_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst1000000.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst1000000.py deleted file mode 100644 index c6870d89fa..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6dst1000000.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::1 - - Destination IP address range: 2001:2::0 - 2001:2::F:423F - - Direction 1 --> 0: - - Source IP address range: 2001:2::1 - - Destination IP address range: 2001:1::0 - 2001:1::F:423F -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::1" - self.p1_dst_start_ip = u"2001:2::0" - self.p1_dst_end_ip = u"2001:2::F:423F" - - self.p2_src_start_ip = u"2001:2::1" - self.p2_dst_start_ip = u"2001:1::0" - self.p2_dst_end_ip = u"2001:1::F:423F" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_dst_start_ip, - self.p1_dst_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_dst_start_ip, - self.p2_dst_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_dst", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_dst", - pkt_offset=u"IPv6.dst", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6src253.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6src253.py deleted file mode 100644 index fbe8b94ab3..0000000000 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip6-ip6src253.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 2020 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Stream profile for T-rex traffic generator. - -Stream profile: - - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IPv6 / - - Direction 0 --> 1: - - Source IP address range: 2001:1::2 - 2001:1::FE - - Destination IP address range: 2001:2::2 - - Direction 1 --> 0: - - Source IP address range: 2001:2::2 - 2001:2::FE - - Destination IP address range: 2001:1::2 -""" - -from trex.stl.api import * -from profile_trex_stateless_base_class import TrafficStreamsBaseClass - - -class TrafficStreams(TrafficStreamsBaseClass): - """Stream profile.""" - - def __init__(self): - """Initialization and setting of streams' parameters.""" - - super(TrafficStreamsBaseClass, self).__init__() - - # IPs used in packet headers. - self.p1_src_start_ip = u"2001:1::2" - self.p1_src_end_ip = u"2001:1::FE" - self.p1_dst_start_ip = u"2001:2::2" - - self.p2_src_start_ip = u"2001:2::2" - self.p2_src_end_ip = u"2001:2::FE" - self.p2_dst_start_ip = u"2001:1::2" - - def define_packets(self): - """Defines the packets to be sent from the traffic generator. - - Packet definition: | ETH | IPv6 | - - :returns: Packets to be sent from the traffic generator. - :rtype: tuple - """ - - base_p1, count_p1 = self._get_start_end_ipv6( - self.p1_src_start_ip, - self.p1_src_end_ip - ) - base_p2, count_p2 = self._get_start_end_ipv6( - self.p2_src_start_ip, - self.p2_src_end_ip - ) - - # Direction 0 --> 1 - base_pkt_a = ( - Ether() / - IPv6( - src=self.p1_src_start_ip, - dst=self.p1_dst_start_ip - ) - ) - # Direction 1 --> 0 - base_pkt_b = ( - Ether() / - IPv6( - src=self.p2_src_start_ip, - dst=self.p2_dst_start_ip - ) - ) - - # Direction 0 --> 1 - vm1 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_src", - min_value=base_p1, - max_value=base_p1 + count_p1, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_src", - pkt_offset=u"IPv6.src", - offset_fixup=8 - ) - ] - ) - # Direction 1 --> 0 - vm2 = STLScVmRaw( - [ - STLVmFlowVar( - name=u"ipv6_src", - min_value=base_p2, - max_value=base_p2 + count_p2, - size=8, - op=u"inc" - ), - STLVmWrFlowVar( - fv_name=u"ipv6_src", - pkt_offset=u"IPv6.src", - offset_fixup=8 - ) - ] - ) - - return base_pkt_a, base_pkt_b, vm1, vm2 - - -def register(): - """Register this traffic profile to T-rex. - - Do not change this function. - - :return: Traffic streams. - :rtype: Object - """ - return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan100ip4src254ip4dst254.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan100ip4src254ip4dst254.py index b414bd1c7a..45f2f6c9e9 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan100ip4src254ip4dst254.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan100ip4src254ip4dst254.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan10ip4src254ip4dst254.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan10ip4src254ip4dst254.py index d878e2d726..5b8afc3336 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan10ip4src254ip4dst254.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan10ip4src254ip4dst254.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan1ip4src254ip4dst254.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254-2.py index c8f279bdb3..f5a8050ae2 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan1ip4src254ip4dst254.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254-2.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254-bvi.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254-bvi.py index 28ec10bf8b..54e4c6470e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254-bvi.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254-bvi.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254.py index 6ce351968c..3561850068 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1ip4src254ip4dst254.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan1kip4src254ip4dst254.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1kip4src254ip4dst254.py index 02decf4284..58aab36e26 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-dot1qip4-vlan1kip4src254ip4dst254.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4-vlan1kip4src254ip4dst254.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src254.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4asym-ip4src254.py index fc6167d126..f95ebc371b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src254.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4asym-ip4src254.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -15,11 +25,12 @@ Stream profile: - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / - Direction 0 --> 1: + - Packet: ETH / IP / - Source IP address range: 10.10.10.1 - 10.10.10.254 - Destination IP address range: 20.20.20.1 - Direction 1 --> 0: + - Packet: ETH / DOT1Q / IP / - Source IP address range: 20.20.20.1 - 20.20.20.254 - Destination IP address range: 10.10.10.1 """ @@ -36,6 +47,9 @@ class TrafficStreams(TrafficStreamsBaseClass): super(TrafficStreamsBaseClass, self).__init__() + # VLAN ID + self.vlan_id = 10 + # IPs used in packet headers. self.p1_src_start_ip = u"10.10.10.1" self.p1_src_end_ip = u"10.10.10.254" @@ -66,6 +80,9 @@ class TrafficStreams(TrafficStreamsBaseClass): # Direction 1 --> 0 base_pkt_b = ( Ether() / + Dot1Q( + vlan=self.vlan_id + ) / IP( src=self.p2_src_start_ip, dst=self.p2_dst_start_ip, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src10udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src10udpsrcrnd.py index 32ca072154..ed2181ef3e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src10udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src10udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src1udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src1udpsrcrnd.py index 1e78cd3cae..077b866b2b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src1udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src1udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src2udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src2udpsrcrnd.py index d195bc5b61..2aff7fa867 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src2udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src2udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src4udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src4udpsrcrnd.py index 8a7bc08b1b..763c56bd0a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src4udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src4udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src6udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src6udpsrcrnd.py index fe46844571..54af270c63 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src6udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src6udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src8udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src8udpsrcrnd.py index cf34818781..0874a5efd6 100644 --- a/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src8udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip4vxlan-ip4src8udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -50,7 +60,7 @@ _VXLAN_FLAGS = list(u"R"*24 + u"RRRIRRRRR") class VXLAN(Packet): - name=u"VXLAN" + name = u"VXLAN" fields_desc = [ FlagsField(u"flags", 0x08000000, 32, _VXLAN_FLAGS), ThreeBytesField(u"vni", 0), @@ -285,4 +295,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-dot1qip6asym-ip6src253.py b/GPL/traffic_profiles/trex/trex-stl-dot1qip6asym-ip6src253.py index f2e9e81920..d8c0aa3fdd 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-dot1qip6asym-ip6src253.py +++ b/GPL/traffic_profiles/trex/trex-stl-dot1qip6asym-ip6src253.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-1024t.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-1024t.py new file mode 100644 index 0000000000..4613283605 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-1024t.py @@ -0,0 +1,231 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Direction 0 --> 1: + - Packet: ETH / IP + - Source IP address range: 10.128.1.0 - 10.132.0.255 + - Destination IP address range: 10.0.1.0 - 10.4.0.255 + - Direction 1 --> 0: + - Packet: ETH / IP / UDP / GENEVE / ETH / IP + - Outer Source IP address range: 1.1.1.1 + - Outer Destination IP address range: 1.1.1.2 + - Inner Source IP address range: 10.0.1.0 - 10.4.0.255 + - Inner Destination IP address range: 10.128.1.0 - 10.132.0.255 + - Source UDP port range: 1024 - 65535 + - Destination UDP port range: 6081 +""" + +from ctypes import c_int +from ipaddress import IPv4Address + +from trex.stl.api import * +from scapy.contrib.geneve import GENEVE + +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # Nr. of GENEVE tunnels + self.n_tunnels = 1024 + # VNIs used in GENEVE headers of Direction 1 --> 0. + self.p2_geneve_start_vni = 1 + + # IPs used in packet headers of Direction 0 --> 1. + self.p1_src_start_ip = u"10.128.1.0" + self.p1_dst_start_ip = u"10.0.1.0" + + # IPs used in packet headers of Direction 1 --> 0. + self.p2_outer_src_ip = u"1.1.1.1" + self.p2_outer_dst_ip = u"1.1.1.2" + + self.p2_inner_src_start_ip = u"10.0.1.0" + self.p2_inner_dst_start_ip = u"10.128.1.0" + + # MACs used in inner ethernet header of Direction 1 --> 0. + self.p2_inner_dst_mac = u"d0:0b:ee:d0:00:00" + + # UDP ports used in packet headers of Direction 1 --> 0. + self.p2_udp_sport_start = 1024 + self.p2_udp_dport = 6081 + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | UDP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + p1_src_start_ip_int = int(IPv4Address(self.p1_src_start_ip)) + p1_dst_start_ip_int = int(IPv4Address(self.p1_dst_start_ip)) + p2_inner_src_start_ip_int = int(IPv4Address(self.p2_inner_src_start_ip)) + p2_inner_dst_start_ip_int = int(IPv4Address(self.p2_inner_dst_start_ip)) + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_outer_src_ip, + dst=self.p2_outer_dst_ip, + proto=17 + ) / + UDP( + sport=self.p2_udp_sport_start, + dport=self.p2_udp_dport + ) / + GENEVE(vni=self.p2_geneve_start_vni) / + Ether(dst=self.p2_inner_dst_mac) / + IP( + src=self.p2_inner_src_start_ip, + dst=self.p2_inner_dst_start_ip, + proto=61 + ) + ) + base_pkt_b /= Raw(load=self._gen_payload(110 - len(base_pkt_b))) + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=p1_src_start_ip_int, + max_value=p1_src_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=p1_dst_start_ip_int, + max_value=p1_dst_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip", + min_value=0, + max_value=self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_src_start_ip_int, + pkt_offset=u"IP:1.src" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_dst_start_ip_int, + pkt_offset=u"IP:1.dst" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=2, + mask=0xffff, + add_value=self.p2_udp_sport_start, + pkt_offset=u"UDP.sport" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff00, + add_value=(self.p2_geneve_start_vni << 8), + pkt_offset=u"GENEVE.vni" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff, + shift=-8, + offset_fixup=2, + add_value=c_int( + int( + self.p2_inner_dst_mac.replace(u":", u"")[6:12], 16 + ) << 8 + ).value, + pkt_offset=u"Ether:1.dst" + ), + STLVmFixIpv4( + offset=u"IP:1" + ), + STLVmFixIpv4( + offset=u"IP" + ), + STLVmFixChecksumHw( + l3_offset=u"IP", + l4_offset=u"UDP", + l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-16t.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-16t.py new file mode 100644 index 0000000000..48c4e75401 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-16t.py @@ -0,0 +1,231 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Direction 0 --> 1: + - Packet: ETH / IP + - Source IP address range: 10.128.1.0 - 10.128.17.255 + - Destination IP address range: 10.0.1.0 - 10.0.17.255 + - Direction 1 --> 0: + - Packet: ETH / IP / UDP / GENEVE / ETH / IP + - Outer Source IP address range: 1.1.1.1 + - Outer Destination IP address range: 1.1.1.2 + - Inner Source IP address range: 10.0.1.0 - 10.0.17.255 + - Inner Destination IP address range: 10.128.1.0 - 10.128.17.255 + - Source UDP port range: 1024 - 5119 + - Destination UDP port range: 6081 +""" + +from ctypes import c_int +from ipaddress import IPv4Address + +from scapy.contrib.geneve import GENEVE +from trex.stl.api import * + +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # Nr. of GENEVE tunnels + self.n_tunnels = 16 + # VNIs used in GENEVE headers of Direction 1 --> 0. + self.p2_geneve_start_vni = 1 + + # IPs used in packet headers of Direction 0 --> 1. + self.p1_src_start_ip = u"10.128.1.0" + self.p1_dst_start_ip = u"10.0.1.0" + + # IPs used in packet headers of Direction 1 --> 0. + self.p2_outer_src_ip = u"1.1.1.1" + self.p2_outer_dst_ip = u"1.1.1.2" + + self.p2_inner_src_start_ip = u"10.0.1.0" + self.p2_inner_dst_start_ip = u"10.128.1.0" + + # MACs used in inner ethernet header of Direction 1 --> 0. + self.p2_inner_dst_mac = u"d0:0b:ee:d0:00:00" + + # UDP ports used in packet headers of Direction 1 --> 0. + self.p2_udp_sport_start = 1024 + self.p2_udp_dport = 6081 + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | UDP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + p1_src_start_ip_int = int(IPv4Address(self.p1_src_start_ip)) + p1_dst_start_ip_int = int(IPv4Address(self.p1_dst_start_ip)) + p2_inner_src_start_ip_int = int(IPv4Address(self.p2_inner_src_start_ip)) + p2_inner_dst_start_ip_int = int(IPv4Address(self.p2_inner_dst_start_ip)) + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_outer_src_ip, + dst=self.p2_outer_dst_ip, + proto=17 + ) / + UDP( + sport=self.p2_udp_sport_start, + dport=self.p2_udp_dport + ) / + GENEVE(vni=self.p2_geneve_start_vni) / + Ether(dst=self.p2_inner_dst_mac) / + IP( + src=self.p2_inner_src_start_ip, + dst=self.p2_inner_dst_start_ip, + proto=61 + ) + ) + base_pkt_b /= Raw(load=self._gen_payload(110 - len(base_pkt_b))) + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=p1_src_start_ip_int, + max_value=p1_src_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=p1_dst_start_ip_int, + max_value=p1_dst_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip", + min_value=0, + max_value=self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_src_start_ip_int, + pkt_offset=u"IP:1.src" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_dst_start_ip_int, + pkt_offset=u"IP:1.dst" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=2, + mask=0xffff, + add_value=self.p2_udp_sport_start, + pkt_offset=u"UDP.sport" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff00, + add_value=(self.p2_geneve_start_vni << 8), + pkt_offset=u"GENEVE.vni" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff, + shift=-8, + offset_fixup=2, + add_value=c_int( + int( + self.p2_inner_dst_mac.replace(u":", u"")[6:12], 16 + ) << 8 + ).value, + pkt_offset=u"Ether:1.dst" + ), + STLVmFixIpv4( + offset=u"IP:1" + ), + STLVmFixIpv4( + offset=u"IP" + ), + STLVmFixChecksumHw( + l3_offset=u"IP", + l4_offset=u"UDP", + l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-1t.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-1t.py new file mode 100644 index 0000000000..23a32f5177 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-1t.py @@ -0,0 +1,231 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Direction 0 --> 1: + - Packet: ETH / IP + - Source IP address range: 10.128.1.0 - 10.128.1.255 + - Destination IP address range: 10.0.1.0 - 10.0.1.255 + - Direction 1 --> 0: + - Packet: ETH / IP / UDP / GENEVE / ETH / IP + - Outer Source IP address range: 1.1.1.1 + - Outer Destination IP address range: 1.1.1.2 + - Inner Source IP address range: 10.0.1.0 - 10.0.1.255 + - Inner Destination IP address range: 10.128.1.0 - 10.128.1.255 + - Source UDP port range: 1024 - 1279 + - Destination UDP port range: 6081 +""" + +from ctypes import c_int +from ipaddress import IPv4Address + +from scapy.contrib.geneve import GENEVE +from trex.stl.api import * + +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # Nr. of GENEVE tunnels + self.n_tunnels = 1 + # VNIs used in GENEVE headers of Direction 1 --> 0. + self.p2_geneve_start_vni = 1 + + # IPs used in packet headers of Direction 0 --> 1. + self.p1_src_start_ip = u"10.128.1.0" + self.p1_dst_start_ip = u"10.0.1.0" + + # IPs used in packet headers of Direction 1 --> 0. + self.p2_outer_src_ip = u"1.1.1.1" + self.p2_outer_dst_ip = u"1.1.1.2" + + self.p2_inner_src_start_ip = u"10.0.1.0" + self.p2_inner_dst_start_ip = u"10.128.1.0" + + # MACs used in inner ethernet header of Direction 1 --> 0. + self.p2_inner_dst_mac = u"d0:0b:ee:d0:00:00" + + # UDP ports used in packet headers of Direction 1 --> 0. + self.p2_udp_sport_start = 1024 + self.p2_udp_dport = 6081 + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | UDP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + p1_src_start_ip_int = int(IPv4Address(self.p1_src_start_ip)) + p1_dst_start_ip_int = int(IPv4Address(self.p1_dst_start_ip)) + p2_inner_src_start_ip_int = int(IPv4Address(self.p2_inner_src_start_ip)) + p2_inner_dst_start_ip_int = int(IPv4Address(self.p2_inner_dst_start_ip)) + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_outer_src_ip, + dst=self.p2_outer_dst_ip, + proto=17 + ) / + UDP( + sport=self.p2_udp_sport_start, + dport=self.p2_udp_dport + ) / + GENEVE(vni=self.p2_geneve_start_vni) / + Ether(dst=self.p2_inner_dst_mac) / + IP( + src=self.p2_inner_src_start_ip, + dst=self.p2_inner_dst_start_ip, + proto=61 + ) + ) + base_pkt_b /= Raw(load=self._gen_payload(110 - len(base_pkt_b))) + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=p1_src_start_ip_int, + max_value=p1_src_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=p1_dst_start_ip_int, + max_value=p1_dst_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip", + min_value=0, + max_value=self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_src_start_ip_int, + pkt_offset=u"IP:1.src" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_dst_start_ip_int, + pkt_offset=u"IP:1.dst" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=2, + mask=0xffff, + add_value=self.p2_udp_sport_start, + pkt_offset=u"UDP.sport" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff00, + add_value=(self.p2_geneve_start_vni << 8), + pkt_offset=u"GENEVE.vni" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff, + shift=-8, + offset_fixup=2, + add_value=c_int( + int( + self.p2_inner_dst_mac.replace(u":", u"")[6:12], 16 + ) << 8 + ).value, + pkt_offset=u"Ether:1.dst" + ), + STLVmFixIpv4( + offset=u"IP:1" + ), + STLVmFixIpv4( + offset=u"IP" + ), + STLVmFixChecksumHw( + l3_offset=u"IP", + l4_offset=u"UDP", + l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-256t.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-256t.py new file mode 100644 index 0000000000..4d53ea5140 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-256t.py @@ -0,0 +1,231 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Direction 0 --> 1: + - Packet: ETH / IP + - Source IP address range: 10.128.1.0 - 10.129.0.255 + - Destination IP address range: 10.0.1.0 - 10.1.0.255 + - Direction 1 --> 0: + - Packet: ETH / IP / UDP / GENEVE / ETH / IP + - Outer Source IP address range: 1.1.1.1 + - Outer Destination IP address range: 1.1.1.2 + - Inner Source IP address range: 10.0.1.0 - 10.1.0.255 + - Inner Destination IP address range: 10.128.1.0 - 10.129.0.255 + - Source UDP port range: 1024 - 65535 + - Destination UDP port range: 6081 +""" + +from ctypes import c_int +from ipaddress import IPv4Address + +from scapy.contrib.geneve import GENEVE +from trex.stl.api import * + +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # Nr. of GENEVE tunnels + self.n_tunnels = 256 + # VNIs used in GENEVE headers of Direction 1 --> 0. + self.p2_geneve_start_vni = 1 + + # IPs used in packet headers of Direction 0 --> 1. + self.p1_src_start_ip = u"10.128.1.0" + self.p1_dst_start_ip = u"10.0.1.0" + + # IPs used in packet headers of Direction 1 --> 0. + self.p2_outer_src_ip = u"1.1.1.1" + self.p2_outer_dst_ip = u"1.1.1.2" + + self.p2_inner_src_start_ip = u"10.0.1.0" + self.p2_inner_dst_start_ip = u"10.128.1.0" + + # MACs used in inner ethernet header of Direction 1 --> 0. + self.p2_inner_dst_mac = u"d0:0b:ee:d0:00:00" + + # UDP ports used in packet headers of Direction 1 --> 0. + self.p2_udp_sport_start = 1024 + self.p2_udp_dport = 6081 + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | UDP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + p1_src_start_ip_int = int(IPv4Address(self.p1_src_start_ip)) + p1_dst_start_ip_int = int(IPv4Address(self.p1_dst_start_ip)) + p2_inner_src_start_ip_int = int(IPv4Address(self.p2_inner_src_start_ip)) + p2_inner_dst_start_ip_int = int(IPv4Address(self.p2_inner_dst_start_ip)) + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_outer_src_ip, + dst=self.p2_outer_dst_ip, + proto=17 + ) / + UDP( + sport=self.p2_udp_sport_start, + dport=self.p2_udp_dport + ) / + GENEVE(vni=self.p2_geneve_start_vni) / + Ether(dst=self.p2_inner_dst_mac) / + IP( + src=self.p2_inner_src_start_ip, + dst=self.p2_inner_dst_start_ip, + proto=61 + ) + ) + base_pkt_b /= Raw(load=self._gen_payload(110 - len(base_pkt_b))) + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=p1_src_start_ip_int, + max_value=p1_src_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=p1_dst_start_ip_int, + max_value=p1_dst_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip", + min_value=0, + max_value=self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_src_start_ip_int, + pkt_offset=u"IP:1.src" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_dst_start_ip_int, + pkt_offset=u"IP:1.dst" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=2, + mask=0xffff, + add_value=self.p2_udp_sport_start, + pkt_offset=u"UDP.sport" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff00, + add_value=(self.p2_geneve_start_vni << 8), + pkt_offset=u"GENEVE.vni" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff, + shift=-8, + offset_fixup=2, + add_value=c_int( + int( + self.p2_inner_dst_mac.replace(u":", u"")[6:12], 16 + ) << 8 + ).value, + pkt_offset=u"Ether:1.dst" + ), + STLVmFixIpv4( + offset=u"IP:1" + ), + STLVmFixIpv4( + offset=u"IP" + ), + STLVmFixChecksumHw( + l3_offset=u"IP", + l4_offset=u"UDP", + l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-4t.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-4t.py new file mode 100644 index 0000000000..06616e18ec --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-4t.py @@ -0,0 +1,231 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Direction 0 --> 1: + - Packet: ETH / IP + - Source IP address range: 10.128.1.0 - 10.128.4.255 + - Destination IP address range: 10.0.1.0 - 10.0.4.255 + - Direction 1 --> 0: + - Packet: ETH / IP / UDP / GENEVE / ETH / IP + - Outer Source IP address range: 1.1.1.1 + - Outer Destination IP address range: 1.1.1.2 + - Inner Source IP address range: 10.0.1.0 - 10.0.4.255 + - Inner Destination IP address range: 10.128.1.0 - 10.128.4.255 + - Source UDP port range: 1024 - 2047 + - Destination UDP port range: 6081 +""" + +from ctypes import c_int +from ipaddress import IPv4Address + +from scapy.contrib.geneve import GENEVE +from trex.stl.api import * + +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # Nr. of GENEVE tunnels + self.n_tunnels = 4 + # VNIs used in GENEVE headers of Direction 1 --> 0. + self.p2_geneve_start_vni = 1 + + # IPs used in packet headers of Direction 0 --> 1. + self.p1_src_start_ip = u"10.128.1.0" + self.p1_dst_start_ip = u"10.0.1.0" + + # IPs used in packet headers of Direction 1 --> 0. + self.p2_outer_src_ip = u"1.1.1.1" + self.p2_outer_dst_ip = u"1.1.1.2" + + self.p2_inner_src_start_ip = u"10.0.1.0" + self.p2_inner_dst_start_ip = u"10.128.1.0" + + # MACs used in inner ethernet header of Direction 1 --> 0. + self.p2_inner_dst_mac = u"d0:0b:ee:d0:00:00" + + # UDP ports used in packet headers of Direction 1 --> 0. + self.p2_udp_sport_start = 1024 + self.p2_udp_dport = 6081 + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | UDP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + p1_src_start_ip_int = int(IPv4Address(self.p1_src_start_ip)) + p1_dst_start_ip_int = int(IPv4Address(self.p1_dst_start_ip)) + p2_inner_src_start_ip_int = int(IPv4Address(self.p2_inner_src_start_ip)) + p2_inner_dst_start_ip_int = int(IPv4Address(self.p2_inner_dst_start_ip)) + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_outer_src_ip, + dst=self.p2_outer_dst_ip, + proto=17 + ) / + UDP( + sport=self.p2_udp_sport_start, + dport=self.p2_udp_dport + ) / + GENEVE(vni=self.p2_geneve_start_vni) / + Ether(dst=self.p2_inner_dst_mac) / + IP( + src=self.p2_inner_src_start_ip, + dst=self.p2_inner_dst_start_ip, + proto=61 + ) + ) + base_pkt_b /= Raw(load=self._gen_payload(110 - len(base_pkt_b))) + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=p1_src_start_ip_int, + max_value=p1_src_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=p1_dst_start_ip_int, + max_value=p1_dst_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip", + min_value=0, + max_value=self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_src_start_ip_int, + pkt_offset=u"IP:1.src" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_dst_start_ip_int, + pkt_offset=u"IP:1.dst" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=2, + mask=0xffff, + add_value=self.p2_udp_sport_start, + pkt_offset=u"UDP.sport" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff00, + add_value=(self.p2_geneve_start_vni << 8), + pkt_offset=u"GENEVE.vni" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff, + shift=-8, + offset_fixup=2, + add_value=c_int( + int( + self.p2_inner_dst_mac.replace(u":", u"")[6:12], 16 + ) << 8 + ).value, + pkt_offset=u"Ether:1.dst" + ), + STLVmFixIpv4( + offset=u"IP:1" + ), + STLVmFixIpv4( + offset=u"IP" + ), + STLVmFixChecksumHw( + l3_offset=u"IP", + l4_offset=u"UDP", + l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-64t.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-64t.py new file mode 100644 index 0000000000..704ceb84b5 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-geneve-64t.py @@ -0,0 +1,231 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Direction 0 --> 1: + - Packet: ETH / IP + - Source IP address range: 10.128.1.0 - 10.128.65.255 + - Destination IP address range: 10.0.1.0 - 10.0.65.255 + - Direction 1 --> 0: + - Packet: ETH / IP / UDP / GENEVE / ETH / IP + - Outer Source IP address range: 1.1.1.1 + - Outer Destination IP address range: 1.1.1.2 + - Inner Source IP address range: 10.0.1.0 - 10.0.65.255 + - Inner Destination IP address range: 10.128.1.0 - 10.128.65.255 + - Source UDP port range: 1024 - 17407 + - Destination UDP port range: 6081 +""" + +from ctypes import c_int +from ipaddress import IPv4Address + +from scapy.contrib.geneve import GENEVE +from trex.stl.api import * + +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # Nr. of GENEVE tunnels + self.n_tunnels = 64 + # VNIs used in GENEVE headers of Direction 1 --> 0. + self.p2_geneve_start_vni = 1 + + # IPs used in packet headers of Direction 0 --> 1. + self.p1_src_start_ip = u"10.128.1.0" + self.p1_dst_start_ip = u"10.0.1.0" + + # IPs used in packet headers of Direction 1 --> 0. + self.p2_outer_src_ip = u"1.1.1.1" + self.p2_outer_dst_ip = u"1.1.1.2" + + self.p2_inner_src_start_ip = u"10.0.1.0" + self.p2_inner_dst_start_ip = u"10.128.1.0" + + # MACs used in inner ethernet header of Direction 1 --> 0. + self.p2_inner_dst_mac = u"d0:0b:ee:d0:00:00" + + # UDP ports used in packet headers of Direction 1 --> 0. + self.p2_udp_sport_start = 1024 + self.p2_udp_dport = 6081 + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | UDP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + p1_src_start_ip_int = int(IPv4Address(self.p1_src_start_ip)) + p1_dst_start_ip_int = int(IPv4Address(self.p1_dst_start_ip)) + p2_inner_src_start_ip_int = int(IPv4Address(self.p2_inner_src_start_ip)) + p2_inner_dst_start_ip_int = int(IPv4Address(self.p2_inner_dst_start_ip)) + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_outer_src_ip, + dst=self.p2_outer_dst_ip, + proto=17 + ) / + UDP( + sport=self.p2_udp_sport_start, + dport=self.p2_udp_dport + ) / + GENEVE(vni=self.p2_geneve_start_vni) / + Ether(dst=self.p2_inner_dst_mac) / + IP( + src=self.p2_inner_src_start_ip, + dst=self.p2_inner_dst_start_ip, + proto=61 + ) + ) + base_pkt_b /= Raw(load=self._gen_payload(110 - len(base_pkt_b))) + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=p1_src_start_ip_int, + max_value=p1_src_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=p1_dst_start_ip_int, + max_value=p1_dst_start_ip_int + self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip", + min_value=0, + max_value=self.n_tunnels * 256 - 1, + size=4, + op=u"inc" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_src_start_ip_int, + pkt_offset=u"IP:1.src" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffffff, + add_value=p2_inner_dst_start_ip_int, + pkt_offset=u"IP:1.dst" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=2, + mask=0xffff, + add_value=self.p2_udp_sport_start, + pkt_offset=u"UDP.sport" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff00, + add_value=(self.p2_geneve_start_vni << 8), + pkt_offset=u"GENEVE.vni" + ), + STLVmWrMaskFlowVar( + fv_name=u"ip", + pkt_cast_size=4, + mask=0xffffff, + shift=-8, + offset_fixup=2, + add_value=c_int( + int( + self.p2_inner_dst_mac.replace(u":", u"")[6:12], 16 + ) << 8 + ).value, + pkt_offset=u"Ether:1.dst" + ), + STLVmFixIpv4( + offset=u"IP:1" + ), + STLVmFixIpv4( + offset=u"IP" + ), + STLVmFixChecksumHw( + l3_offset=u"IP", + l4_offset=u"UDP", + l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd10000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd10000-2p.py new file mode 100644 index 0000000000..1149a0403b --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd10000-2p.py @@ -0,0 +1,113 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.0.39.15", + "seed": 1 + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.0.39.15", + "seed": 2 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd10000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd10000-6p.py new file mode 100644 index 0000000000..58363b9811 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd10000-6p.py @@ -0,0 +1,141 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.0.39.15", + "seed": 1 + }, + # Direction W --> E: + { + "src_start_ip": "30.0.0.1", + "dst_start_ip": "40.0.0.0", + "dst_end_ip": "40.0.39.15", + "seed": 3 + }, + # Direction W --> E: + { + "src_start_ip": "50.0.0.1", + "dst_start_ip": "60.0.0.0", + "dst_end_ip": "60.0.39.15", + "seed": 5 + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.0.39.15", + "seed": 2 + }, + # Direction E --> W: + { + "src_start_ip": "40.0.0.1", + "dst_start_ip": "30.0.0.0", + "dst_end_ip": "30.0.39.15", + "seed": 4 + }, + # Direction E --> W: + { + "src_start_ip": "60.0.0.1", + "dst_start_ip": "50.0.0.0", + "dst_end_ip": "50.0.39.15", + "seed": 6 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd100000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd100000-2p.py new file mode 100644 index 0000000000..955e394c56 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd100000-2p.py @@ -0,0 +1,113 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.1.134.159", + "seed": 1 + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.1.134.159", + "seed": 2 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd100000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd100000-6p.py new file mode 100644 index 0000000000..d3bc3ce60f --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd100000-6p.py @@ -0,0 +1,141 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.1.134.159", + "seed": 1 + }, + # Direction W --> E: + { + "src_start_ip": "30.0.0.1", + "dst_start_ip": "40.0.0.0", + "dst_end_ip": "40.1.134.159", + "seed": 3 + }, + # Direction W --> E: + { + "src_start_ip": "50.0.0.1", + "dst_start_ip": "60.0.0.0", + "dst_end_ip": "60.1.134.159", + "seed": 5 + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.1.134.159", + "seed": 2 + }, + # Direction E --> W: + { + "src_start_ip": "40.0.0.1", + "dst_start_ip": "30.0.0.0", + "dst_end_ip": "30.1.134.159", + "seed": 4 + }, + # Direction E --> W: + { + "src_start_ip": "60.0.0.1", + "dst_start_ip": "50.0.0.0", + "dst_end_ip": "50.1.134.159", + "seed": 6 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd1000000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd1000000-2p.py new file mode 100644 index 0000000000..3a03303e60 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd1000000-2p.py @@ -0,0 +1,113 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.15.66.63", + "seed": 1 + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.15.66.63", + "seed": 2 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd1000000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd1000000-6p.py new file mode 100644 index 0000000000..c0e6b66101 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst-rnd1000000-6p.py @@ -0,0 +1,141 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.15.66.63", + "seed": 1 + }, + # Direction W --> E: + { + "src_start_ip": "30.0.0.1", + "dst_start_ip": "40.0.0.0", + "dst_end_ip": "40.15.66.63", + "seed": 3 + }, + # Direction W --> E: + { + "src_start_ip": "50.0.0.1", + "dst_start_ip": "60.0.0.0", + "dst_end_ip": "60.15.66.63", + "seed": 5 + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.15.66.63", + "seed": 2 + }, + # Direction E --> W: + { + "src_start_ip": "40.0.0.1", + "dst_start_ip": "30.0.0.0", + "dst_end_ip": "30.15.66.63", + "seed": 4 + }, + # Direction E --> W: + { + "src_start_ip": "60.0.0.1", + "dst_start_ip": "50.0.0.0", + "dst_end_ip": "50.15.66.63", + "seed": 6 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1-udir.py new file mode 100644 index 0000000000..1a52b30510 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1-udir.py @@ -0,0 +1,84 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address: 10.0.0.1 + - Destination IP address: 20.0.0.0 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_ip = u"10.0.0.1" + self.p1_dst_ip = u"20.0.0.0" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_ip, + dst=self.p1_dst_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + return base_pkt_a, base_pkt_b, None, None + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1.py index 0d36b7358f..d73c8519ea 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst100.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100.py index 222b127914..fb45774007 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst100.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-1cnf.py index 1397ae4828..d11f5d5d9b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-2cnf.py index b7f316092a..28756f3a16 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -153,4 +163,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-4cnf.py index a64e4d5a5e..6249612fc4 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-8cnf.py index a58df6e87b..2e7d4d6f44 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-udir.py new file mode 100644 index 0000000000..fbba5d4c3b --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.3.231 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.3.231" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000.py index 8d9ec21a25..554eb0bca4 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-1cnf.py index 53e68de2b9..97ea55a72b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-2cnf.py index ca3f41a6fb..8fc52f134e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-2p.py new file mode 100644 index 0000000000..2dda26ddaf --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-2p.py @@ -0,0 +1,110 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.0.39.15" + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.0.39.15" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + op="inc" + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-4cnf.py index df7572853f..c2a537a638 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-6p.py new file mode 100644 index 0000000000..94a47a8bb6 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-6p.py @@ -0,0 +1,134 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.0.39.15" + }, + # Direction W --> E: + { + "src_start_ip": "30.0.0.1", + "dst_start_ip": "40.0.0.0", + "dst_end_ip": "40.0.39.15" + }, + # Direction W --> E: + { + "src_start_ip": "50.0.0.1", + "dst_start_ip": "60.0.0.0", + "dst_end_ip": "60.0.39.15" + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.0.39.15" + }, + # Direction E --> W: + { + "src_start_ip": "40.0.0.1", + "dst_start_ip": "30.0.0.0", + "dst_end_ip": "30.0.39.15" + }, + # Direction E --> W: + { + "src_start_ip": "60.0.0.1", + "dst_start_ip": "50.0.0.0", + "dst_end_ip": "50.0.39.15" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + op="inc" + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-8cnf.py index 1dbd3feb1a..9b3d280f4a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-udir.py new file mode 100644 index 0000000000..f643f3e3cc --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.39.15 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.39.15" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst10000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000.py index e9d5fb15f6..29ebf97b80 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst10000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst10000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000-2p.py new file mode 100644 index 0000000000..a8d223b854 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000-2p.py @@ -0,0 +1,110 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.1.134.159" + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.1.134.159" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + op="inc" + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000-6p.py new file mode 100644 index 0000000000..76042447ca --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000-6p.py @@ -0,0 +1,134 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.1.134.159" + }, + # Direction W --> E: + { + "src_start_ip": "30.0.0.1", + "dst_start_ip": "40.0.0.0", + "dst_end_ip": "40.1.134.159" + }, + # Direction W --> E: + { + "src_start_ip": "50.0.0.1", + "dst_start_ip": "60.0.0.0", + "dst_end_ip": "60.1.134.159" + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.1.134.159" + }, + # Direction E --> W: + { + "src_start_ip": "40.0.0.1", + "dst_start_ip": "30.0.0.0", + "dst_end_ip": "30.1.134.159" + }, + # Direction E --> W: + { + "src_start_ip": "60.0.0.1", + "dst_start_ip": "50.0.0.0", + "dst_end_ip": "50.1.134.159" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + op="inc" + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst100000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000.py index 5977d36b5b..312deccbc8 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst100000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst100000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000-2p.py new file mode 100644 index 0000000000..f2e7938ff2 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000-2p.py @@ -0,0 +1,110 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.15.66.63" + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.15.66.63" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + op="inc" + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000-6p.py new file mode 100644 index 0000000000..6474b43470 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000-6p.py @@ -0,0 +1,134 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IP / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "10.0.0.1", + "dst_start_ip": "20.0.0.0", + "dst_end_ip": "20.15.66.63" + }, + # Direction W --> E: + { + "src_start_ip": "30.0.0.1", + "dst_start_ip": "40.0.0.0", + "dst_end_ip": "40.15.66.63" + }, + # Direction W --> E: + { + "src_start_ip": "50.0.0.1", + "dst_start_ip": "60.0.0.0", + "dst_end_ip": "60.15.66.63" + }, + # Direction E --> W: + { + "src_start_ip": "20.0.0.1", + "dst_start_ip": "10.0.0.0", + "dst_end_ip": "10.15.66.63" + }, + # Direction E --> W: + { + "src_start_ip": "40.0.0.1", + "dst_start_ip": "30.0.0.0", + "dst_end_ip": "30.15.66.63" + }, + # Direction E --> W: + { + "src_start_ip": "60.0.0.1", + "dst_start_ip": "50.0.0.0", + "dst_end_ip": "50.15.66.63" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Base packets to be sent and transformation function. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + self.pkt_base.append( + Ether() / + IP( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"], + proto=61 + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="dst", + min_value=self.pkt_data[i]["dst_start_ip"], + max_value=self.pkt_data[i]["dst_end_ip"], + size=4, + op="inc" + ), + STLVmWrFlowVar( + fv_name="dst", + pkt_offset="IP.dst" + ), + STLVmFixIpv4( + offset="IP" + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-Rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst1000000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000.py index 8b63b82e4f..909da92426 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4dst1000000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst1000000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst2-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst2-udir.py new file mode 100644 index 0000000000..f86306295b --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst2-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.0.1 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.0.1" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst2.py index 9f55ff71de..864ad19f4e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst10000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst2.py @@ -1,9 +1,18 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -18,10 +27,10 @@ Stream profile: - Packet: ETH / IP / - Direction 0 --> 1: - Source IP address range: 10.0.0.1 - - Destination IP address range: 20.0.0.0 - 20.0.39.15 + - Destination IP address range: 20.0.0.0 - 20.0.0.1 - Direction 1 --> 0: - Source IP address range: 20.0.0.1 - - Destination IP address range: 10.0.0.0 - 10.0.39.15 + - Destination IP address range: 10.0.0.0 - 10.0.0.1 """ from trex.stl.api import * @@ -39,11 +48,11 @@ class TrafficStreams(TrafficStreamsBaseClass): # IPs used in packet headers. self.p1_src_start_ip = u"10.0.0.1" self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.0.39.15" + self.p1_dst_end_ip = u"20.0.0.1" self.p2_src_start_ip = u"20.0.0.1" self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.0.39.15" + self.p2_dst_end_ip = u"10.0.0.1" def define_packets(self): """Defines the packets to be sent from the traffic generator. diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-1cnf.py index f6f6fada5a..f8caca1181 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-2cnf.py index 15cb461624..dc7c0ebc9e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-4cnf.py index 62eb1bee78..84a920463a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-8cnf.py index b6eef29366..f4e9820091 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-udir.py new file mode 100644 index 0000000000..a076477d5f --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.78.31 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.78.31" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000.py index 877e6cdc66..7bedccf9a5 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst20000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst20000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst253.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst253.py index e1e6a89af7..b32433f817 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst253.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst253.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst253_l3fwd.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst253_l3fwd.py index 31e69e07ba..54ff7aba29 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst253_l3fwd.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst253_l3fwd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-1cnf.py index b937d02741..e03627113c 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-2cnf.py index b95649a94d..1f8a8398ae 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-4cnf.py index fed0d7ef3c..ced715c16b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-udir.py new file mode 100644 index 0000000000..5f293a32ec --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.0.3 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.0.3" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4.py index 9f14d4c929..ecec1bf353 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst4.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst4.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-1cnf.py index d321d0ffb2..7c3f6698af 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-2cnf.py index acc565e776..8b76f33152 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -135,7 +145,7 @@ class TrafficStreams(TrafficStreamsBaseClass): STLVmWrFlowVar( fv_name=u"dst", pkt_offset=u"IP.dst" - ), + ), STLVmFixIpv4( offset=u"IP" ) @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-4cnf.py index 629100cb83..21768e9ef0 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-8cnf.py index b51c98d7aa..47f087e11b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-udir.py new file mode 100644 index 0000000000..b76c9e1698 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.0.39 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.0.39" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40.py index 5dbc5fc803..d30d357bc9 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-1cnf.py index 1a004b055f..6ac54334f8 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-2cnf.py index b09e79d7dc..882675afae 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-4cnf.py index 7081525771..35ea970656 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-8cnf.py index c5b1d52e04..1ece5c3e2a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-udir.py new file mode 100644 index 0000000000..68543c8f7e --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.1.143 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.1.143" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400.py index 44db3ec81c..9bd7737be6 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst400.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst400.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-1cnf.py index 038b986b65..5e0fe7d9b0 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-2cnf.py index 5933b33d20..784539c830 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-4cnf.py index 851cd7c870..f478e7001d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-8cnf.py index 40d57f09dd..e31ad2bc74 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-udir.py new file mode 100644 index 0000000000..4e6f271ed4 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.156.63 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.156.63" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000.py index 570a236fd6..5a51902642 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst40000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst40000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-1cnf.py index fb4c61b030..a895626c82 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-2cnf.py index ca13c337cb..e73426590e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-4cnf.py index 1ffd8c8ba5..4461963314 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-8cnf.py index 26efc1a438..d7d2e2d1ec 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-udir.py new file mode 100644 index 0000000000..1d0d52a0a7 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.19.135 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.19.135" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000.py index 95d8380a22..1fe61837d4 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst5000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst5000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst500000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst500000.py new file mode 100644 index 0000000000..051d566b20 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst500000.py @@ -0,0 +1,137 @@ +# Copyright (c) 2023 Intel and/or its affiliates. +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.7.161.31 + - Direction 1 --> 0: + - Source IP address range: 20.0.0.1 + - Destination IP address range: 10.0.0.0 - 10.7.161.31 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.7.161.31" + + self.p2_src_start_ip = u"20.0.0.1" + self.p2_dst_start_ip = u"10.0.0.0" + self.p2_dst_end_ip = u"10.7.161.31" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip, + proto=61 + ) + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p2_dst_start_ip, + max_value=self.p2_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-1cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-1cnf.py index 251758ddae..49d35f1da0 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-1cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-1cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-2cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-2cnf.py index acebf6d06d..a673b0bd98 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-2cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-2cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-4cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-4cnf.py index 3fe3caf128..d9fc1a4718 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-4cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-4cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-8cnf.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-8cnf.py index 84bfb89f0b..3674818810 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000-8cnf.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-8cnf.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -154,4 +164,3 @@ def register(): :rtype: Object """ return TrafficStreams() - diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-udir.py new file mode 100644 index 0000000000..e037734f15 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.234.95 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.234.95" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000.py index 126302d545..e6e13343bb 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst60000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst60000.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -86,7 +96,7 @@ class TrafficStreams(TrafficStreamsBaseClass): STLVmWrFlowVar( fv_name=u"dst", pkt_offset=u"IP.dst" - ), + ), STLVmFixIpv4( offset=u"IP" ) diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst8-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst8-udir.py new file mode 100644 index 0000000000..c6d383cfd8 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst8-udir.py @@ -0,0 +1,107 @@ +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.1 + - Destination IP address range: 20.0.0.0 - 20.0.0.7 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.1" + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.0.7" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw() + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst8.py index 8f6e5a0836..7cbe1f9573 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst1000000.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4dst8.py @@ -1,9 +1,18 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -18,10 +27,10 @@ Stream profile: - Packet: ETH / IP / - Direction 0 --> 1: - Source IP address range: 10.0.0.1 - - Destination IP address range: 20.0.0.0 - 20.15.66.63 + - Destination IP address range: 20.0.0.0 - 20.0.0.7 - Direction 1 --> 0: - Source IP address range: 20.0.0.1 - - Destination IP address range: 10.0.0.0 - 10.15.66.63 + - Destination IP address range: 10.0.0.0 - 10.0.0.7 """ from trex.stl.api import * @@ -39,11 +48,11 @@ class TrafficStreams(TrafficStreamsBaseClass): # IPs used in packet headers. self.p1_src_start_ip = u"10.0.0.1" self.p1_dst_start_ip = u"20.0.0.0" - self.p1_dst_end_ip = u"20.15.66.63" + self.p1_dst_end_ip = u"20.0.0.7" self.p2_src_start_ip = u"20.0.0.1" self.p2_dst_start_ip = u"10.0.0.0" - self.p2_dst_end_ip = u"10.15.66.63" + self.p2_dst_end_ip = u"10.0.0.7" def define_packets(self): """Defines the packets to be sent from the traffic generator. diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src1000ip4dst1000.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src1000ip4dst1000.py new file mode 100644 index 0000000000..8a79cdd7f5 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src1000ip4dst1000.py @@ -0,0 +1,165 @@ +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.0 - 10.3.231.0 + - Destination IP address range: 20.0.0.0 - 20.3.231.0 + - Direction 1 --> 0: + - Source IP address range: 20.0.0.0 - 20.3.231.0 + - Destination IP address range: 10.0.0.0 - 10.3.231.0 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.0" + self.p1_src_end_ip = u"10.3.231.0" + + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.3.231.0" + + self.p2_src_start_ip = u"20.0.0.0" + self.p2_src_end_ip = u"20.3.231.0" + + self.p2_dst_start_ip = u"10.0.0.0" + self.p2_dst_end_ip = u"10.3.231.0" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip, + proto=61 + ) + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p1_src_start_ip, + max_value=self.p1_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p2_src_start_ip, + max_value=self.p2_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p2_dst_start_ip, + max_value=self.p2_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :returns: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src100ip4dst100.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src100ip4dst100.py new file mode 100644 index 0000000000..681e594136 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src100ip4dst100.py @@ -0,0 +1,165 @@ +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.0 - 10.0.99.0 + - Destination IP address range: 20.0.0.0 - 20.0.99.0 + - Direction 1 --> 0: + - Source IP address range: 20.0.0.0 - 20.0.99.0 + - Destination IP address range: 10.0.0.0 - 10.0.99.0 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.0" + self.p1_src_end_ip = u"10.0.99.0" + + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.99.0" + + self.p2_src_start_ip = u"20.0.0.0" + self.p2_src_end_ip = u"20.0.99.0" + + self.p2_dst_start_ip = u"10.0.0.0" + self.p2_dst_end_ip = u"10.0.99.0" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip, + proto=61 + ) + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p1_src_start_ip, + max_value=self.p1_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p2_src_start_ip, + max_value=self.p2_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p2_dst_start_ip, + max_value=self.p2_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :returns: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1u1p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src1ip4dst1.py index a892ec8822..9a33b33522 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1u1p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src1ip4dst1.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -15,17 +25,13 @@ Stream profile: - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. - - Packet: ETH / IP / UDP + - Packet: ETH / IP / - Direction 0 --> 1: - - Source IP address range: 20.0.0.0 - - Destination IP address range: 12.0.0.2 - - Source UDP port range: 1024 - - Destination UDP port range: 1024 + - Source IP address range: 10.0.0.0 + - Destination IP address range: 20.0.0.0 - Direction 1 --> 0: - - Source IP address range: 12.0.0.2 - - Destination IP address range: 200.0.0.0 - - Source UDP port range: 1024 - - Destination UDP port range: 1028 + - Source IP address range: 20.0.0.0 + - Destination IP address range: 10.0.0.0 """ from trex.stl.api import * @@ -41,23 +47,16 @@ class TrafficStreams(TrafficStreamsBaseClass): super(TrafficStreamsBaseClass, self).__init__() # IPs used in packet headers. - self.p1_src_ip = u"20.0.0.0" - self.p1_dst_ip = u"12.0.0.2" - - self.p2_src_ip = u"12.0.0.2" - self.p2_dst_ip = u"200.0.0.0" - - # UDP ports used in packet headers. - self.p1_src_udp_port = 1024 - self.p1_dst_udp_port = 1024 + self.p1_src_ip = u"10.0.0.0" + self.p1_dst_ip = u"20.0.0.0" - self.p2_src_udp_port = 1024 - self.p2_dst_udp_port = 1028 + self.p2_src_ip = u"20.0.0.0" + self.p2_dst_ip = u"10.0.0.0" def define_packets(self): """Defines the packets to be sent from the traffic generator. - Packet definition: | ETH | IP | UDP | + Packet definition: | ETH | IP | :returns: Packets to be sent from the traffic generator. :rtype: tuple @@ -69,11 +68,7 @@ class TrafficStreams(TrafficStreamsBaseClass): IP( src=self.p1_src_ip, dst=self.p1_dst_ip, - proto=17 - ) / - UDP( - sport=self.p1_src_udp_port, - dport=self.p1_dst_udp_port + proto=61 ) ) # Direction 1 --> 0 @@ -82,11 +77,7 @@ class TrafficStreams(TrafficStreamsBaseClass): IP( src=self.p2_src_ip, dst=self.p2_dst_ip, - proto=17 - ) / - UDP( - sport=self.p2_src_udp_port, - dport=self.p2_dst_udp_port + proto=61 ) ) diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src253.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src253.py index 883883ad18..bb287474f7 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src253.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src253.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4src254.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src254.py index fc6167d126..ce0c04f2e7 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-ip4src254.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src254.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src2ip4dst2.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src2ip4dst2.py new file mode 100644 index 0000000000..58d2c0a499 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src2ip4dst2.py @@ -0,0 +1,165 @@ +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.0 - 10.0.1.0 + - Destination IP address range: 20.0.0.0 - 20.0.1.0 + - Direction 1 --> 0: + - Source IP address range: 20.0.0.0 - 20.0.1.0 + - Destination IP address range: 10.0.0.0 - 10.0.1.0 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.0" + self.p1_src_end_ip = u"10.0.1.0" + + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.1.0" + + self.p2_src_start_ip = u"20.0.0.0" + self.p2_src_end_ip = u"20.0.1.0" + + self.p2_dst_start_ip = u"10.0.0.0" + self.p2_dst_end_ip = u"10.0.1.0" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip, + proto=61 + ) + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p1_src_start_ip, + max_value=self.p1_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p2_src_start_ip, + max_value=self.p2_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p2_dst_start_ip, + max_value=self.p2_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :returns: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src4ip4dst4.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src4ip4dst4.py new file mode 100644 index 0000000000..4f517a77ce --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src4ip4dst4.py @@ -0,0 +1,165 @@ +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.0 - 10.0.3.0 + - Destination IP address range: 20.0.0.0 - 20.0.3.0 + - Direction 1 --> 0: + - Source IP address range: 20.0.0.0 - 20.0.3.0 + - Destination IP address range: 10.0.0.0 - 10.0.3.0 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.0" + self.p1_src_end_ip = u"10.0.3.0" + + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.3.0" + + self.p2_src_start_ip = u"20.0.0.0" + self.p2_src_end_ip = u"20.0.3.0" + + self.p2_dst_start_ip = u"10.0.0.0" + self.p2_dst_end_ip = u"10.0.3.0" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip, + proto=61 + ) + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p1_src_start_ip, + max_value=self.p1_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p2_src_start_ip, + max_value=self.p2_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p2_dst_start_ip, + max_value=self.p2_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :returns: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src8ip4dst8.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src8ip4dst8.py new file mode 100644 index 0000000000..d11a7b50b5 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-ip4src8ip4dst8.py @@ -0,0 +1,165 @@ +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IP / + - Direction 0 --> 1: + - Source IP address range: 10.0.0.0 - 10.0.7.0 + - Destination IP address range: 20.0.0.0 - 20.0.7.0 + - Direction 1 --> 0: + - Source IP address range: 20.0.0.0 - 20.0.7.0 + - Destination IP address range: 10.0.0.0 - 10.0.7.0 +""" + +from trex.stl.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = u"10.0.0.0" + self.p1_src_end_ip = u"10.0.7.0" + + self.p1_dst_start_ip = u"20.0.0.0" + self.p1_dst_end_ip = u"20.0.7.0" + + self.p2_src_start_ip = u"20.0.0.0" + self.p2_src_end_ip = u"20.0.7.0" + + self.p2_dst_start_ip = u"10.0.0.0" + self.p2_dst_end_ip = u"10.0.7.0" + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IP | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + # Direction 0 --> 1 + base_pkt_a = ( + Ether() / + IP( + src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip, + proto=61 + ) + ) + # Direction 1 --> 0 + base_pkt_b = ( + Ether() / + IP( + src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip, + proto=61 + ) + ) + + # Direction 0 --> 1 + vm1 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p1_src_start_ip, + max_value=self.p1_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p1_dst_start_ip, + max_value=self.p1_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + # Direction 1 --> 0 + vm2 = STLScVmRaw( + [ + STLVmFlowVar( + name=u"ip_src", + min_value=self.p2_src_start_ip, + max_value=self.p2_src_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_src", + pkt_offset=u"IP.src" + ), + STLVmFlowVar( + name=u"ip_dst", + min_value=self.p2_dst_start_ip, + max_value=self.p2_dst_end_ip, + size=4, + step=256, + op=u"inc" + ), + STLVmWrFlowVar( + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" + ), + STLVmFixIpv4( + offset=u"IP" + ) + ] + ) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :returns: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc100ip4src100.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc100ip4src100.py index b94c56ad6c..8ec4a4b35d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc100ip4src100.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc100ip4src100.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc100kip4src100k.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc100kip4src100k.py index 52eb841ab0..9a3c15de6d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc100kip4src100k.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc100kip4src100k.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc10kip4src10k.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc10kip4src10k.py index 8e959c829d..4968fc718b 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc10kip4src10k.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc10kip4src10k.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc500kdst500k.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc500kdst500k.py index da4348f2a0..36d1a08e1e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc500kdst500k.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc500kdst500k.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -140,11 +150,11 @@ class TrafficStreams(TrafficStreamsBaseClass): op=u"inc" ), STLVmWrFlowVar( - fv_name=u"ip_dst", - pkt_offset=u"IP.dst" + fv_name=u"ip_dst", + pkt_offset=u"IP.dst" ), STLVmFixIpv4( - offset=u"IP" + offset=u"IP" ) ] ) diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc50kdst50k.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc50kdst50k.py index 42e3db6a6f..6d41e67b0d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4-macsrc50kdst50k.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc50kdst50k.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -114,11 +124,11 @@ class TrafficStreams(TrafficStreamsBaseClass): ), STLVmWrFlowVar( fv_name=u"mac_src", - pkt_offset= 8 + pkt_offset=8 ), STLVmWrFlowVar( fv_name=u"mac_dst", - pkt_offset= 2 + pkt_offset=2 ), STLVmFlowVar( name=u"ip_src", @@ -166,11 +176,11 @@ class TrafficStreams(TrafficStreamsBaseClass): ), STLVmWrFlowVar( fv_name=u"mac_src", - pkt_offset= 8 + pkt_offset=8 ), STLVmWrFlowVar( fv_name=u"mac_dst", - pkt_offset= 2 + pkt_offset=2 ), STLVmFlowVar( name=u"ip_src", diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc5kdst5k.py b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc5kdst5k.py index 29df3373d3..0b053795d9 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-macsrc5kdst5k.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4-macsrc5kdst5k.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -115,11 +125,11 @@ class TrafficStreams(TrafficStreamsBaseClass): ), STLVmWrFlowVar( fv_name=u"mac_src", - pkt_offset= 8 + pkt_offset=8 ), STLVmWrFlowVar( fv_name=u"mac_dst", - pkt_offset= 2 + pkt_offset=2 ), STLVmFlowVar( name=u"ip_src", @@ -167,11 +177,11 @@ class TrafficStreams(TrafficStreamsBaseClass): ), STLVmWrFlowVar( fv_name=u"mac_src", - pkt_offset= 8 + pkt_offset=8 ), STLVmWrFlowVar( fv_name=u"mac_dst", - pkt_offset= 2 + pkt_offset=2 ), STLVmFlowVar( name=u"ip_src", diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-1000u15p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1000u15p.py index 64fe1a705f..6e07b5175d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-1000u15p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1000u15p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-100u1000p-conc.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-100u1000p-conc.py index b93cd645ae..4e860edf46 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-100u1000p-conc.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-100u1000p-conc.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-100u15p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-100u15p.py index 31cdc5e628..8f31e90d99 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-100u15p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-100u15p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p-udir.py index bf10bf08d6..30c6440dd8 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p-udir.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p-udir.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p.py index 1b9f483b13..3b920cd3c8 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1024u63p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1048576u63p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1048576u63p.py index 5fbd3a3a4f..a99d78e78d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1048576u63p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1048576u63p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-10u1000p-conc.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-10u1000p-conc.py index 77f05f8af3..aecef71d4c 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-10u1000p-conc.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-10u1000p-conc.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u10p-conc.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-10u10p-conc.py index 29433b3d27..406bce919f 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u10p-conc.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-10u10p-conc.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u15p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-10u15p.py index 57c5b2dcbc..7506012069 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-10u15p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-10u15p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -82,7 +92,7 @@ class TrafficStreams(TrafficStreamsBaseClass): ) # Direction 1 --> 0 base_pkt_b = ( - Ether() / + Ether() / IP( src=self.p2_src_start_ip, dst=self.p2_dst_start_ip, @@ -120,7 +130,7 @@ class TrafficStreams(TrafficStreamsBaseClass): # Direction 0 --> 1 vm2 = STLScVmRaw( [ - STLVmFlowVar( + STLVmFlowVar( name=u"dport", min_value=self.p2_dst_start_udp_port, max_value=self.p2_dst_end_udp_port, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p-udir.py index 2f6718438c..da826809f8 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p-udir.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p-udir.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p.py index 4a8e1a0b8d..1c5d69fcda 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-16384u63p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1u15p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1u15p.py index df9a1642a9..7fba7c4b85 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-1u15p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1u15p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-1u1p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1u1p.py index 4f96ffe342..229ea2218c 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-1u1p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-1u1p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-2000u15p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-2000u15p.py index c96f76aaee..1100bdd3ed 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-2000u15p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-2000u15p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p-udir.py index 200ca40e7a..09f8e88f13 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p-udir.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p-udir.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p.py index 9cd7443b07..406321b7cf 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-262144u63p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-4000u15p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4000u15p.py index c1b3d5ba59..7257dcc62d 100644 --- a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4udp-4000u15p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4000u15p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p-udir.py index f0d553d7c4..7d441bf1e2 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p-udir.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p-udir.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p.py index a180c65902..0c4613b93f 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-4096u63p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p-udir.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p-udir.py index 2b2de3abe3..9f3a1172d4 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p-udir.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p-udir.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p.py index 562b9ee314..be5e990c4e 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-65536u63p.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-lb.py b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-lb.py index df05cbff17..850149fc61 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip4udp-lb.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4udp-lb.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 Intel 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: +# Copyright (c) 2023 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip4vxlan-ip4src1udpsrcrnd.py b/GPL/traffic_profiles/trex/trex-stl-ethip4vxlan-ip4src1udpsrcrnd.py index cd1a0a690c..56a1ee3321 100644 --- a/GPL/traffic_profiles/trex/trex-stl-ethip4vxlan-ip4src1udpsrcrnd.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip4vxlan-ip4src1udpsrcrnd.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd10000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd10000-2p.py new file mode 100644 index 0000000000..e3d39cc31e --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd10000-2p.py @@ -0,0 +1,115 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::270F", + "seed": 1 + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::270F", + "seed": 2 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd10000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd10000-6p.py new file mode 100644 index 0000000000..b5714782e1 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd10000-6p.py @@ -0,0 +1,143 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::270F", + "seed": 1 + }, + # Direction W --> E: + { + "src_start_ip": "2300::1", + "dst_start_ip": "2400::0", + "dst_end_ip": "2400::270F", + "seed": 3 + }, + # Direction W --> E: + { + "src_start_ip": "2500::1", + "dst_start_ip": "2600::0", + "dst_end_ip": "2600::270F", + "seed": 5 + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::270F", + "seed": 2 + }, + # Direction E --> W: + { + "src_start_ip": "2400::1", + "dst_start_ip": "2300::0", + "dst_end_ip": "2300::270F", + "seed": 4 + }, + # Direction E --> W: + { + "src_start_ip": "2600::1", + "dst_start_ip": "2500::0", + "dst_end_ip": "2500::270F", + "seed": 6 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd100000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd100000-2p.py new file mode 100644 index 0000000000..8948e785a4 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd100000-2p.py @@ -0,0 +1,115 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::1:869F", + "seed": 1 + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::1:869F", + "seed": 2 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd100000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd100000-6p.py new file mode 100644 index 0000000000..46e857b788 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd100000-6p.py @@ -0,0 +1,143 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::1:869F", + "seed": 1 + }, + # Direction W --> E: + { + "src_start_ip": "2300::1", + "dst_start_ip": "2400::0", + "dst_end_ip": "2400::1:869F", + "seed": 3 + }, + # Direction W --> E: + { + "src_start_ip": "2500::1", + "dst_start_ip": "2600::0", + "dst_end_ip": "2600::1:869F", + "seed": 5 + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::1:869F", + "seed": 2 + }, + # Direction E --> W: + { + "src_start_ip": "2400::1", + "dst_start_ip": "2300::0", + "dst_end_ip": "2300::1:869F", + "seed": 4 + }, + # Direction E --> W: + { + "src_start_ip": "2600::1", + "dst_start_ip": "2500::0", + "dst_end_ip": "2500::1:869F", + "seed": 6 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd1000000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd1000000-2p.py new file mode 100644 index 0000000000..735888d265 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd1000000-2p.py @@ -0,0 +1,115 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::F:423F", + "seed": 1 + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::F:423F", + "seed": 2 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd1000000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd1000000-6p.py new file mode 100644 index 0000000000..b090e48068 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst-rnd1000000-6p.py @@ -0,0 +1,143 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::F:423F", + "seed": 1 + }, + # Direction W --> E: + { + "src_start_ip": "2300::1", + "dst_start_ip": "2400::0", + "dst_end_ip": "2400::F:423F", + "seed": 3 + }, + # Direction W --> E: + { + "src_start_ip": "2500::1", + "dst_start_ip": "2600::0", + "dst_end_ip": "2600::F:423F", + "seed": 5 + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::F:423F", + "seed": 2 + }, + # Direction E --> W: + { + "src_start_ip": "2400::1", + "dst_start_ip": "2300::0", + "dst_end_ip": "2300::F:423F", + "seed": 4 + }, + # Direction E --> W: + { + "src_start_ip": "2600::1", + "dst_start_ip": "2500::0", + "dst_end_ip": "2500::F:423F", + "seed": 6 + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVarRepeatableRandom( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + seed=self.pkt_data[i]["seed"], + limit=(2**24 - 1) + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst10000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst10000-2p.py new file mode 100644 index 0000000000..7a02aac9f8 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst10000-2p.py @@ -0,0 +1,112 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::270F" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::270F" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + op="inc" + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst10000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst10000-6p.py new file mode 100644 index 0000000000..f72bc2365e --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst10000-6p.py @@ -0,0 +1,136 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::270F" + }, + # Direction W --> E: + { + "src_start_ip": "2300::1", + "dst_start_ip": "2400::0", + "dst_end_ip": "2400::270F" + }, + # Direction W --> E: + { + "src_start_ip": "2500::1", + "dst_start_ip": "2600::0", + "dst_end_ip": "2600::270F" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::270F" + }, + # Direction E --> W: + { + "src_start_ip": "2400::1", + "dst_start_ip": "2300::0", + "dst_end_ip": "2300::270F" + }, + # Direction E --> W: + { + "src_start_ip": "2600::1", + "dst_start_ip": "2500::0", + "dst_end_ip": "2500::270F" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + op="inc" + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst100000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst100000-2p.py new file mode 100644 index 0000000000..11279216a0 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst100000-2p.py @@ -0,0 +1,112 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::1:869F" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::1:869F" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + op="inc" + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst100000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst100000-6p.py new file mode 100644 index 0000000000..f1e0e4c9c7 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst100000-6p.py @@ -0,0 +1,136 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::1:869F" + }, + # Direction W --> E: + { + "src_start_ip": "2300::1", + "dst_start_ip": "2400::0", + "dst_end_ip": "2400::1:869F" + }, + # Direction W --> E: + { + "src_start_ip": "2500::1", + "dst_start_ip": "2600::0", + "dst_end_ip": "2600::1:869F" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::1:869F" + }, + # Direction E --> W: + { + "src_start_ip": "2400::1", + "dst_start_ip": "2300::0", + "dst_end_ip": "2300::1:869F" + }, + # Direction E --> W: + { + "src_start_ip": "2600::1", + "dst_start_ip": "2500::0", + "dst_end_ip": "2500::1:869F" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + op="inc" + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst1000000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst1000000-2p.py new file mode 100644 index 0000000000..0057c8b4b9 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst1000000-2p.py @@ -0,0 +1,112 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::F:423F" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::F:423F" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + op="inc" + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst1000000-6p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst1000000-6p.py new file mode 100644 index 0000000000..4a1307c510 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst1000000-6p.py @@ -0,0 +1,136 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Three parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::F:423F" + }, + # Direction W --> E: + { + "src_start_ip": "2300::1", + "dst_start_ip": "2400::0", + "dst_end_ip": "2400::F:423F" + }, + # Direction W --> E: + { + "src_start_ip": "2500::1", + "dst_start_ip": "2600::0", + "dst_end_ip": "2600::F:423F" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::F:423F" + }, + # Direction E --> W: + { + "src_start_ip": "2400::1", + "dst_start_ip": "2300::0", + "dst_end_ip": "2300::F:423F" + }, + # Direction E --> W: + { + "src_start_ip": "2600::1", + "dst_start_ip": "2500::0", + "dst_end_ip": "2500::F:423F" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8, + op="inc" + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst500000-2p.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst500000-2p.py new file mode 100644 index 0000000000..d85f9a5f54 --- /dev/null +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6dst500000-2p.py @@ -0,0 +1,111 @@ +# Copyright (c) 2024 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Single parallel bi-directional streams sent as W --> E and E --> W + at the same time. + - Packet: ETH / IPv6 / +""" + +from trex.stl.api import * +from profile_trex_stateless_scale_class import TrafficStreamsScaleClass + + +class TrafficStreams(TrafficStreamsScaleClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsScaleClass, self).__init__() + + self.pkt_data = [ + # Direction W --> E: + { + "src_start_ip": "2100::1", + "dst_start_ip": "2200::0", + "dst_end_ip": "2200::7:a11f" + }, + # Direction E --> W: + { + "src_start_ip": "2200::1", + "dst_start_ip": "2100::0", + "dst_end_ip": "2100::7:a11f" + } + ] + self.pkt_base = [] + self.pkt_vm = [] + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + for i in range(len(self.pkt_data)): + base, count = self._get_start_end_ipv6( + self.pkt_data[i]["dst_start_ip"], + self.pkt_data[i]["dst_end_ip"] + ) + + self.pkt_base.append( + Ether() / + IPv6( + src=self.pkt_data[i]["src_start_ip"], + dst=self.pkt_data[i]["dst_start_ip"] + ) + ) + self.pkt_vm.append( + STLScVmRaw( + [ + STLVmFlowVar( + name="ipv6_dst", + min_value=base, + max_value=base + count, + size=8 + ), + STLVmWrFlowVar( + fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8 + ) + ] + ) + ) + + return self.pkt_base, self.pkt_vm + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6src253.py b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6src253.py index 7ac5f75bed..3763a0977a 100644 --- a/GPL/traffic_profiles/trex/trex-stl-2n-ethip6-ip6src253.py +++ b/GPL/traffic_profiles/trex/trex-stl-ethip6-ip6src253.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2023 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_scripts/PacketVerifier.py b/GPL/traffic_scripts/PacketVerifier.py index e05084d66c..974906e439 100644 --- a/GPL/traffic_scripts/PacketVerifier.py +++ b/GPL/traffic_scripts/PacketVerifier.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -66,6 +76,7 @@ import os import select +import time from scapy.all import ETH_P_IP, ETH_P_IPV6, ETH_P_ALL, ETH_P_ARP from scapy.config import conf @@ -322,9 +333,10 @@ def create_gratuitous_arp_request(src_mac, src_ip): def auto_pad(packet): """Pads zeroes at the end of the packet if the total packet length is less - then 64 bytes in case of IPv4 or 78 bytes in case of IPv6. + then 60 bytes in case of IPv4 or 78 bytes in case of IPv6. """ - min_len = 78 if packet.haslayer(IPv6) else 64 + # TODO: add document explaining deduction of FCS part + min_len = 78 if packet.haslayer(IPv6) else 60 pad_layer = Raw if packet.haslayer(Raw) \ else Padding if packet.haslayer(Padding) else None if pad_layer: diff --git a/GPL/traffic_scripts/TrafficScriptArg.py b/GPL/traffic_scripts/TrafficScriptArg.py index b2f7055412..61c6256f7e 100644 --- a/GPL/traffic_scripts/TrafficScriptArg.py +++ b/GPL/traffic_scripts/TrafficScriptArg.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_scripts/ValidIp.py b/GPL/traffic_scripts/ValidIp.py new file mode 100644 index 0000000000..57244119c7 --- /dev/null +++ b/GPL/traffic_scripts/ValidIp.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions simplifying address validation.""" + +import ipaddress + + +def valid_ipv4(ip_address): + """Check IPv4 address. + + :param ip_address: IPv4 address to check. + :type ip_address: str + :returns: True if IP address is correct. + :rtype: bool + """ + try: + ipaddress.IPv4Address(ip_address) + return True + except (AttributeError, ipaddress.AddressValueError): + return False + + +def valid_ipv6(ip_address): + """Check IPv6 address. + + :param ip_address: IPv6 address to check. + :type ip_address: str + :returns: True if IP address is correct. + :rtype: bool + """ + try: + ipaddress.IPv6Address(ip_address) + return True + except (AttributeError, ipaddress.AddressValueError): + return False diff --git a/GPL/traffic_scripts/__init__.py b/GPL/traffic_scripts/__init__.py index a946304019..818c82245a 100644 --- a/GPL/traffic_scripts/__init__.py +++ b/GPL/traffic_scripts/__init__.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_scripts/geneve_tunnel.py b/GPL/traffic_scripts/geneve_tunnel.py new file mode 100644 index 0000000000..be9502c2d4 --- /dev/null +++ b/GPL/traffic_scripts/geneve_tunnel.py @@ -0,0 +1,363 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic script for GENEVE tunnel verification.""" + +import sys + +from ipaddress import ip_address +from scapy.contrib.geneve import GENEVE +from scapy.layers.inet import IP, UDP +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA +from scapy.layers.l2 import Ether +from scapy.packet import Raw + +from .PacketVerifier import RxQueue, TxQueue +from .TrafficScriptArg import TrafficScriptArg + + +def check_geneve( + pkt_recv, ip_layer, outer_src_mac, outer_dst_mac, inner_src_mac, + inner_dst_mac, outer_src_ip, outer_dst_ip, inner_src_ip, inner_dst_ip, + udp_dport, gen_vni): + """Check received GENEVE packet. + + :param pkt_recv: Received packet to verify. + :param ip_layer: Scapy IP or IPv6 layer. + :param outer_src_mac: Outer source MAC address. + :param outer_dst_mac: Outer destination MAC address. + :param inner_src_mac: Inner source MAC address. + :param inner_dst_mac: Inner destination MAC address. + :param outer_src_ip: Outer source IP/IPv6 address. + :param outer_dst_ip: Outer destination IP/IPv6 address. + :param inner_src_ip: Inner source IP/IPv6 address. + :param inner_dst_ip: Inner destination IP/IPv6 address. + :param udp_dport: UDP destination port. + :param gen_vni: GENEVE VNI. + :type pkt_recv: scapy.Ether + :type ip_layer: scapy.layers.inet.IP or scapy.layers.inet6.IPv6 + :type outer_src_mac: str + :type outer_dst_mac: str + :type inner_src_mac: str + :type inner_dst_mac: str + :type outer_src_ip: str + :type outer_dst_ip: str + :type inner_src_ip: str + :type inner_dst_ip: str + :type udp_dport: int + :type gen_vni: int + :raises RuntimeError: If received packet is invalid. + """ + try: + if not isinstance(pkt_recv[0], Ether): + raise RuntimeError( + f"Received packet hasn't outer Ether layer: {pkt_recv!r}" + ) + elif not isinstance(pkt_recv[1], ip_layer): + raise RuntimeError( + f"Received packet hasn't outer {ip_layer.__name__} layer: " + f"{pkt_recv!r}" + ) + elif not isinstance(pkt_recv[2], UDP): + raise RuntimeError( + f"Received packet hasn't UDP layer: {pkt_recv!r}" + ) + elif not isinstance(pkt_recv[3], GENEVE): + raise RuntimeError( + f"Received packet hasn't GENEVE layer: {pkt_recv!r}" + ) + elif not isinstance(pkt_recv[4], Ether): + raise RuntimeError( + f"Received packet hasn't inner Ether layer: {pkt_recv!r}" + ) + elif not isinstance(pkt_recv[5], ip_layer): + raise RuntimeError( + f"Received packet hasn't inner {ip_layer.__name__} layer: " + f"{pkt_recv!r}" + ) + elif not isinstance(pkt_recv[6], Raw): + raise RuntimeError( + f"Received packet hasn't inner Raw layer: {pkt_recv!r}" + ) + except IndexError: + raise RuntimeError( + f"Received packet doesn't contain all layers: {pkt_recv!r}" + ) + + if pkt_recv[Ether].src != outer_src_mac: + raise RuntimeError( + f"Received frame has invalid outer source MAC address: " + f"{pkt_recv[Ether].src} should be: {outer_src_mac}" + ) + + if pkt_recv[Ether].dst != outer_dst_mac: + raise RuntimeError( + f"Received frame has invalid outer destination MAC address: " + f"{pkt_recv[Ether].dst} should be: {outer_dst_mac}" + ) + + if pkt_recv[ip_layer].src != outer_src_ip: + raise RuntimeError( + f"Received packet has invalid outer source address: " + f"{pkt_recv[ip_layer].src} should be: {outer_src_ip}" + ) + + if pkt_recv[ip_layer].dst != outer_dst_ip: + raise RuntimeError( + f"Received packet has invalid outer destination address: " + f"{pkt_recv[ip_layer].dst} should be: {outer_dst_ip}" + ) + + if pkt_recv[UDP].dport != udp_dport: + raise RuntimeError( + f"Received packet has invalid UDP dport: " + f"{pkt_recv[UDP].dport} should be: {udp_dport}" + ) + + if pkt_recv[GENEVE].vni != gen_vni: + raise RuntimeError( + f"Received packet has invalid GENEVE vni: " + f"{pkt_recv[GENEVE].vni} should be: {gen_vni}" + ) + + if pkt_recv[GENEVE].proto != 0x6558: + raise RuntimeError( + f"Received packet has invalid GENEVE protocol number: " + f"{pkt_recv[GENEVE].proto} should be: 0x6558" + ) + + if pkt_recv[Ether:2].src != inner_src_mac: + raise RuntimeError( + f"Received frame has invalid inner source MAC address: " + f"{pkt_recv[Ether:2].src} should be: {inner_src_mac}" + ) + + if pkt_recv[Ether:2].dst != inner_dst_mac: + raise RuntimeError( + f"Received frame has invalid inner destination MAC address: " + f"{pkt_recv[Ether:2].dst} should be: {inner_dst_mac}" + ) + + if pkt_recv[ip_layer:2].src != inner_src_ip: + raise RuntimeError( + f"Received packet has invalid inner source address: " + f"{pkt_recv[ip_layer:2].src} should be: {inner_src_ip}" + ) + + if pkt_recv[ip_layer:2].dst != inner_dst_ip: + raise RuntimeError( + f"Received packet has invalid inner destination address: " + f"{pkt_recv[ip_layer:2].dst} should be: {inner_dst_ip}" + ) + + +def check_ip(pkt_recv, ip_layer, src_mac, dst_mac, src_ip, dst_ip): + """Check received IP/IPv6 packet. + + :param pkt_recv: Received packet to verify. + :param ip_layer: Scapy IP layer. + :param src_mac: Source MAC address. + :param dst_mac: Destination MAC address. + :param src_ip: Source IP/IPv6 address. + :param dst_ip: Destination IP/IPv6 address. + :type pkt_recv: scapy.Ether + :type ip_layer: scapy.layers.inet.IP or scapy.layers.inet6.IPv6 + :type src_mac: str + :type dst_mac: str + :type src_ip: str + :type dst_ip: str + :raises RuntimeError: If received packet is invalid. + """ + if pkt_recv[Ether].src != src_mac: + raise RuntimeError( + f"Received frame has invalid source MAC address: " + f"{pkt_recv[Ether].src} should be: {src_mac}" + ) + + if pkt_recv[Ether].dst != dst_mac: + raise RuntimeError( + f"Received frame has invalid destination MAC address: " + f"{pkt_recv[Ether].dst} should be: {dst_mac}" + ) + + if not pkt_recv.haslayer(ip_layer): + raise RuntimeError( + f"Not an {ip_layer.__name__} packet received: {pkt_recv!r}" + ) + + if pkt_recv[ip_layer].dst != dst_ip: + raise RuntimeError( + f"Received packet has invalid destination {ip_layer.__name__} " + f"address: {pkt_recv[ip_layer.__name__].dst} should be: {dst_ip}" + ) + + if pkt_recv[ip_layer].src != src_ip: + raise RuntimeError( + f"Received packet has invalid destination {ip_layer.__name__} " + f"address: {pkt_recv[ip_layer.__name__].dst} should be: {src_ip}" + ) + + if ip_layer == IP and pkt_recv[ip_layer].proto != 61: + raise RuntimeError( + f"Received packet has invalid IP protocol: " + f"{pkt_recv[ip_layer].proto} should be: 61" + ) + + +def main(): + """Send and receive GENEVE packets.""" + + args = TrafficScriptArg( + [ + u"tx_src_mac", u"tx_dst_mac", u"rx_src_mac", u"rx_dst_mac", + u"tun_local_ip", u"tun_remote_ip", u"tun_vni", u"tun_src_ip", + u"tun_dst_ip" + ] + ) + + tx_txq = TxQueue(args.get_arg(u"tx_if")) + tx_rxq = RxQueue(args.get_arg(u"tx_if")) + rx_txq = TxQueue(args.get_arg(u"rx_if")) + rx_rxq = RxQueue(args.get_arg(u"rx_if")) + + rx_src_mac = args.get_arg(u"rx_src_mac") + rx_dst_mac = args.get_arg(u"rx_dst_mac") + tx_src_mac = args.get_arg(u"tx_src_mac") + tx_dst_mac = args.get_arg(u"tx_dst_mac") + + tun_local_ip = args.get_arg(u"tun_local_ip") + tun_remote_ip = args.get_arg(u"tun_remote_ip") + tun_vni = args.get_arg(u"tun_vni") + tun_src_ip = args.get_arg(u"tun_src_ip") + tun_dst_ip = args.get_arg(u"tun_dst_ip") + + geneve_tunnel_mac = u"d0:0b:ee:d0:00:00" + geneve_udp_dport = 6081 + + tx_sent_packets = list() + src_ip = ip_address(tun_src_ip) + dst_ip = ip_address(tun_dst_ip) + ip_layer = IP if src_ip.version == 4 else IPv6 + tx_ip_pkt = ip_layer(src=src_ip, dst=dst_ip, proto=61) \ + if ip_layer == IP else ip_layer(src=src_ip, dst=dst_ip) + tx_pkt_send = (Ether(src=tx_src_mac, dst=tx_dst_mac) / tx_ip_pkt) + tx_pkt_send /= Raw() + size_limit = 78 if ip_layer == IPv6 else 60 + if len(tx_pkt_send) < size_limit: + tx_pkt_send[Raw].load += b"\0" * (size_limit - len(tx_pkt_send)) + + tx_sent_packets.append(tx_pkt_send) + tx_txq.send(tx_pkt_send) + + while True: + rx_pkt_recv = rx_rxq.recv(2) + + if rx_pkt_recv is None: + raise RuntimeError(f"GENEVE packet Rx timeout") + + if rx_pkt_recv.haslayer(ICMPv6ND_NS): + # read another packet in the queue if the current one is ICMPv6ND_NS + continue + elif rx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif rx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break + + check_geneve( + rx_pkt_recv, ip_layer, rx_src_mac, rx_dst_mac, geneve_tunnel_mac, + rx_dst_mac, tun_local_ip, tun_remote_ip, str(src_ip), str(dst_ip), + geneve_udp_dport, int(tun_vni) + ) + + rx_inner_ip_pkt = IP( + src=rx_pkt_recv[Ether:2][IP].dst, + dst=rx_pkt_recv[Ether:2][IP].src, + proto=61 + ) if isinstance(rx_pkt_recv[Ether:2][1], IP) else IPv6( + src=rx_pkt_recv[Ether:2][IPv6].dst, + dst=rx_pkt_recv[Ether:2][IPv6].src + ) + rx_inner_ip_pkt /= Raw() + rx_inner_pkt = ( + Ether(src=rx_pkt_recv[4].dst, dst=rx_pkt_recv[4].src) / + rx_inner_ip_pkt + ) + size_limit = 78 if isinstance(rx_pkt_recv[Ether:2][1], IPv6) else 60 + if len(rx_inner_pkt) < size_limit: + rx_inner_pkt[Raw].load += b"\0" * (size_limit - len(rx_inner_pkt)) + + rx_outer_ip_pkt = IP( + src=rx_pkt_recv[Ether:1][IP].dst, + dst=rx_pkt_recv[Ether:1][IP].src + ) if isinstance(rx_pkt_recv[Ether:1][1], IP) else IPv6( + src=rx_pkt_recv[Ether:1][IPv6].dst, + dst=rx_pkt_recv[Ether:1][IPv6].src + ) + rx_pkt_send = ( + Ether(src=rx_pkt_recv[Ether:1].dst, dst=rx_pkt_recv[Ether:1].src) / + rx_outer_ip_pkt / + UDP(sport=6081, dport=6081) / + GENEVE(vni=rx_pkt_recv[GENEVE].vni) / + rx_inner_pkt + ) + rx_txq.send(rx_pkt_send) + + while True: + tx_pkt_recv = tx_rxq.recv(2, ignore=tx_sent_packets) + ip_layer = IP + + if tx_pkt_recv is None: + raise RuntimeError(f"{ip_layer.__name__} packet Rx timeout") + + if tx_pkt_recv.haslayer(ICMPv6ND_NS): + # read another packet in the queue if the current one is ICMPv6ND_NS + continue + elif tx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif tx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + break + + check_ip( + tx_pkt_recv, ip_layer, tx_dst_mac, tx_src_mac, str(dst_ip), str(src_ip) + ) + + sys.exit(0) + + +if __name__ == u"__main__": + main() diff --git a/GPL/traffic_scripts/ipsec_interface.py b/GPL/traffic_scripts/ipsec_interface.py index 4b7d758be5..e6e90a2598 100644 --- a/GPL/traffic_scripts/ipsec_interface.py +++ b/GPL/traffic_scripts/ipsec_interface.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +29,7 @@ import sys from ipaddress import ip_address from scapy.layers.inet import IP -from scapy.layers.inet6 import IPv6, ICMPv6ND_NS +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.ipsec import SecurityAssociation, ESP from scapy.layers.l2 import Ether from scapy.packet import Raw @@ -201,19 +211,18 @@ def main(): sa_in = SecurityAssociation( ESP, spi=l_spi, crypt_algo=crypto_alg, crypt_key=crypto_key.encode(encoding=u"utf-8"), auth_algo=integ_alg, - auth_key=integ_key.encode(encoding=u"utf-8"), - tunnel_header=tunnel_in + auth_key=integ_key.encode(encoding=u"utf-8"), tunnel_header=tunnel_in ) sa_out = SecurityAssociation( ESP, spi=r_spi, crypt_algo=crypto_alg, crypt_key=crypto_key.encode(encoding=u"utf-8"), auth_algo=integ_alg, - auth_key=integ_key.encode(encoding=u"utf-8"), - tunnel_header=tunnel_out + auth_key=integ_key.encode(encoding=u"utf-8"), tunnel_header=tunnel_out ) sent_packets = list() - tx_pkt_send = (Ether(src=tx_src_mac, dst=tx_dst_mac) / ip_pkt) + tx_pkt_send = ( + Ether(src=tx_src_mac, dst=tx_dst_mac) / ip_pkt) tx_pkt_send /= Raw() size_limit = 78 if ip_layer == IPv6 else 64 if len(tx_pkt_send) < size_limit: @@ -230,23 +239,30 @@ def main(): if rx_pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + if rx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + if rx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break check_ipsec( rx_pkt_recv, ip_layer, rx_src_mac, rx_dst_mac, src_tun, dst_tun, src_ip, dst_ip, sa_in ) - ip_pkt = ip_layer(src=dst_ip, dst=src_ip, proto=61) if ip_layer == IP \ + rx_ip_pkt = ip_layer(src=dst_ip, dst=src_ip, proto=61) if ip_layer == IP \ else ip_layer(src=dst_ip, dst=src_ip) - ip_pkt /= Raw() - if len(ip_pkt) < (size_limit - 14): - ip_pkt[Raw].load += (b"\0" * (size_limit - 14 - len(ip_pkt))) - e_pkt = sa_out.encrypt(ip_pkt) - rx_pkt_send = (Ether(src=rx_dst_mac, dst=rx_src_mac) / - e_pkt) + rx_ip_pkt /= Raw() + if len(rx_ip_pkt) < (size_limit - 14): + rx_ip_pkt[Raw].load += (b"\0" * (size_limit - 14 - len(rx_ip_pkt))) + rx_pkt_send = ( + Ether(src=rx_dst_mac, dst=rx_src_mac) / sa_out.encrypt(rx_ip_pkt)) rx_txq.send(rx_pkt_send) while True: @@ -258,13 +274,18 @@ def main(): if tx_pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + if tx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + if tx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue - check_ip(tx_pkt_recv, ip_layer, tx_dst_mac, tx_src_mac, dst_ip, src_ip) + break - sys.exit(0) + check_ip(tx_pkt_recv, ip_layer, tx_dst_mac, tx_src_mac, dst_ip, src_ip) if __name__ == u"__main__": diff --git a/GPL/traffic_scripts/ipsec_policy.py b/GPL/traffic_scripts/ipsec_policy.py index 9e168ee938..8ba7eb488d 100644 --- a/GPL/traffic_scripts/ipsec_policy.py +++ b/GPL/traffic_scripts/ipsec_policy.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2022 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +29,7 @@ import sys from ipaddress import ip_address from scapy.layers.inet import IP -from scapy.layers.inet6 import IPv6, ICMPv6ND_NS +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.ipsec import SecurityAssociation, ESP from scapy.layers.l2 import Ether from scapy.packet import Raw @@ -118,7 +128,6 @@ def check_ip(pkt_recv, ip_layer, src_ip, dst_ip): ) -# TODO: Pylint says too-many-locals and too-many-statements. Refactor! def main(): """Send and receive IPsec packet.""" @@ -142,16 +151,18 @@ def main(): rx_dst_mac = args.get_arg(u"rx_dst_mac") src_ip = args.get_arg(u"src_ip") dst_ip = args.get_arg(u"dst_ip") + src_tun = args.get_arg(u"src_tun") + dst_tun = args.get_arg(u"dst_tun") crypto_alg = args.get_arg(u"crypto_alg") crypto_key = args.get_arg(u"crypto_key") integ_alg = args.get_arg(u"integ_alg") integ_key = args.get_arg(u"integ_key") l_spi = int(args.get_arg(u"l_spi")) r_spi = int(args.get_arg(u"r_spi")) - src_tun = args.get_arg(u"src_tun") - dst_tun = args.get_arg(u"dst_tun") ip_layer = IP if ip_address(src_ip).version == 4 else IPv6 + ip_pkt = ip_layer(src=src_ip, dst=dst_ip, proto=61) if ip_layer == IP \ + else ip_layer(src=src_ip, dst=dst_ip) tunnel_out = ip_layer(src=src_tun, dst=dst_tun) if src_tun and dst_tun \ else None @@ -173,16 +184,14 @@ def main(): auth_key=integ_key.encode(encoding=u"utf-8"), tunnel_header=tunnel_out ) - ip_pkt = ip_layer(src=src_ip, dst=dst_ip, proto=61) if ip_layer == IP \ - else ip_layer(src=src_ip, dst=dst_ip) - ip_pkt = ip_layer(ip_pkt) - - e_pkt = sa_out.encrypt(ip_pkt) - tx_pkt_send = (Ether(src=tx_src_mac, dst=tx_dst_mac) / - e_pkt) - sent_packets = list() + tx_pkt_send = ( + Ether(src=tx_src_mac, dst=tx_dst_mac) / sa_out.encrypt(ip_pkt)) + tx_pkt_send /= Raw() + size_limit = 78 if ip_layer == IPv6 else 64 + if len(tx_pkt_send) < (size_limit - 14): + tx_pkt_send[Raw].load += (b"\0" * (size_limit - 14 - len(tx_pkt_send))) sent_packets.append(tx_pkt_send) tx_txq.send(tx_pkt_send) @@ -195,36 +204,52 @@ def main(): if rx_pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + if rx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + if rx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break - check_ip(rx_pkt_recv, ip_layer, src_ip, dst_ip) + check_ip( + rx_pkt_recv, ip_layer, src_ip, dst_ip + ) rx_ip_pkt = ip_layer(src=dst_ip, dst=src_ip, proto=61) if ip_layer == IP \ else ip_layer(src=dst_ip, dst=src_ip) - rx_pkt_send = (Ether(src=rx_dst_mac, dst=rx_src_mac) / - rx_ip_pkt) - + rx_pkt_send = ( + Ether(src=rx_dst_mac, dst=rx_src_mac) / rx_ip_pkt) rx_pkt_send /= Raw() + if len(rx_pkt_send) < size_limit: + rx_pkt_send[Raw].load += (b"\0" * (size_limit - len(rx_pkt_send))) rx_txq.send(rx_pkt_send) while True: - tx_pkt_recv = tx_rxq.recv(2, sent_packets) + tx_pkt_recv = tx_rxq.recv(2, ignore=sent_packets) if tx_pkt_recv is None: - raise RuntimeError(u"ESP packet Rx timeout") + raise RuntimeError(f"{ip_layer.name} packet Rx timeout") if tx_pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + if tx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + if tx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue - check_ipsec(tx_pkt_recv, ip_layer, src_tun, dst_ip, src_ip, sa_in) + break - sys.exit(0) + check_ipsec(tx_pkt_recv, ip_layer, src_tun, dst_ip, src_ip, sa_in) if __name__ == u"__main__": diff --git a/GPL/traffic_scripts/lisp/__init__.py b/GPL/traffic_scripts/lisp/__init__.py index eef4a31bb0..f2a7e21014 100644 --- a/GPL/traffic_scripts/lisp/__init__.py +++ b/GPL/traffic_scripts/lisp/__init__.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_scripts/lisp/lisp_check.py b/GPL/traffic_scripts/lisp/lisp_check.py index 1bdafb799a..6a5e85c869 100644 --- a/GPL/traffic_scripts/lisp/lisp_check.py +++ b/GPL/traffic_scripts/lisp/lisp_check.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -18,18 +28,18 @@ a LISP-encapsulated packet on the other interface and verifies received packet. """ import sys -import ipaddress from scapy.all import bind_layers, Packet from scapy.fields import FlagsField, BitField, IntField from scapy.layers.inet import ICMP, IP, UDP from scapy.layers.inet6 import ICMPv6EchoRequest -from scapy.layers.inet6 import IPv6 +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.l2 import Ether from scapy.packet import Raw from ..PacketVerifier import RxQueue, TxQueue from ..TrafficScriptArg import TrafficScriptArg +from ..ValidIp import valid_ipv4, valid_ipv6 class LispHeader(Packet): @@ -56,26 +66,11 @@ class LispInnerIPv6(IPv6): name = u"Lisp Inner Layer - IPv6" -def valid_ipv4(ip): - try: - ipaddress.IPv4Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - -def valid_ipv6(ip): - try: - ipaddress.IPv6Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - def main(): """Send IP ICMP packet from one traffic generator interface to the other. - :raises RuntimeError: If the received packet is not correct.""" + :raises RuntimeError: If the received packet is not correct. + """ args = TrafficScriptArg( [ @@ -123,13 +118,29 @@ def main(): sent_packets.append(pkt_raw) txq.send(pkt_raw) - if tx_if == rx_if: - ether = rxq.recv(2, ignore=sent_packets) - else: - ether = rxq.recv(2) - - if ether is None: - raise RuntimeError(u"ICMP echo Rx timeout") + while True: + if tx_if == rx_if: + ether = rxq.recv(2, ignore=sent_packets) + else: + ether = rxq.recv(2) + + if ether is None: + raise RuntimeError(u"ICMP echo Rx timeout") + + if ether.haslayer(ICMPv6ND_NS): + # read another packet in the queue if the current one is ICMPv6ND_NS + continue + elif ether.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif ether.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src: print(u"MAC addresses match.") @@ -145,7 +156,7 @@ def main(): if not isinstance(ip, IPv6): raise RuntimeError(f"Not an IP packet received {ip!r}") elif not isinstance(ip, ip_format): - raise RuntimeError(f"Not an IP packet received {ip!r}") + raise RuntimeError(f"Not an IP packet received {ip!r}") lisp = ether.getlayer(lisp_layer) if not lisp: diff --git a/GPL/traffic_scripts/lisp/lispgpe_check.py b/GPL/traffic_scripts/lisp/lispgpe_check.py index 27a83f5701..cffb486cdf 100644 --- a/GPL/traffic_scripts/lisp/lispgpe_check.py +++ b/GPL/traffic_scripts/lisp/lispgpe_check.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -19,18 +29,18 @@ packet. """ import sys -import ipaddress from scapy.all import bind_layers, Packet from scapy.fields import FlagsField, BitField, XBitField, IntField from scapy.layers.inet import ICMP, IP, UDP from scapy.layers.inet6 import ICMPv6EchoRequest -from scapy.layers.inet6 import IPv6 +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.l2 import Ether from scapy.packet import Raw from ..PacketVerifier import RxQueue, TxQueue from ..TrafficScriptArg import TrafficScriptArg +from ..ValidIp import valid_ipv4, valid_ipv6 class LispGPEHeader(Packet): @@ -82,22 +92,6 @@ class LispGPEInnerNSH(Packet): """ -def valid_ipv4(ip): - try: - ipaddress.IPv4Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - -def valid_ipv6(ip): - try: - ipaddress.IPv6Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - def main(): """Send IP ICMP packet from one traffic generator interface to the other. @@ -146,13 +140,28 @@ def main(): sent_packets.append(pkt_raw) txq.send(pkt_raw) - if tx_if == rx_if: - ether = rxq.recv(2, ignore=sent_packets) - else: - ether = rxq.recv(2) - - if ether is None: - raise RuntimeError(u"ICMP echo Rx timeout") + while True: + if tx_if == rx_if: + ether = rxq.recv(2, ignore=sent_packets) + else: + ether = rxq.recv(2) + + if ether is None: + raise RuntimeError(u"ICMP echo Rx timeout") + + if ether.haslayer(ICMPv6ND_NS): + # read another packet in the queue if the current one is ICMPv6ND_NS + continue + if ether.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is ICMPv6ND_RA + continue + elif ether.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + + # otherwise process the current packet + break if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src: print(u"MAC addresses match.") @@ -168,7 +177,7 @@ def main(): if not isinstance(ip, IPv6): raise RuntimeError(f"Not an IP packet received {ip!r}") elif not isinstance(ip, ip_format): - raise RuntimeError(f"Not an IP packet received {ip!r}") + raise RuntimeError(f"Not an IP packet received {ip!r}") lisp = ether.getlayer(LispGPEHeader).underlayer if not lisp: diff --git a/GPL/traffic_scripts/nat.py b/GPL/traffic_scripts/nat.py index 0ba9f4aefc..3722d6b8db 100644 --- a/GPL/traffic_scripts/nat.py +++ b/GPL/traffic_scripts/nat.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -17,31 +27,14 @@ import sys -import ipaddress - from scapy.layers.inet import IP, TCP, UDP -from scapy.layers.inet6 import IPv6, ICMPv6ND_NS +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.l2 import Ether from scapy.packet import Raw from .PacketVerifier import RxQueue, TxQueue from .TrafficScriptArg import TrafficScriptArg - - -def valid_ipv4(ip): - try: - ipaddress.IPv4Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - -def valid_ipv6(ip): - try: - ipaddress.IPv6Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False +from .ValidIp import valid_ipv4, valid_ipv6 def main(): @@ -110,9 +103,16 @@ def main(): if ether.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + elif ether.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif ether.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + break if rx_dst_mac != ether[Ether].dst or rx_src_mac != ether[Ether].src: raise RuntimeError(f"Matching packet unsuccessful: {ether!r}") @@ -172,9 +172,16 @@ def main(): if ether.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + elif ether.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif ether.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + break if ether[Ether].dst != tx_src_mac or ether[Ether].src != tx_dst_mac: raise RuntimeError(f"Matching packet unsuccessful: {ether!r}") diff --git a/GPL/traffic_scripts/policer.py b/GPL/traffic_scripts/policer.py index db90bb21f3..76b7812687 100644 --- a/GPL/traffic_scripts/policer.py +++ b/GPL/traffic_scripts/policer.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -16,12 +26,11 @@ """Traffic script for IPsec verification.""" import sys -import logging from ipaddress import ip_address from scapy.layers.l2 import Ether from scapy.layers.inet import IP, TCP -from scapy.layers.inet6 import IPv6, ICMPv6ND_NS +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.packet import Raw from .TrafficScriptArg import TrafficScriptArg @@ -103,9 +112,17 @@ def main(): if pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + elif pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break if pkt_recv is None: raise RuntimeError(u"Rx timeout") diff --git a/GPL/traffic_scripts/send_flow_packet.py b/GPL/traffic_scripts/send_flow_packet.py new file mode 100644 index 0000000000..dba3788bfb --- /dev/null +++ b/GPL/traffic_scripts/send_flow_packet.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2021 Intel and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Traffic script that send flow packet from one interface +to the other. +""" + +import sys +import binascii + +from scapy.layers.inet import IP, UDP, TCP +from scapy.layers.inet6 import IPv6 +from scapy.layers.l2 import Ether, ARP +from scapy.packet import Raw +from scapy.contrib.gtp import GTP_U_Header +from scapy.layers.ipsec import ESP, AH +from scapy.layers.vxlan import VXLAN + +from .PacketVerifier import TxQueue +from .TrafficScriptArg import TrafficScriptArg + + +def main(): + """Send packet from one traffic generator interface to the other.""" + + args = TrafficScriptArg( + [ + u"tg_if1_mac", u"dut_if1_mac", u"flow_type", u"proto", + ], + [ + u"src_ip", u"dst_ip", u"src_port", u"dst_port", u"value" + ] + ) + tx_if = args.get_arg(u"tx_if") + tx_src_mac = args.get_arg(u"tg_if1_mac") + tx_dst_mac = args.get_arg(u"dut_if1_mac") + flow_type = args.get_arg(u"flow_type") + proto = args.get_arg(u"proto") + + src = args.get_arg(u"src_ip") + dst = args.get_arg(u"dst_ip") + sport = eval(args.get_arg(u"src_port")) + dport = eval(args.get_arg(u"dst_port")) + value = eval(args.get_arg(u"value")) + + txq = TxQueue(tx_if) + + if flow_type == u"IP4": + pkt_raw = (Ether(src=tx_src_mac, dst=tx_dst_mac) / + IP(src=src, dst=dst)) + elif flow_type == u"IP6": + pkt_raw = (Ether(src=tx_src_mac, dst=tx_dst_mac) / + IPv6(src=src, dst=dst)) + elif flow_type == u"ETHER": + pkt_raw = Ether(src=tx_src_mac, dst=tx_dst_mac) + else: + raise ValueError(f"Flow type error: {flow_type}") + + if proto == u"TCP": + pkt_raw /= TCP(sport=sport, dport=dport) + elif proto == u"UDP": + pkt_raw /= UDP(sport=sport, dport=dport) + elif proto == u"AH": + pkt_raw /= AH(spi=value) + elif proto == u"ESP": + pkt_raw /= ESP(spi=value) + elif proto == u"GTPU": + pkt_raw /= (UDP()/GTP_U_Header(teid=value)/IP(src=u"192.168.10.20")) + elif proto == u"L2TPV3": + value_hex = hex(value).replace('0x', (8-len(hex(value))+2)*'0') + session_id = binascii.a2b_hex(value_hex) + pkt_raw.proto = 115 + pkt_raw /= Raw(session_id) + elif proto == u"VXLAN": + pkt_raw /= (UDP()/VXLAN(vni=value)) + elif proto == u"ARP": + pkt_raw.type = value + pkt_raw /= ARP() + else: + raise ValueError(f"Flow proto error: {proto}") + + pkt_raw /= Raw() + txq.send(pkt_raw) + sys.exit(0) + +if __name__ == u"__main__": + main() diff --git a/GPL/traffic_scripts/send_icmp_wait_for_reply.py b/GPL/traffic_scripts/send_icmp_wait_for_reply.py index 78554634af..f09287f24e 100644 --- a/GPL/traffic_scripts/send_icmp_wait_for_reply.py +++ b/GPL/traffic_scripts/send_icmp_wait_for_reply.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -16,48 +26,16 @@ """Traffic script that sends an IP ICMPv4 or ICMPv6.""" import sys -import ipaddress from scapy.layers.inet import ICMP, IP -from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6EchoReply,\ - ICMPv6ND_NS +from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply,\ + ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.l2 import Ether from scapy.packet import Raw from .PacketVerifier import RxQueue, TxQueue from .TrafficScriptArg import TrafficScriptArg - - -def valid_ipv4(ip): - """Check if IP address has the correct IPv4 address format. - - :param ip: IP address. - :type ip: str - :return: True in case of correct IPv4 address format, - otherwise return False. - :rtype: bool - """ - try: - ipaddress.IPv4Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - -def valid_ipv6(ip): - """Check if IP address has the correct IPv6 address format. - - :param ip: IP address. - :type ip: str - :return: True in case of correct IPv6 address format, - otherwise return False. - :rtype: bool - """ - try: - ipaddress.IPv6Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False +from .ValidIp import valid_ipv4, valid_ipv6 def main(): @@ -95,9 +73,9 @@ def main(): raise ValueError(u"IP not in correct format") icmp_request = ( - Ether(src=src_mac, dst=dst_mac) / - ip_layer(src=src_ip, dst=dst_ip) / - icmp_req() + Ether(src=src_mac, dst=dst_mac) / + ip_layer(src=src_ip, dst=dst_ip) / + icmp_req() ) # Send created packet on the interface @@ -116,9 +94,16 @@ def main(): elif icmp_reply.haslayer(ICMPv6ND_NS): # read another packet in the queue in case of ICMPv6ND_NS packet continue - else: - # otherwise process the current packet - break + elif icmp_reply.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif icmp_reply.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + break if icmp_reply[ip_layer][icmp_resp].type == icmp_type: if icmp_reply[ip_layer].src == dst_ip and \ diff --git a/GPL/traffic_scripts/send_ip_check_headers.py b/GPL/traffic_scripts/send_ip_check_headers.py index ff43563025..a13b1b73b8 100644 --- a/GPL/traffic_scripts/send_ip_check_headers.py +++ b/GPL/traffic_scripts/send_ip_check_headers.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -20,33 +30,15 @@ MAC addresses are checked in received packet. import sys -import ipaddress - from robot.api import logger from scapy.layers.inet import IP -from scapy.layers.inet6 import IPv6, ICMPv6ND_NS +from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.l2 import Ether, Dot1Q from scapy.packet import Raw from .PacketVerifier import RxQueue, TxQueue from .TrafficScriptArg import TrafficScriptArg - - -def valid_ipv4(ip): - try: - ipaddress.IPv4Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - - -def valid_ipv6(ip): - try: - ipaddress.IPv6Address(ip) - return True - except (AttributeError, ipaddress.AddressValueError): - return False - +from .ValidIp import valid_ipv4, valid_ipv6 def main(): """Send IP/IPv6 packet from one traffic generator interface to the other.""" @@ -80,7 +72,7 @@ def main(): rxq = RxQueue(rx_if) txq = TxQueue(tx_if) - sent_packets =list() + sent_packets = list() pkt_raw = Ether(src=tx_src_mac, dst=tx_dst_mac) if encaps_tx == u"Dot1q": @@ -115,9 +107,16 @@ def main(): if ether.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + elif ether.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif ether.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + break if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src: logger.trace(u"MAC matched") diff --git a/GPL/traffic_scripts/send_vxlan_check_vxlan.py b/GPL/traffic_scripts/send_vxlan_check_vxlan.py index 8bc8f6e09e..6a56a3ab03 100644 --- a/GPL/traffic_scripts/send_vxlan_check_vxlan.py +++ b/GPL/traffic_scripts/send_vxlan_check_vxlan.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/GPL/traffic_scripts/srv6_encap.py b/GPL/traffic_scripts/srv6_encap.py index 9db9538659..9c4ea257a0 100644 --- a/GPL/traffic_scripts/srv6_encap.py +++ b/GPL/traffic_scripts/srv6_encap.py @@ -1,11 +1,21 @@ #!/usr/bin/env python3 -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -18,7 +28,7 @@ import sys from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, IPv6ExtHdrSegmentRouting,\ - ipv6nh + ipv6nh, ICMPv6MLReport2, ICMPv6ND_RA from scapy.layers.l2 import Ether from scapy.packet import Raw @@ -245,9 +255,17 @@ def main(): if rx_pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + elif rx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif rx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break check_srv6( rx_pkt_recv, rx_src_mac, rx_dst_mac, src_ip, dst_ip, dir0_srcsid, @@ -260,20 +278,20 @@ def main(): ip_pkt[Raw].load += (b"\0" * (size_limit - 14 - len(ip_pkt))) rx_pkt_send = ( - Ether(src=rx_dst_mac, dst=rx_src_mac) / - IPv6(src=dir1_srcsid, dst=dir1_dstsid1) / - IPv6ExtHdrSegmentRouting( - segleft=1 if dir1_dstsid3 == u"None" else 2, - lastentry=1 if dir1_dstsid3 == u"None" else 2, - addresses=[dir1_dstsid2, dir1_dstsid1] - if dir1_dstsid3 == u"None" - else [dir1_dstsid3, dir1_dstsid2, dir1_dstsid1] - ) / - ip_pkt + Ether(src=rx_dst_mac, dst=rx_src_mac) / + IPv6(src=dir1_srcsid, dst=dir1_dstsid1) / + IPv6ExtHdrSegmentRouting( + segleft=1 if dir1_dstsid3 == u"None" else 2, + lastentry=1 if dir1_dstsid3 == u"None" else 2, + addresses=[dir1_dstsid2, dir1_dstsid1] + if dir1_dstsid3 == u"None" + else [dir1_dstsid3, dir1_dstsid2, dir1_dstsid1] + ) / + ip_pkt ) if dir1_dstsid2 != u"None" else ( - Ether(src=rx_dst_mac, dst=rx_src_mac) / - IPv6(src=dir1_srcsid, dst=dir1_dstsid1) / - ip_pkt + Ether(src=rx_dst_mac, dst=rx_src_mac) / + IPv6(src=dir1_srcsid, dst=dir1_dstsid1) / + ip_pkt ) rx_txq.send(rx_pkt_send) @@ -286,9 +304,17 @@ def main(): if tx_pkt_recv.haslayer(ICMPv6ND_NS): # read another packet in the queue if the current one is ICMPv6ND_NS continue - else: - # otherwise process the current packet - break + elif tx_pkt_recv.haslayer(ICMPv6MLReport2): + # read another packet in the queue if the current one is + # ICMPv6MLReport2 + continue + elif tx_pkt_recv.haslayer(ICMPv6ND_RA): + # read another packet in the queue if the current one is + # ICMPv6ND_RA + continue + + # otherwise process the current packet + break if decap == u"True": check_ip(tx_pkt_recv, tx_dst_mac, tx_src_mac, dst_ip, src_ip) diff --git a/GPL/traffic_scripts/vxlan.py b/GPL/traffic_scripts/vxlan.py index b39b419acc..25d2d60ed8 100644 --- a/GPL/traffic_scripts/vxlan.py +++ b/GPL/traffic_scripts/vxlan.py @@ -1,9 +1,19 @@ -# Copyright (c) 2020 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: +# Copyright (c) 2021 Cisco and/or its affiliates. +# +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Licensed under the Apache License 2.0 or +# GNU General Public License v2.0 or later; you may not use this file +# except in compliance with one of these Licenses. You +# may obtain a copy of the Licenses at: # # http://www.apache.org/licenses/LICENSE-2.0 +# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html +# +# Note: If this file is linked with Scapy, which is GPLv2+, your use of it +# must be under GPLv2+. If at any point in the future it is no longer linked +# with Scapy (or other GPLv2+ licensed software), you are free to choose +# Apache 2. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -11,6 +21,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +"""Traffic script for vxlan verification.""" + from scapy.fields import BitField, XByteField, X3BytesField from scapy.layers.inet import UDP from scapy.layers.l2 import Ether @@ -18,6 +30,8 @@ from scapy.packet import Packet, bind_layers class VXLAN(Packet): + """Custom scapy layer override for VXLAN.""" + name = u"VXLAN" fields_desc = [ BitField(u"flags", 0x08000000, 32), @@ -28,5 +42,6 @@ class VXLAN(Packet): def mysummary(self): return self.sprintf(f"VXLAN (vni={VXLAN.vni})") + bind_layers(UDP, VXLAN, dport=4789) bind_layers(VXLAN, Ether) |