2017-01-04 7:31 GMT-08:00 Ciara Loftus <ciara.lof...@intel.com>: > Prior to this commit, the 'dpdk' port type could only be used for > physical DPDK devices. Now, virtual devices (or 'vdevs') are supported. > 'vdev' devices are those which use virtual DPDK Poll Mode Drivers eg. > null, pcap. To add a DPDK vdev, a valid 'dpdk-devargs' must be set for > the given dpdk port. The format expected is 'eth_<driver_name><x>' where > 'x' is a number between 0 and RTE_MAX_ETHPORTS -1. > > For example to add a port that uses the 'null' DPDK PMD driver: > > ovs-vsctl set Interface null0 options:dpdk-devargs=eth_null0 > > Not all DPDK vdevs have been verified to work at this point in time. > > Signed-off-by: Ciara Loftus <ciara.lof...@intel.com>
Thanks, for the new version. I have a minor suggestion below. If you want to incorporate the comments on the series and respin I'd appreciate that. Otherwise I can fix the series before pushing it Thanks, Daniele > --- > Changelog: > * Updated process_vdevargs to work with Daniele's incremental in the > previous patch. > * Allow vdev detach > * Update docs to show af_packet example > > Documentation/howto/dpdk.rst | 29 +++++++++++++++++++++++++++++ > NEWS | 1 + > lib/netdev-dpdk.c | 35 +++++++++++------------------------ > vswitchd/vswitch.xml | 9 +++++++-- > 4 files changed, 48 insertions(+), 26 deletions(-) > > diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst > index df5db71..fc2f81e 100644 > --- a/Documentation/howto/dpdk.rst > +++ b/Documentation/howto/dpdk.rst > @@ -324,6 +324,35 @@ This feature is not supported with VFIO and does not > work with some NICs. > For more information please refer to the `DPDK Port Hotplug Framework > > <http://dpdk.org/doc/guides/prog_guide/port_hotplug_framework.html#hotplug>`__. > > +.. _vdev-support: > + > +Vdev Support > +------------ > + > +DPDK provides drivers for both physical and virtual devices. Physical DPDK > +devices are added to OVS by specifying a valid PCI address in 'dpdk-devargs'. > +Virtual DPDK devices which do not have PCI addresses can be added using a > +different format for 'dpdk-devargs'. > + > +Typically, the format expected is 'eth_<driver_name><x>' where 'x' is a > +number between 0 and RTE_MAX_ETHPORTS -1 (31). > + > +For example to add a dpdk port that uses the 'null' DPDK PMD driver: > + > + $ ovs-vsctl add-port br0 null0 -- set Interface null0 type=dpdk \ > + options:dpdk-devargs=eth_null0 > + > +Similarly, to add a dpdk port that uses the 'af_packet' DPDK PMD driver: > + > + $ ovs-vsctl add-port br0 af0 -- set Interface af0 type=dpdk \ > + options:dpdk-devargs=eth_af_packet0 How about a real example? $ ovs-vsctl add-port br0 myeth0 -- set Interface myeth0 type=dpdk \ options:dpdk-devargs=eth_af_packet0,iface=eth0 > + > +More information on the different types of virtual DPDK PMDs can be found in > +the `DPDK documentation > +<http://dpdk.org/doc/guides/nics/overview.html>`__. > + > +Note: Not all DPDK virtual PMD drivers have been tested and verified to work. > + > .. _dpdk-ovs-in-guest: > > OVS with DPDK Inside VMs > diff --git a/NEWS b/NEWS > index d66d402..cc319a9 100644 > --- a/NEWS > +++ b/NEWS > @@ -53,6 +53,7 @@ Post-v2.6.0 > with the old dpdk<portid> naming scheme is broken, and as such a > device will not be available for use until a valid dpdk-devargs is > specified. > + * Virtual DPDK Poll Mode Driver (vdev PMD) support. > - Fedora packaging: > * A package upgrade does not automatically restart OVS service. > - ovs-vswitchd/ovs-vsctl: > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > index ba4935e..170d01a 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -1134,25 +1134,19 @@ netdev_dpdk_lookup_by_port_id(int port_id) > static int > netdev_dpdk_process_devargs(const char *devargs) > { > - struct rte_pci_addr addr; > uint8_t new_port_id = UINT8_MAX; > > - if (!eal_parse_pci_DomBDF(devargs, &addr)) { > - /* Valid PCI address format detected - configure physical device */ > - if (!rte_eth_dev_count() > - || rte_eth_dev_get_port_by_name(devargs, &new_port_id) > - || !rte_eth_dev_is_valid_port(new_port_id)) { > - /* PCI device not found in DPDK, attempt to attach it */ > - if (!rte_eth_dev_attach(devargs, &new_port_id)) { > - /* Attach successful */ > - VLOG_INFO("Device "PCI_PRI_FMT" has been attached to DPDK", > - addr.domain, addr.bus, addr.devid, addr.function); > - } else { > - /* Attach unsuccessful */ > - VLOG_INFO("Error attaching device "PCI_PRI_FMT" to DPDK", > - addr.domain, addr.bus, addr.devid, addr.function); > - return -1; > - } > + if (!rte_eth_dev_count() > + || rte_eth_dev_get_port_by_name(devargs, &new_port_id) > + || !rte_eth_dev_is_valid_port(new_port_id)) { > + /* Device not found in DPDK, attempt to attach it */ > + if (!rte_eth_dev_attach(devargs, &new_port_id)) { > + /* Attach successful */ > + VLOG_INFO("Device '%s' attached to DPDK", devargs); > + } else { > + /* Attach unsuccessful */ > + VLOG_INFO("Error attaching device '%s' to DPDK", devargs); > + return -1; > } > } > > @@ -2459,17 +2453,10 @@ netdev_dpdk_detach(struct unixctl_conn *conn, int > argc OVS_UNUSED, > char *response; > uint8_t port_id; > char devname[RTE_ETH_NAME_MAX_LEN]; > - struct rte_pci_addr addr; > struct netdev_dpdk *dev; > > ovs_mutex_lock(&dpdk_mutex); > > - if (eal_parse_pci_DomBDF(argv[1], &addr)) { > - response = xasprintf("Invalid PCI address '%s'. Cannot detach.", > - argv[1]); > - goto error; > - } > - > if (!rte_eth_dev_count() || rte_eth_dev_get_port_by_name(argv[1], > &port_id)) { > response = xasprintf("Device '%s' not found in DPDK", argv[1]); > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml > index c34c295..b899617 100644 > --- a/vswitchd/vswitch.xml > +++ b/vswitchd/vswitch.xml > @@ -2306,8 +2306,13 @@ > <column name="options" key="dpdk-devargs" > type='{"type": "string"}'> > <p> > - Specifies the PCI address of a physical dpdk device. > - Only supported by 'dpdk' devices. > + Specifies the PCI address associated with the port for physical > + devices, or the virtual driver to be used for the port when a > virtual > + PMD is intended to be used. For the latter, the argument string > + typically takes the form of eth_<driver_name><x> where > + 'driver_name' is a valid virtual DPDK PMD driver name and where 'x' > + lies in the range of 0 to RTE_MAX_ETHPORTS-1. > + Only supported by the dpdk port type. > </p> > </column> > > -- > 2.4.3 > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev