summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/examples
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/examples')
-rw-r--r--scripts/automation/trex_control_plane/stl/examples/stl_pcap.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/scripts/automation/trex_control_plane/stl/examples/stl_pcap.py b/scripts/automation/trex_control_plane/stl/examples/stl_pcap.py
new file mode 100644
index 00000000..a729a572
--- /dev/null
+++ b/scripts/automation/trex_control_plane/stl/examples/stl_pcap.py
@@ -0,0 +1,99 @@
+import stl_path
+from trex_stl_lib.api import *
+import argparse
+
+
+def create_vm (ip_start, ip_end):
+ vm =[
+
+ # dest
+ STLVmFlowVar(name="dst", min_value = ip_start, max_value = ip_end, size = 4, op = "inc"),
+ STLVmWrFlowVar(fv_name="dst",pkt_offset= "IP.dst"),
+
+ # checksum
+ STLVmFixIpv4(offset = "IP")
+
+ ]
+
+ return vm
+
+
+def inject_pcap (pcap_file, port, loop_count, ipg_usec, use_vm):
+
+ # create client
+ c = STLClient()
+
+ try:
+ if use_vm:
+ vm = create_vm("10.0.0.1", "10.0.0.254")
+ else:
+ vm = None
+
+ profile = STLProfile.load_pcap(pcap_file, ipg_usec = ipg_usec, loop_count = loop_count, vm = vm)
+
+ print "Loaded pcap {0} with {1} packets...\n".format(pcap_file, len(profile))
+
+ # uncomment this for simulator run
+ #STLSim().run(profile.get_streams(), outfile = 'out.cap')
+
+ c.connect()
+ c.reset(ports = [port])
+ stream_ids = c.add_streams(profile.get_streams(), ports = [port])
+
+ c.clear_stats()
+
+ c.start()
+ c.wait_on_traffic(ports = [port])
+
+ stats = c.get_stats()
+ opackets = stats[port]['opackets']
+ print "{0} packets were Tx on port {1}\n".format(opackets, port)
+
+ except STLError as e:
+ print e
+
+ finally:
+ c.disconnect()
+
+
+def setParserOptions():
+ parser = argparse.ArgumentParser(prog="stl_pcap.py")
+
+ parser.add_argument("-f", help = "pcap file to inject",
+ dest = "pcap",
+ required = True,
+ type = str)
+
+ parser.add_argument("-p", help = "port to inject on",
+ dest = "port",
+ required = True,
+ type = int)
+
+ parser.add_argument("-n", help = "How many times to inject pcap [default is 1, 0 means forever]",
+ dest = "loop_count",
+ default = 1,
+ type = int)
+
+ parser.add_argument("-i", help = "IPG in usec",
+ dest = "ipg",
+ default = 10.0,
+ type = float)
+
+
+ parser.add_argument("-x", help = "Iterate over IP dest",
+ dest = "use_vm",
+ default = False,
+ action = "store_true")
+
+ return parser
+
+def main ():
+ parser = setParserOptions()
+ options = parser.parse_args()
+
+ inject_pcap(options.pcap, options.port, options.loop_count, options.ipg, options.use_vm)
+
+# inject pcap
+if __name__ == '__main__':
+ main()
+