+ guest_dir = self.engine.container.mnt[0].split(':')[1]
+
+ if chain_topology == 'chain':
+ self.engine.create_vpp_startup_config()
+ self.engine.create_vpp_exec_config(
+ container_vat_template,
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ socket1='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid1, dir=guest_dir),
+ socket2='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid2, dir=guest_dir))
+ elif chain_topology == 'cross_horiz':
+ try:
+ dut1_if = kwargs['dut1_if']
+ dut2_if = kwargs['dut2_if']
+ except KeyError:
+ raise AttributeError('DUT interfaces not specified!')
+ if 'DUT1' in self.engine.container.name:
+ if_pci = Topology.get_interface_pci_addr(
+ self.engine.container.node, dut1_if)
+ if_name = Topology.get_interface_name(
+ self.engine.container.node, dut1_if)
+ if 'DUT2' in self.engine.container.name:
+ if_pci = Topology.get_interface_pci_addr(
+ self.engine.container.node, dut2_if)
+ if_name = Topology.get_interface_name(
+ self.engine.container.node, dut2_if)
+ self.engine.create_vpp_startup_config_dpdk_dev(if_pci)
+ self.engine.create_vpp_exec_config(
+ container_vat_template,
+ mid1=mid1, sid1=sid1, if_name=if_name,
+ socket1='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid1, dir=guest_dir))
+ elif chain_topology == 'chain_functional':
+ memif_rx_mode = 'interrupt'
+ self.engine.create_vpp_startup_config_func_dev()
+ self.engine.create_vpp_exec_config(
+ container_vat_template,
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ socket1='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid1, dir=guest_dir),
+ socket2='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid2, dir=guest_dir),
+ rx_mode=memif_rx_mode)
+ elif chain_topology == 'chain_ip4':
+ self.engine.create_vpp_startup_config()
+ vif1_mac = kwargs['tg_if1_mac'] \
+ if (mid1 - 1) % kwargs['nodes'] + 1 == 1 \
+ else '52:54:00:00:{0:02X}:02'.format(mid1-1)
+ vif2_mac = kwargs['tg_if2_mac'] \
+ if (mid2 - 1) % kwargs['nodes'] + 1 == kwargs['nodes'] \
+ else '52:54:00:00:{0:02X}:01'.format(mid2+1)
+ self.engine.create_vpp_exec_config(
+ container_vat_template,
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ socket1='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid1, dir=guest_dir),
+ socket2='{dir}/memif-{c.name}-{sid}'.
+ format(c=self.engine.container, sid=sid2, dir=guest_dir),
+ mac1='52:54:00:00:{0:02X}:01'.format(mid1),
+ mac2='52:54:00:00:{0:02X}:02'.format(mid2),
+ vif1_mac=vif1_mac, vif2_mac=vif2_mac)
+ else:
+ raise RuntimeError('Container topology {topology} not '
+ 'implemented'.
+ format(topology=chain_topology))