It generates many UDP flows with different source and destination UDP
ports
Signed-off-by: Adrian Moreno <amorenoz(a)redhat.com>
---
lnst/External/TRex/UDPMultiflow.py | 39 ++++++++++++++++++++++++++++++
test_tools/tperf/tperf | 9 ++++++-
2 files changed, 47 insertions(+), 1 deletion(-)
create mode 100644 lnst/External/TRex/UDPMultiflow.py
diff --git a/lnst/External/TRex/UDPMultiflow.py b/lnst/External/TRex/UDPMultiflow.py
new file mode 100644
index 0000000..9c768cb
--- /dev/null
+++ b/lnst/External/TRex/UDPMultiflow.py
@@ -0,0 +1,39 @@
+from trex_stl_lib.api import *
+from trex.stl.trex_stl_hltapi import *
+
+class UDPMultiflow(object):
+ """
+ Generate a many different UDP flows
+ Port MAC and IP addresses are used
+ Extra arguments in kwargs:
+ msg_size: the size of the packet to use (default 64)
+ port_id: The port the stream will be added to
+ """
+
+ def create_stream (self, **kwargs):
+ size = kwargs.get("msg_size", 64)
+ L2 = Ether(src=kwargs["src_mac"], dst=kwargs["dst_mac"])
+ L3 = IP(src=kwargs["src_ip"], dst=kwargs["dst_ip"])
+ L4 = UDP()
+
+ base_pkt = L2/L3/L4
+ pad = max(0, size - len(base_pkt)) * 'x'
+ base_pkt = base_pkt/pad
+
+ vm = STLVM()
+ vm.var(name = "src_port", min_value=1025, max_value=65000, size=2,
op="inc")
+ vm.var(name = "dst_port", min_value=1025, max_value=65000, size=2,
op="dec")
+ vm.write(fv_name = "src_port", pkt_offset = "UDP.sport")
+ vm.write(fv_name = "dst_port", pkt_offset = "UDP.dport")
+
+ pkt = STLPktBuilder(pkt = base_pkt, vm = vm)
+
+ return STLStream(packet = pkt, mode = STLTXCont(percentage=100))
+
+ def get_streams (self, direction = 0, **kwargs):
+ # create 1 stream
+ return [self.create_stream(**kwargs)]
+
+# dynamic load - used for trex console or simulator
+def register():
+ return UDPMultiflow()
diff --git a/test_tools/tperf/tperf b/test_tools/tperf/tperf
index 1464999..ed6bfa5 100755
--- a/test_tools/tperf/tperf
+++ b/test_tools/tperf/tperf
@@ -29,8 +29,9 @@ from lnst.External.TRex.TRexLib import TRexCli, TRexSrv, TRexParams
def main():
parser = argparse.ArgumentParser()
- parser.add_argument('iface', nargs=2, help='interfaces to use')
+ parser.add_argument('iface', nargs=2, help='interfaces to use.')
parser.add_argument('--trex', metavar='T', type=str, nargs=1,
help='trex directory', required=True)
+ parser.add_argument('--profile', metavar='P', type=str, nargs=1,
help='Traffic profile to use [UDPSimple, UDPMultiflow]. Default: UDPSimple')
parser.add_argument('--raw', metavar='R', type=str, nargs=1,
help='raw output file. If set, file where the raw output will be stored (in json
format)')
parser.add_argument('--server', dest='server',
action='store_const', const=True, default=False, help='Run server (default:
runs client side)')
args = parser.parse_args()
@@ -48,12 +49,18 @@ def main():
server = TRexSrv(trex_srv_params)
server.run()
else:
+ module = "UDPSimple"
+ if args.profile:
+ module = args.profile[0]
+
trex_cli_params = TRexParams (
trex_dir=trex_dir,
ports=list(range(len(flows))),
flows=flows,
duration=20,
+ module=module
)
+
client = TRexCli(trex_cli_params)
client.run()
--
2.26.2