diff options
author | imarom <imarom@cisco.com> | 2016-11-16 17:26:59 +0200 |
---|---|---|
committer | imarom <imarom@cisco.com> | 2016-11-16 17:26:59 +0200 |
commit | e46e3f598e52112b9db21d6faabde7a5c87341cb (patch) | |
tree | 1d2879e82277bfe17788c788ddcf4584f1be42e1 /scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py | |
parent | 558ce764c2a5feaf376b562e455a2e9c1115701a (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.py | 45 |
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: |