Not super important, but can we support detaching vdevs? I'd like to see an example of usage with af_packet devices on the documentation, but I can add that later.
Thanks, Daniele 2016-12-13 11:22 GMT-08:00 Ciara Loftus <[email protected]>: > 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 <[email protected]> > --- > Documentation/intro/install/dpdk-advanced.rst | 22 ++++++++++++++++++++++ > NEWS | 1 + > lib/netdev-dpdk.c | 21 +++++++++++++++++++++ > vswitchd/vswitch.xml | 9 +++++++-- > 4 files changed, 51 insertions(+), 2 deletions(-) > > diff --git a/Documentation/intro/install/dpdk-advanced.rst > b/Documentation/intro/install/dpdk-advanced.rst > index 858ff98..0384330 100644 > --- a/Documentation/intro/install/dpdk-advanced.rst > +++ b/Documentation/intro/install/dpdk-advanced.rst > @@ -956,6 +956,28 @@ This feature is not supported with VFIO and could 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 > +------------ > + > +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 > + > +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. > + > Bug Reporting > ------------- > > diff --git a/NEWS b/NEWS > index a62a7a4..2215066 100644 > --- a/NEWS > +++ b/NEWS > @@ -44,6 +44,7 @@ Post-v2.6.0 > * Port Hotplug is now supported. > * DPDK physical ports can now have arbitrary names. The PCI address of > the device must be set using the 'dpdk-devargs' option. > + * 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 07a99c7..872ce63 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -1124,6 +1124,24 @@ netdev_dpdk_process_pdevargs(struct netdev_dpdk *dev, > const char *devargs, > return 0; > } > > +static int > +netdev_dpdk_process_vdevargs(struct netdev_dpdk *dev, const char *devargs) > +{ > + uint8_t port_id; > + > + if (!rte_eth_dev_attach(devargs, &port_id)) { > + /* Attach successful */ > + VLOG_INFO("Port '%s' attached to DPDK as virtual device", > + dev->up.name); > + dev->port_id = port_id; > + } else { > + /* Attach unsuccessful */ > + return -1; > + } > + > + return 0; > +} > + > static void > netdev_dpdk_process_devargs(struct netdev_dpdk *dev) > OVS_REQUIRES(dev->mutex) > @@ -1134,6 +1152,9 @@ netdev_dpdk_process_devargs(struct netdev_dpdk *dev) > if (!eal_parse_pci_DomBDF(dev->requested_devargs, &addr)) { > /* Valid PCI address format detected - configure physical device */ > err = netdev_dpdk_process_pdevargs(dev, dev->requested_devargs, > &addr); > + } else { > + /* Not a PCI device format - configure virtual device (vdev) */ > + err = netdev_dpdk_process_vdevargs(dev, dev->requested_devargs); > } > > if (!err) { > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml > index 23ab469..7c6f229 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 > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
