[dpdk-dev] [PATCH v2] tools: add crypto device details
> -Original Message- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Eoin Breen > Sent: Thursday, August 25, 2016 6:52 AM > To: Jain, Deepak K; Trahe, Fiona; Griffin, John > Cc: dev at dpdk.org; Breen, Eoin > Subject: [dpdk-dev] [PATCH v2] tools: add crypto device details > > Adding the support to bind/unbind crypto devices with > dpdk-devbind.py script, as now it is not restricted > to network devices anymore. > > Signed-off-by: Eoin Breen > --- > Changes since v1: > * Resolved coding issues > > tools/dpdk-devbind.py | 107 > ++ > 1 file changed, 99 insertions(+), 8 deletions(-) > > diff --git a/tools/dpdk-devbind.py b/tools/dpdk-devbind.py > index b69ca2a..c7576b9 100755 > --- a/tools/dpdk-devbind.py > +++ b/tools/dpdk-devbind.py ... > +# check what is the interface if any for an ssh connection if > +# any to this host, so we can mark it later. > +ssh_if = [] > +route = check_output(["ip", "-o", "route"]) > +# filter out all lines for 169.254 routes > +route = "\n".join(filter(lambda ln: not ln.startswith("169.254"), > + route.decode().splitlines())) > +rt_info = route.split() > +for i in range(len(rt_info) - 1): > +if rt_info[i] == "dev": > +ssh_if.append(rt_info[i+1]) This is relevant only to network devices, so it should not be included here. > + > +# based on the basic info, get extended text details > +for d in devices.keys(): > +# get additional info and add it to existing data > +devices[d] = devices[d].copy() > +devices[d].update(get_pci_device_details(d).items()) > + > +for _if in ssh_if: > +if _if in devices[d]["Interface"].split(","): > +devices[d]["Ssh_if"] = True > +devices[d]["Active"] = "*Active*" > +break Same here. > + > +# add igb_uio to list of supporting modules if needed > +if "Module_str" in devices[d]: > +for driver in dpdk_drivers: > +if driver not in devices[d]["Module_str"]: > +devices[d]["Module_str"] = \ > +devices[d]["Module_str"] + ",%s" % driver > +else: > +devices[d]["Module_str"] = ",".join(dpdk_drivers) > + > +# make sure the driver and module strings do not have any duplicates > +if has_driver(d): > +modules = devices[d]["Module_str"].split(",") > +if devices[d]["Driver_str"] in modules: > +modules.remove(devices[d]["Driver_str"]) > +devices[d]["Module_str"] = ",".join(modules) > + > + > def dev_id_from_dev_name(dev_name): > '''Take a device "name" - a string passed in by user to identify a NIC > device, and determine the device id - i.e. the domain:bus:slot.func - for > @@ -480,15 +546,16 @@ def show_status(): > dpdk_drv = [] > no_drv = [] > > -# split our list of devices into the three categories above > +# split our list of network devices into the three categories above > for d in devices.keys(): > -if not has_driver(d): > -no_drv.append(devices[d]) > -continue > -if devices[d]["Driver_str"] in dpdk_drivers: > -dpdk_drv.append(devices[d]) > -else: > -kernel_drv.append(devices[d]) > +if (NETWORK_BASE_CLASS in devices[d]["Class"]): > +if not has_driver(d): > +no_drv.append(devices[d]) > +continue > +if devices[d]["Driver_str"] in dpdk_drivers: > +dpdk_drv.append(devices[d]) > +else: > +kernel_drv.append(devices[d]) > > # print each category separately, so we can clearly see what's used by > DPDK > display_devices("Network devices using DPDK-compatible driver", > dpdk_drv, > @@ -498,6 +565,28 @@ def show_status(): > "unused=%(Module_str)s %(Active)s") > display_devices("Other network devices", no_drv, > "unused=%(Module_str)s") > > +# split our list of crypto devices into the three categories above > +kernel_drv = [] > +dpdk_drv = [] > +no_drv = [] > + > +for d in devices.keys(): > +if (CRYPTO_BASE_CLASS in devices[d][&
[dpdk-dev] [PATCH v2] tools: add crypto device details
> -Original Message- > From: Breen, Eoin > Sent: Thursday, August 25, 2016 2:52 PM > To: Jain, Deepak K ; Trahe, Fiona > ; Griffin, John > Cc: dev at dpdk.org; Breen, Eoin > Subject: [PATCH v2] tools: add crypto device details > > Adding the support to bind/unbind crypto devices with dpdk-devbind.py > script, as now it is not restricted to network devices anymore. > > Signed-off-by: Eoin Breen > --- > Changes since v1: > * Resolved coding issues > > tools/dpdk-devbind.py | 107 > ++ > 1 file changed, 99 insertions(+), 8 deletions(-) > -- > 2.5.5 Acked-by: Deepak Kumar Jain
[dpdk-dev] [PATCH v2] tools: add crypto device details
Adding the support to bind/unbind crypto devices with dpdk-devbind.py script, as now it is not restricted to network devices anymore. Signed-off-by: Eoin Breen --- Changes since v1: * Resolved coding issues tools/dpdk-devbind.py | 107 ++ 1 file changed, 99 insertions(+), 8 deletions(-) diff --git a/tools/dpdk-devbind.py b/tools/dpdk-devbind.py index b69ca2a..c7576b9 100755 --- a/tools/dpdk-devbind.py +++ b/tools/dpdk-devbind.py @@ -40,6 +40,7 @@ from os.path import exists, abspath, dirname, basename # The PCI base class for NETWORK devices NETWORK_BASE_CLASS = "02" +CRYPTO_BASE_CLASS = "0b" # global dict ethernet devices present. Dictionary indexed by PCI address. # Each device within this is itself a dictionary of device properties @@ -299,6 +300,71 @@ def get_nic_details(): devices[d]["Module_str"] = ",".join(modules) +def get_crypto_details(): +'''This function populates the "devices" dictionary. The keys used are +the pci addresses (domain:bus:slot.func). The values are themselves +dictionaries - one for each NIC.''' +global devices +global dpdk_drivers + +# clear any old data +# devices = {} +# first loop through and read details for all devices +# request machine readable format, with numeric IDs +dev = {} +dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines() +for dev_line in dev_lines: +if (len(dev_line) == 0): +if (dev["Class"][0:2] == CRYPTO_BASE_CLASS): +# convert device and vendor ids to numbers, then add to global +dev["Vendor"] = int(dev["Vendor"], 16) +dev["Device"] = int(dev["Device"], 16) +# use dict to make copy of dev +devices[dev["Slot"]] = dict(dev) +else: +name, value = dev_line.decode().split("\t", 1) +dev[name.rstrip(":")] = value +# check what is the interface if any for an ssh connection if +# any to this host, so we can mark it later. +ssh_if = [] +route = check_output(["ip", "-o", "route"]) +# filter out all lines for 169.254 routes +route = "\n".join(filter(lambda ln: not ln.startswith("169.254"), + route.decode().splitlines())) +rt_info = route.split() +for i in range(len(rt_info) - 1): +if rt_info[i] == "dev": +ssh_if.append(rt_info[i+1]) + +# based on the basic info, get extended text details +for d in devices.keys(): +# get additional info and add it to existing data +devices[d] = devices[d].copy() +devices[d].update(get_pci_device_details(d).items()) + +for _if in ssh_if: +if _if in devices[d]["Interface"].split(","): +devices[d]["Ssh_if"] = True +devices[d]["Active"] = "*Active*" +break + +# add igb_uio to list of supporting modules if needed +if "Module_str" in devices[d]: +for driver in dpdk_drivers: +if driver not in devices[d]["Module_str"]: +devices[d]["Module_str"] = \ +devices[d]["Module_str"] + ",%s" % driver +else: +devices[d]["Module_str"] = ",".join(dpdk_drivers) + +# make sure the driver and module strings do not have any duplicates +if has_driver(d): +modules = devices[d]["Module_str"].split(",") +if devices[d]["Driver_str"] in modules: +modules.remove(devices[d]["Driver_str"]) +devices[d]["Module_str"] = ",".join(modules) + + def dev_id_from_dev_name(dev_name): '''Take a device "name" - a string passed in by user to identify a NIC device, and determine the device id - i.e. the domain:bus:slot.func - for @@ -480,15 +546,16 @@ def show_status(): dpdk_drv = [] no_drv = [] -# split our list of devices into the three categories above +# split our list of network devices into the three categories above for d in devices.keys(): -if not has_driver(d): -no_drv.append(devices[d]) -continue -if devices[d]["Driver_str"] in dpdk_drivers: -dpdk_drv.append(devices[d]) -else: -kernel_drv.append(devices[d]) +if (NETWORK_BASE_CLASS in devices[d]["Class"]): +if not has_driver(d): +no_drv.append(devices[d]) +continue +if devices[d]["Driver_str"] in dpdk_drivers: +dpdk_drv.append(devices[d]) +else: +kernel_drv.append(devices[d]) # print each category separately, so we can clearly see what's used by DPDK display_devices("Network devices using DPDK-compatible driver", dpdk_drv, @@ -498,6 +565,28 @@ def show_status(): "unused=%(Module_str)s %(Active)s") display_devices("Other network devices", no_drv,