[dpdk-dev] [PATCH v2] tools: add crypto device details

2016-09-13 Thread De Lara Guarch, Pablo

> -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

2016-08-25 Thread Jain, Deepak K


> -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

2016-08-25 Thread Eoin Breen
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,