[dpdk-dev] [PATCH v1] dpdk-devbind.py: Virtio interface issue.

Neil Horman nhorman at tuxdriver.com
Tue Aug 30 14:56:33 CEST 2016


On Mon, Aug 29, 2016 at 11:16:35PM +0000, Dey, Souvik wrote:
> Hi,
> 
> I already followed the 100% python way and submitted the v3 of this patch. http://dpdk.org/dev/patchwork/patch/15378/
> How will your patch be different in solving the issue. There will always be multiple ways to solving things right.
> 
As stephen says, using popen is a bit of a hack here.  You could easily use one
of several python-sysfs libraries to simplify the sysfs enumeration and
discovery process
Neil

> 
> V3 of my submitted patch:
> 
> diff --git a/tools/dpdk-devbind.py b/tools/dpdk-devbind.py
> index b69ca2a..c0b46ee 100755
> --- a/tools/dpdk-devbind.py
> +++ b/tools/dpdk-devbind.py
> @@ -36,6 +36,7 @@  import sys
>  import os
>  import getopt
>  import subprocess
> +
>  from os.path import exists, abspath, dirname, basename
>  
>  # The PCI base class for NETWORK devices
> @@ -222,8 +223,19 @@  def get_pci_device_details(dev_id):
>          device[name] = value
>      # check for a unix interface name
>      sys_path = "/sys/bus/pci/devices/%s/net/" % dev_id
> +    # the path for virtio devices are different, so get the correct path
> +    virtio = "/sys/bus/pci/devices/%s/" % dev_id
> +    ls = subprocess.Popen(['ls', virtio], stdout=subprocess.PIPE)
> +    grep = subprocess.Popen('grep virt'.split(), stdin=ls.stdout,
> +                            stdout=subprocess.PIPE)
> +    ls.stdout.close()
> +    virtio = grep.communicate()[0].rstrip()
> +    ls.wait()
> +    virtio_sys_path = "/sys/bus/pci/devices/%s/%s/net/" % (dev_id, virtio)
>      if exists(sys_path):
>          device["Interface"] = ",".join(os.listdir(sys_path))
> +    elif exists(virtio_sys_path):
> +        device["Interface"] = ",".join(os.listdir(virtio_sys_path))
>      else:
>          device["Interface"] = ""
>      # check if a port is used for ssh connection
> 
> 
> -----Original Message-----
> From: Mussar, Gary [mailto:gmussar at ciena.com] 
> Sent: Monday, August 29, 2016 11:10 AM
> To: Dey, Souvik <sodey at sonusnet.com>; Stephen Hemminger <stephen at networkplumber.org>
> Cc: nhorman at tuxdriver.com; dev at dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v1] dpdk-devbind.py: Virtio interface issue.
> 
> We did this slightly differently. This is 100% python and is a bit more general. We search for the first "net" directory under the specific device directory.
> 
> -------------------------------------------
> --- tools/dpdk-devbind.py       2016-08-29 11:02:35.594202888 -0400
> +++ ../dpdk/tools/dpdk-devbind.py 2016-08-29 11:00:34.897677233 -0400
> @@ -221,11 +221,11 @@
>          name = name.strip(":") + "_str"
>          device[name] = value
>      # check for a unix interface name
> -    sys_path = "/sys/bus/pci/devices/%s/net/" % dev_id
> -    if exists(sys_path):
> -        device["Interface"] = ",".join(os.listdir(sys_path))
> -    else:
> -        device["Interface"] = ""
> +    device["Interface"] = ""
> +    for base, dirs, files in os.walk("/sys/bus/pci/devices/%s/" % dev_id):
> +        if "net" in dirs:
> +            device["Interface"] = ",".join(os.listdir(os.path.join(base,"net")))
> +            break
>      # check if a port is used for ssh connection
>      device["Ssh_if"] = False
>      device["Active"] = ""
> -------------------------------------------
> 
> Gary
> 
> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Dey, Souvik
> Sent: Friday, August 26, 2016 8:21 PM
> To: Stephen Hemminger
> Cc: nhorman at tuxdriver.com; dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v1] dpdk-devbind.py: Virtio interface issue.
> 
> Hi ,
> 	I have already updated it and have re submitted the patch v3. Can you please check that http://dpdk.org/dev/patchwork/patch/15378/
> --
> Regards,
> Souvik
> 
> -----Original Message-----
> From: Stephen Hemminger [mailto:stephen at networkplumber.org] 
> Sent: Friday, August 26, 2016 11:55 AM
> To: Dey, Souvik <sodey at sonusnet.com>
> Cc: nhorman at tuxdriver.com; dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v1] dpdk-devbind.py: Virtio interface issue.
> 
> On Wed, 24 Aug 2016 22:25:46 -0400
> souvikdey33 <sodey at sonusnet.com> wrote:
> 
> > +    #The path for virtio devices are different. Get the correct path.
> > +	virtio = "/sys/bus/pci/devices/%s/" % dev_id
> > +    cmd = " ls %s | grep 'virt' " %virtio
> > +    virtio = commands.getoutput(cmd)
> > +    virtio_sys_path = "/sys/bus/pci/devices/%s/%s/net/" % 
> > +(dev_id,virtio)
> >      if exists(sys_path):
> >          device["Interface"] = ",".join(os.listdir(sys_path))
> 
> There should be a way to do this in python without going out to shell.
> This would be safer and more secure.
> 
> The code already uses os.listdir() (which is the python library version of ls) in later section. Why not use that here to check for virtio bus.
> 


More information about the dev mailing list