+ u"memif_create_chain_ip4.exec",
+ mid1=kwargs[u"mid1"], mid2=kwargs[u"mid2"],
+ sid1=kwargs[u"sid1"], sid2=kwargs[u"sid2"],
+ socket1=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid1']}",
+ socket2=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid2']}",
+ mac1=f"52:54:00:00:{kwargs[u'mid1']:02X}:01",
+ mac2=f"52:54:00:00:{kwargs[u'mid2']:02X}:02",
+ vif1_mac=vif1_mac, vif2_mac=vif2_mac
+ )
+
+ def _configure_vpp_chain_vswitch(self, **kwargs):
+ """Configure VPP as vswitch in container.
+
+ :param kwargs: Named parameters.
+ :type kwargs: dict
+ """
+ dut = self.engine.container.name.split(u"_")[0]
+ if dut == u"DUT1":
+ if1_pci = Topology.get_interface_pci_addr(
+ self.engine.container.node, kwargs[u"dut1_if2"])
+ if2_pci = Topology.get_interface_pci_addr(
+ self.engine.container.node, kwargs[u"dut1_if1"])
+ if_red_name = Topology.get_interface_name(
+ self.engine.container.node, kwargs[u"dut1_if2"])
+ if_black_name = Topology.get_interface_name(
+ self.engine.container.node, kwargs[u"dut1_if1"])
+ tg_if_ip4 = kwargs[u"tg_if2_ip4"]
+ tg_if_mac = kwargs[u"tg_if2_mac"]
+ else:
+ tg_if_ip4 = kwargs[u"tg_if1_ip4"]
+ tg_if_mac = kwargs[u"tg_if1_mac"]
+ if1_pci = Topology.get_interface_pci_addr(
+ self.engine.container.node, kwargs[u"dut2_if1"])
+ if2_pci = Topology.get_interface_pci_addr(
+ self.engine.container.node, kwargs[u"dut2_if2"])
+ if_red_name = Topology.get_interface_name(
+ self.engine.container.node, kwargs[u"dut2_if1"])
+ if_black_name = Topology.get_interface_name(
+ self.engine.container.node, kwargs[u"dut2_if2"])
+
+ n_instances = int(kwargs[u"n_instances"])
+ rxq = 1
+ if u"rxq" in kwargs:
+ rxq = int(kwargs[u"rxq"])
+ nodes = kwargs[u"nodes"]
+ cpuset_cpus = CpuUtils.get_affinity_nf(
+ nodes, dut, nf_chains=1, nf_nodes=1, nf_chain=1,
+ nf_node=1, vs_dtc=0, nf_dtc=8, nf_mtcr=1, nf_dtcr=1
+ )
+ self.engine.create_vpp_startup_config_vswitch(
+ cpuset_cpus, rxq, if1_pci, if2_pci
+ )
+
+ instances = []
+ for i in range(1, n_instances + 1):
+ instances.append(
+ f"create interface memif id {i} socket-id 1 master\n"
+ f"set interface state memif1/{i} up\n"
+ f"set interface l2 bridge memif1/{i} 1\n"
+ f"create interface memif id {i} socket-id 2 master\n"
+ f"set interface state memif2/{i} up\n"
+ f"set interface l2 bridge memif2/{i} 2\n"
+ f"set ip neighbor memif2/{i} {tg_if_ip4} {tg_if_mac} "
+ f"static\n\n"
+ )
+
+ self.engine.create_vpp_exec_config(
+ u"memif_create_chain_vswitch_ipsec.exec",
+ socket1=f"{kwargs[u'guest_dir']}/{dut}_memif-vswitch-1",
+ socket2=f"{kwargs[u'guest_dir']}/{dut}_memif-vswitch-2",
+ if_red_name=if_red_name,
+ if_black_name=if_black_name,
+ instances=u"\n\n".join(instances))
+
+
+ def _configure_vpp_chain_ipsec(self, **kwargs):
+ """Configure VPP in container with memifs.
+
+ :param kwargs: Named parameters.
+ :type kwargs: dict
+ """
+ nf_nodes = int(kwargs[u"nf_nodes"])
+ nf_instance = int(kwargs[u"nf_instance"])
+ nodes = kwargs[u"nodes"]
+ dut = self.engine.container.name.split(u"_")[0]
+ cpuset_cpus = CpuUtils.get_affinity_nf(
+ nodes, dut, nf_chains=1, nf_nodes=nf_nodes, nf_chain=1,
+ nf_node=nf_instance, vs_dtc=10, nf_dtc=1, nf_mtcr=1, nf_dtcr=1)
+ self.engine.create_vpp_startup_config_ipsec(cpuset_cpus)
+ local_ip_base = kwargs[u"dut2_if1_ip4"].rsplit(u".", 1)[0]
+
+ if dut == u"DUT1":
+ tnl_local_ip = f"{local_ip_base}.{nf_instance + 100}"
+ tnl_remote_ip = f"{local_ip_base}.{nf_instance}"
+ remote_ip_base = kwargs[u"dut1_if1_ip4"].rsplit(u".", 1)[0]
+ tg_if_ip4 = kwargs[u"tg_if1_ip4"]
+ tg_if_mac = kwargs[u"tg_if1_mac"]
+ raddr_ip4 = kwargs[u"laddr_ip4"]
+ l_mac1 = 17
+ l_mac2 = 18
+ r_mac = 1
+ else:
+ tnl_local_ip = f"{local_ip_base}.{nf_instance}"
+ tnl_remote_ip = f"{local_ip_base}.{nf_instance + 100}"
+ remote_ip_base = kwargs[u"dut2_if2_ip4"].rsplit(u".", 1)[0]
+ tg_if_ip4 = kwargs[u"tg_if2_ip4"]
+ tg_if_mac = kwargs[u"tg_if2_mac"]
+ raddr_ip4 = kwargs[u"raddr_ip4"]
+ l_mac1 = 1
+ l_mac2 = 2
+ r_mac = 17
+
+ self.engine.create_vpp_exec_config(
+ u"memif_create_chain_ipsec.exec",
+ socket1=f"{kwargs['guest_dir']}/{dut}_memif-vswitch-1",
+ socket2=f"{kwargs['guest_dir']}/{dut}_memif-vswitch-2",
+ mid1=nf_instance,
+ mid2=nf_instance,
+ sid1=u"1",
+ sid2=u"2",
+ mac1=f"02:02:00:00:{l_mac1:02X}:{(nf_instance - 1):02X}",
+ mac2=f"02:02:00:00:{l_mac2:02X}:{(nf_instance - 1):02X}",
+ tg_if2_ip4=tg_if_ip4,
+ tg_if2_mac=tg_if_mac,
+ raddr_ip4=raddr_ip4,
+ tnl_local_ip=tnl_local_ip,
+ tnl_remote_ip=tnl_remote_ip,
+ tnl_remote_mac=f"02:02:00:00:{r_mac:02X}:{(nf_instance - 1):02X}",
+ remote_ip=f"{remote_ip_base}.{nf_instance}"
+ )
+ self.engine.execute(
+ f"cat {kwargs['guest_dir']}/ipsec_create_tunnel_cnf_"
+ f"{dut}_{nf_instance}.config >> /tmp/running.exec"
+ )