summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-12-06 15:29:55 +0200
committerimarom <imarom@cisco.com>2016-12-06 15:31:28 +0200
commit0074ceeed2aa9ecafbbd8a71dc42d4bee1b34ffb (patch)
tree005a24d1465b0fc18825770367e39ea94ede15b9 /scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
parentcf72305f2f5632f977d2596db4c912100b438e1f (diff)
RX features phase 2 - ARP and ICMP self response
Signed-off-by: imarom <imarom@cisco.com>
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py')
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
index 389a942b..4ac31fba 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
@@ -489,6 +489,9 @@ class Port(object):
@owned
def set_rx_sniffer (self, pcap_filename, limit):
+ if not self.is_service_mode_on():
+ return self.err('port service mode must be enabled for performing RX capturing')
+
params = {"handler": self.handler,
"port_id": self.port_id,
"type": "capture",
@@ -529,7 +532,8 @@ class Port(object):
if rc.bad():
return self.err(rc.err())
- return self.ok()
+ # instead of updating manualy - let's sync with the server
+ return self.sync()
@@ -684,6 +688,9 @@ class Port(object):
json_attr['ipv4'] = {'addr': kwargs.get('ipv4')}
if kwargs.get('dest') is not None:
+ if not self.is_service_mode_on():
+ return self.err('setting destination requires port to be in service mode')
+
json_attr['dest'] = {'addr': kwargs.get('dest')}
@@ -698,6 +705,26 @@ class Port(object):
# update the dictionary from the server explicitly
return self.sync()
+
+ @owned
+ def set_service_mode (self, enabled):
+ rc = self.set_attr(rx_filter_mode = 'all' if enabled else 'hw')
+ if not rc:
+ return rc
+
+ if not enabled:
+ rc = self.remove_rx_queue()
+ if not rc:
+ return rc
+
+ rc = self.remove_rx_sniffer()
+ if not rc:
+ return rc
+
+ return self.ok()
+
+ def is_service_mode_on (self):
+ return self.get_rx_filter_mode() == 'all'
@writeable
def push_remote (self, pcap_filename, ipg_usec, speedup, count, duration, is_dual, slave_handler):
@@ -877,6 +904,8 @@ class Port(object):
return {'mac': src_mac, 'ipv4': src_ipv4}
+ def get_rx_filter_mode (self):
+ return self.__attr['rx_filter_mode']
def get_dst_addr (self):
dest = self.__attr['dest']
@@ -904,10 +933,16 @@ class Port(object):
@writeable
def arp_resolve (self, retries):
+ if not self.is_service_mode_on():
+ return self.err('port service mode must be enabled for performing ARP resolution')
+
return ARPResolver(self).resolve(retries)
@writeable
def ping (self, ping_ipv4, pkt_size):
+ if not self.is_service_mode_on():
+ return self.err('port service mode must be enabled for performing ping')
+
return PingResolver(self, ping_ipv4, pkt_size).resolve()