summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-03-03 16:34:20 +0200
committerimarom <imarom@cisco.com>2016-03-03 18:11:08 +0200
commit13cfb2c4ea55b7e0dab40155d8d51e7955ae4681 (patch)
tree7887702e364d3aa1917e3f9ca073602b88cae8c5
parent0a10805acc189a36eecb4d49b858bd911bc45f4e (diff)
RX stats API
-rw-r--r--scripts/automation/trex_control_plane/stl/examples/stl_run_udp_simple.py1
-rw-r--r--scripts/automation/trex_control_plane/stl/examples/stl_rx_stream.py57
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_async_client.py4
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py8
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py2
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py1
6 files changed, 69 insertions, 4 deletions
diff --git a/scripts/automation/trex_control_plane/stl/examples/stl_run_udp_simple.py b/scripts/automation/trex_control_plane/stl/examples/stl_run_udp_simple.py
index db005608..465b3dde 100644
--- a/scripts/automation/trex_control_plane/stl/examples/stl_run_udp_simple.py
+++ b/scripts/automation/trex_control_plane/stl/examples/stl_run_udp_simple.py
@@ -19,7 +19,6 @@ class t_global(object):
args=None;
-import dpkt
import time
import json
import string
diff --git a/scripts/automation/trex_control_plane/stl/examples/stl_rx_stream.py b/scripts/automation/trex_control_plane/stl/examples/stl_rx_stream.py
new file mode 100644
index 00000000..daff6105
--- /dev/null
+++ b/scripts/automation/trex_control_plane/stl/examples/stl_rx_stream.py
@@ -0,0 +1,57 @@
+import stl_path
+from trex_stl_lib.api import *
+
+import time
+import pprint
+
+def rx_example (tx_port, rx_port):
+
+ # create client
+ c = STLClient()
+ passed = True
+
+ try:
+ pkt = STLPktBuilder(pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)/IP()/'a_payload_example')
+ total_pkts = 500000
+ s1 = STLStream(name = 'rx',
+ packet = pkt,
+ rx_stats = STLRxStats(user_id = 5),
+ mode = STLTXSingleBurst(total_pkts = total_pkts, bps_L2 = 250000000))
+
+ # connect to server
+ c.connect()
+
+ # prepare our ports
+ c.reset(ports = [tx_port, rx_port])
+
+ # add both streams to ports
+ c.add_streams([s1], ports = [tx_port])
+
+ print "injecting {0} packets on port {1}".format(total_pkts, tx_port)
+ c.clear_stats()
+ c.start(ports = [tx_port])
+ c.wait_on_traffic(ports = [tx_port])
+
+ time.sleep(1)
+ stats = c.get_stats()
+ pprint.pprint(stats['rx_stats'])
+ print "port 3: ipackets {0}, ibytes {1}".format(stats[3]['ipackets'], stats[3]['ibytes'])
+ #rx_stas = stats['rx_stats']
+
+
+ except STLError as e:
+ passed = False
+ print e
+
+ finally:
+ c.disconnect()
+
+ if passed:
+ print "\nTest has passed :-)\n"
+ else:
+ print "\nTest has failed :-(\n"
+
+
+# run the tests
+rx_example(tx_port = 0, rx_port = 3)
+
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_async_client.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_async_client.py
index 410482b9..f75d2003 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_async_client.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_async_client.py
@@ -280,6 +280,10 @@ class CTRexAsyncClient():
# barriers
elif name == "trex-barrier":
self.handle_async_barrier(type, data)
+
+ elif name == "rx-stats":
+ self.event_handler.handle_async_rx_stats_event(data)
+
else:
pass
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
index 04dd77ec..8da7c411 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
@@ -155,6 +155,10 @@ class AsyncEventHandler(object):
pass
+ def handle_async_rx_stats_event (self, data):
+ self.client.rx_stats = data
+
+
# handles an async stats update from the subscriber
def handle_async_stats_update(self, dump_data):
global_stats = {}
@@ -435,7 +439,7 @@ class STLClient(object):
self.stats_generator = trex_stl_stats.CTRexInfoGenerator(self.global_stats,
self.ports)
-
+ self.rx_stats = {}
############# private functions - used by the class itself ###########
@@ -741,6 +745,8 @@ class STLClient(object):
stats['total'] = total
+ stats['rx_stats'] = copy.deepcopy(self.rx_stats)
+
return stats
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py
index 42d648a5..b2843ac3 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py
@@ -668,7 +668,7 @@ class CTRexVmDescTupleGen(CTRexVmDescBase):
class CScapyTRexPktBuilder(CTrexPktBuilderInterface):
"""
- This class defines the TRex API of building a packet using dpkt package.
+ This class defines the TRex API of building a packet using scapy package.
Using this class the user can also define how TRex will handle the packet by specifying the VM setting.
pkt could be Scapy pkt or pcap file name
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
index b56d8708..2dfc5f29 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
@@ -6,7 +6,6 @@ from trex_stl_packet_builder_interface import CTrexPktBuilderInterface
from trex_stl_packet_builder_scapy import CScapyTRexPktBuilder, Ether, IP, UDP, TCP, RawPcapReader
from collections import OrderedDict, namedtuple
-from dpkt import pcap
import random
import yaml
import base64