def main (): try: process_options () if map_driver.args.show: dpdk_nic_bind.show_status() return if map_driver.args.table: dpdk_nic_bind.show_table() return obj =CIfMap(map_driver.cfg_file); if map_driver.args.create_interfaces is not None: obj.do_create(); elif map_driver.args.interactive: obj.do_interactive_create(); elif map_driver.args.linux: obj.do_return_to_linux(); else: obj.do_run(); print('') except DpdkSetup as e: print(e) exit(-1)
def main (): try: if os.getuid() != 0: raise DpdkSetup('Please run this program as root/with sudo') process_options () if map_driver.args.show: dpdk_nic_bind.show_status() return if map_driver.args.table: dpdk_nic_bind.show_table() return if map_driver.args.dump_pci_desc: dpdk_nic_bind.dump_pci_description() return obj =CIfMap(map_driver.cfg_file); if map_driver.args.create_interfaces is not None: obj.do_create(); elif map_driver.args.interactive: obj.do_interactive_create(); elif map_driver.args.linux: obj.do_return_to_linux(); else: exit(obj.do_run()); print('') except DpdkSetup as e: print(e) exit(-1)
def main (): try: if getpass.getuser() != 'root': raise DpdkSetup('Please run this program as root/with sudo') process_options () if map_driver.args.show: dpdk_nic_bind.show_status() return if map_driver.args.table: dpdk_nic_bind.show_table() return if map_driver.args.dump_pci_desc: dpdk_nic_bind.dump_pci_description() return obj =CIfMap(map_driver.cfg_file); if map_driver.args.create_interfaces is not None: obj.do_create(); elif map_driver.args.interactive: obj.do_interactive_create(); elif map_driver.args.linux: obj.do_return_to_linux(); else: obj.do_run(); print('') except DpdkSetup as e: print(e) exit(-1)
def do_interactive_create(self): ignore_numa = False cpu_topology = self._get_cpu_topology() total_lcores = sum([len(lcores) for cores in cpu_topology.values() for lcores in cores.values()]) if total_lcores < 1: print('Script could not determine cores of the system, exiting.') sys.exit(1) elif total_lcores < 2: if dpdk_nic_bind.confirm("You have only 1 core and can't run TRex at all. Ignore and continue? (y/N): "): ignore_numa = True else: sys.exit(1) elif total_lcores < 3: if dpdk_nic_bind.confirm("You have only 2 cores and will be able to run only Stateful without latency checks.\nIgnore and continue? (y/N): "): ignore_numa = True else: sys.exit(1) if not self.m_devices: self.run_dpdk_lspci() dpdk_nic_bind.show_table() print('Please choose even number of interfaces either by ID or PCI or Linux IF (look at columns above).') print('Stateful will use order of interfaces: Client1 Server1 Client2 Server2 etc. for flows.') print('Stateless can be in any order.') numa = None for dev in self.m_devices.values(): if numa is None: numa = dev['NUMA'] elif numa != dev['NUMA']: print('Try to choose each pair of interfaces to be on same NUMA within the pair for performance.') break while True: try: input = dpdk_nic_bind.read_line('Enter list of interfaces in line (for example: 1 3) : ') create_interfaces = input.replace(',', ' ').replace(';', ' ').split() wanted_interfaces = self._get_wanted_interfaces(create_interfaces) ConfigCreator._verify_devices_same_type(wanted_interfaces) except Exception as e: print(e) continue break print('') for interface in wanted_interfaces: if interface['Active']: print('Interface %s is active. Using it by TRex might close ssh connections etc.' % interface['Interface_argv']) if not dpdk_nic_bind.confirm('Ignore and continue? (y/N): '): sys.exit(1) for i, interface in enumerate(wanted_interfaces): if 'MAC' not in interface: raise DpdkSetup('Cound not determine MAC of interface: %s. Please verify with -t flag.' % interface['Interface_argv']) interface['src_mac'] = interface['MAC'] dual_index = i + 1 - (i % 2) * 2 dual_int = wanted_interfaces[dual_index] if not ignore_numa and interface['NUMA'] != dual_int['NUMA']: print('NUMA is different at pair of interfaces: %s and %s. It will reduce performance.' % (interface['Interface_argv'], dual_int['Interface_argv'])) if dpdk_nic_bind.confirm('Ignore and continue? (y/N): '): ignore_numa = True print('') else: return dest_mac = dual_int['MAC'] loopback_dest = True print("For interface %s, assuming loopback to it's dual interface %s." % (interface['Interface_argv'], dual_int['Interface_argv'])) if dpdk_nic_bind.confirm("Destination MAC is %s. Change it to MAC of DUT? (y/N)." % dest_mac): while True: input_mac = dpdk_nic_bind.read_line('Please enter new destination MAC of interface %s: ' % interface['Interface_argv']) try: if input_mac: ConfigCreator._convert_mac(input_mac) # verify format dest_mac = input_mac loopback_dest = False else: print('Leaving the loopback MAC.') except Exception as e: print(e) continue break wanted_interfaces[i]['dest_mac'] = dest_mac wanted_interfaces[i]['loopback_dest'] = loopback_dest config = ConfigCreator(cpu_topology, wanted_interfaces, include_lcores = map_driver.args.create_include, exclude_lcores = map_driver.args.create_exclude, only_first_thread = map_driver.args.no_ht, ignore_numa = map_driver.args.ignore_numa or ignore_numa, prefix = map_driver.args.prefix, zmq_rpc_port = map_driver.args.zmq_rpc_port, zmq_pub_port = map_driver.args.zmq_pub_port) if dpdk_nic_bind.confirm('Print preview of generated config? (Y/n)', default = True): config.create_config(print_config = True) if dpdk_nic_bind.confirm('Save the config to file? (Y/n)', default = True): print('Default filename is /etc/trex_cfg.yaml') filename = dpdk_nic_bind.read_line('Press ENTER to confirm or enter new file: ') if not filename: filename = '/etc/trex_cfg.yaml' config.create_config(filename = filename)