def setup_modules_freebsd(self, target): """ Install DPDK required Freebsd kernel module on DUT. """ binding_list = '' for (pci_bus, pci_id) in self.pci_devices_info: if dts.accepted_nic(pci_id): binding_list += '%s,' % (pci_bus) self.send_expect("kldunload if_ixgbe.ko", "#") self.send_expect('kenv hw.nic_uio.bdfs="%s"' % binding_list[:-1], '# ') self.send_expect("kldload ./%s/kmod/nic_uio.ko" % target, "#", 20) out = self.send_expect("kldstat", "#") assert ("nic_uio" in out), "Failed to insmod nic_uio"
def scan_ports_uncached_freebsd(self): """ Scan Freebsd ports and collect port's pci id, mac adress, ipv6 address. """ self.ports_info = [] skipped = dts.RED('Skipped: Unknown/not selected') for (pci_bus, pci_id) in self.pci_devices_info: if not dts.accepted_nic(pci_id): self.logger.info("DUT: [%s %s] %s" % (pci_bus, pci_id, skipped)) continue intf = self.get_interface_name(pci_bus) macaddr = self.get_mac_addr(intf) ipv6 = self.get_ipv6_addr(intf) if ipv6 is None: ipv6 = "Not available" self.logger.warning("NUMA not available on FreeBSD") self.logger.info("DUT: [%s %s] %s %s" % (pci_bus, pci_id, intf, ipv6)) # convert bsd format to linux format pci_split = pci_bus.split(':') pci_bus_id = hex(int(pci_split[0]))[2:] if len(pci_split[1]) == 1: pci_dev_str = "0" + pci_split[1] else: pci_dev_str = pci_split[1] pci_str = "%s:%s.%s" % (pci_bus_id, pci_dev_str, pci_split[2]) # store the port info to port mapping self.ports_info.append({ 'pci': pci_str, 'type': pci_id, 'intf': intf, 'mac': macaddr, 'ipv6': ipv6, 'numa': -1 })
def unbind_interfaces_linux(self, nics_to_bind=None): """ Unbind the interfaces. """ binding_list = '-u ' current_nic = 0 for (pci_bus, pci_id) in self.pci_devices_info: if dts.accepted_nic(pci_id): if nics_to_bind is None or current_nic in nics_to_bind: binding_list += '%s ' % (pci_bus) current_nic += 1 self.send_expect('tools/dpdk_nic_bind.py %s' % binding_list, '# ', 30)
def bind_interfaces_linux(self, driver='igb_uio', nics_to_bind=None): """ Bind the interfaces to the selected driver. nics_to_bind can be None to bind all interfaces or an array with the port indexes """ binding_list = '--bind=%s ' % driver current_nic = 0 for (pci_bus, pci_id) in self.pci_devices_info: if dts.accepted_nic(pci_id): if nics_to_bind is None or current_nic in nics_to_bind: binding_list += '%s ' % (pci_bus) current_nic += 1 self.send_expect('tools/dpdk_nic_bind.py %s' % binding_list, '# ')
def scan_ports_uncached_freebsd(self): """ Scan Freebsd ports and collect port's pci id, mac adress, ipv6 address. """ self.ports_info = [] skipped = dts.RED('Skipped: Unknown/not selected') for (pci_bus, pci_id) in self.pci_devices_info: if not dts.accepted_nic(pci_id): self.logger.info("DUT: [%s %s] %s" % (pci_bus, pci_id, skipped)) continue intf = self.get_interface_name(pci_bus) macaddr = self.get_mac_addr(intf) ipv6 = self.get_ipv6_addr(intf) if ipv6 is None: ipv6 = "Not available" self.logger.warning("NUMA not available on FreeBSD") self.logger.info("DUT: [%s %s] %s %s" % (pci_bus, pci_id, intf, ipv6)) # convert bsd format to linux format pci_split = pci_bus.split(':') pci_bus_id = hex(int(pci_split[0]))[2:] if len(pci_split[1]) == 1: pci_dev_str = "0" + pci_split[1] else: pci_dev_str = pci_split[1] pci_str = "%s:%s.%s" % (pci_bus_id, pci_dev_str, pci_split[2]) # store the port info to port mapping self.ports_info.append({'pci': pci_str, 'type': pci_id, 'intf': intf, 'mac': macaddr, 'ipv6': ipv6, 'numa': -1})