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-11-16 17:26:59 +0200
committerimarom <imarom@cisco.com>2016-11-16 17:26:59 +0200
commite46e3f598e52112b9db21d6faabde7a5c87341cb (patch)
tree1d2879e82277bfe17788c788ddcf4584f1be42e1 /scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
parent558ce764c2a5feaf376b562e455a2e9c1115701a (diff)
RX features - ARP resolve
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.py45
1 files changed, 37 insertions, 8 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 e19eebe1..f658b7fa 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
@@ -752,7 +752,7 @@ class Port(object):
base_pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(psrc = ipv4, pdst = dest['addr'], hwsrc = mac)
s1 = STLStream( packet = STLPktBuilder(pkt = base_pkt), mode = STLTXSingleBurst(total_pkts = 1) )
-
+
return self.add_streams([s1])
@@ -924,9 +924,22 @@ class Port(object):
return self.__attr['src_mac']
+ def is_resolved (self):
+ dest = self.get_dest()
+
+ if dest['type'] == 'mac':
+ return True
+ elif dest['type'] == 'ipv4':
+ return dest['arp'] != 'none'
+ else:
+ # unsupported type
+ assert(0)
+
+
def resolve (self, retries):
return ARPResolver(self).resolve(retries)
-
+
+
################# stats handler ######################
def generate_port_stats(self):
@@ -1082,8 +1095,26 @@ class ARPResolver(object):
return self.port.ok()
- # main resolve function
+
+ # safe call - make sure RX filter mode is restored
def resolve (self, retries):
+ try:
+ rc = self.port.set_attr(rx_filter_mode = 'all')
+ if not rc:
+ return rc
+ rc = self.port.set_rx_queue(size = 100)
+ if not rc:
+ return rc
+
+ return self.resolve_wrapper(retries)
+ finally:
+ # best effort restore
+ self.port.set_attr(rx_filter_mode = 'hw')
+ self.port.remove_rx_queue()
+
+
+ # main resolve function
+ def resolve_wrapper (self, retries):
rc = self.sanity()
if not rc:
return rc
@@ -1092,14 +1123,12 @@ class ARPResolver(object):
rc = self.port.invalidate_arp()
if not rc:
return rc
-
- rc = self.port.remove_all_streams()
- if not rc:
- return rc
+
- rc = self.port.set_rx_queue(size = 100)
+ rc = self.port.remove_all_streams()
if not rc:
return rc
+
rc = self.port.add_arp_request()
if not rc: