FIX: set host physical interface mac address to rdma interface 12/24712/4
authorJan Gelety <jgelety@cisco.com>
Mon, 20 Jan 2020 11:49:02 +0000 (12:49 +0100)
committerJan Gelety <jgelety@cisco.com>
Mon, 10 Feb 2020 16:13:06 +0000 (16:13 +0000)
Reason is that the traffic generator is initialized with MAC addresses
of physical interfaces in the suite setup while rdma interfaces
are created later.

Change-Id: I2cf182cde20f14778624740a1f0467096c336306
Signed-off-by: Jan Gelety <jgelety@cisco.com>
resources/api/vpp/supported_crcs.yaml
resources/libraries/python/InterfaceUtil.py

index 24dc45f..5dbe2a3 100644 (file)
     sw_interface_set_l2_bridge_reply: '0xe8d4e804'  # dev
     sw_interface_set_l2_xconnect: '0x95de3988'  # dev
     sw_interface_set_l2_xconnect_reply: '0xe8d4e804'  # dev
     sw_interface_set_l2_bridge_reply: '0xe8d4e804'  # dev
     sw_interface_set_l2_xconnect: '0x95de3988'  # dev
     sw_interface_set_l2_xconnect_reply: '0xe8d4e804'  # dev
+    sw_interface_set_mac_address: '0x6aca746a'  # perf
+    sw_interface_set_mac_address_reply: '0xe8d4e804'  # perf
     sw_interface_set_rx_placement: '0xdb65f3c9'  # perf
     sw_interface_set_rx_placement_reply: '0xe8d4e804'  # perf
     # ^^ see tc01-64B-1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr above
     sw_interface_set_rx_placement: '0xdb65f3c9'  # perf
     sw_interface_set_rx_placement_reply: '0xe8d4e804'  # perf
     # ^^ see tc01-64B-1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr above
index 5724af0..ad76eac 100644 (file)
@@ -491,6 +491,27 @@ class InterfaceUtil:
 
         return if_data.get(u"l2_address")
 
 
         return if_data.get(u"l2_address")
 
+    @staticmethod
+    def vpp_set_interface_mac(node, interface, mac):
+        """Set MAC address for the given interface.
+
+        :param node: VPP node to set interface MAC.
+        :param interface: Numeric index or name string of a specific interface.
+        :param mac: Required MAC address.
+        :type node: dict
+        :type interface: int or str
+        :type mac: str
+        """
+        cmd = u"sw_interface_set_mac_address"
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, interface),
+            mac_address=L2Util.mac_to_bin(mac)
+        )
+        err_msg = f"Failed to set MAC address of interface {interface}" \
+            f"on host {node[u'host']}"
+        with PapiSocketExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_reply(err_msg)
+
     @staticmethod
     def tg_set_interface_driver(node, pci_addr, driver):
         """Set interface driver on the TG node.
     @staticmethod
     def tg_set_interface_driver(node, pci_addr, driver):
         """Set interface driver on the TG node.
@@ -1183,6 +1204,9 @@ class InterfaceUtil:
         with PapiSocketExecutor(node) as papi_exec:
             sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
 
         with PapiSocketExecutor(node) as papi_exec:
             sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
 
+        InterfaceUtil.vpp_set_interface_mac(
+            node, sw_if_index, Topology.get_interface_mac(node, if_key)
+        )
         InterfaceUtil.add_eth_interface(
             node, sw_if_index=sw_if_index, ifc_pfx=u"eth_rdma",
             host_if_key=if_key
         InterfaceUtil.add_eth_interface(
             node, sw_if_index=sw_if_index, ifc_pfx=u"eth_rdma",
             host_if_key=if_key