summaryrefslogtreecommitdiff
path: root/INSTALL.DPDK.md
Commit message (Collapse)AuthorAgeFilesLines
* INSTALL.DPDK: Refactor DPDK install documentationBhanuprakash Bodireddy2016-07-061-877/+432
| | | | | | | | | | | | | | Refactor the INSTALL.DPDK in to two documents named INSTALL.DPDK and INSTALL.DPDK-ADVANCED. While INSTALL.DPDK document shall facilitate the novice user in setting up the OVS DPDK and running it out of box, the ADVANCED document is targeted at expert users looking for the optimum performance running dpdk datapath. This commit updates INSTALL.DPDK.md document. Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: NUMA Aware vHost UserCiara Loftus2016-06-171-2/+6
| | | | | | | | | | | | | | | | | | This commit allows for vHost User memory from QEMU, DPDK and OVS, as well as the servicing PMD, to all come from the same socket. The socket id of a vhost-user port used to be set to that of the master lcore. Now it is possible to update the socket id if it is detected (during VM boot) that the vhost device memory is not on this node. If this is the case, a new mempool is created from the new node, and the PMD thread currently servicing the port will no longer, in favour of a thread from the new node (if enabled in the pmd-cpu-mask). To avail of this functionality, one must enable the CONFIG_RTE_LIBRTE_VHOST_NUMA DPDK configuration option. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK: Replace tabs with spacesCiara Loftus2016-06-031-169/+173
| | | | | Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
* netdev-dpdk.c: Add ingress-policing functionality.Ian Stokes2016-05-241-0/+19
| | | | | | | | | | | | | | | | | This patch provides the modifications required in netdev-dpdk.c and vswitch.xml to enable ingress policing for DPDK interfaces. This patch implements the necessary netdev functions to netdev-dpdk.c as well as various helper functions required for ingress policing. The vswitch.xml has been modified to explain the expected parameters and behaviour when using ingress policing. The INSTALL.DPDK.md guide has been modified to provide an example configuration of ingress policing. Signed-off-by: Ian Stokes <ian.stokes@intel.com> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: Print default vhost-sock-dir value & update documentationCiara Loftus2016-05-061-4/+4
| | | | | | | | | | | When no vhost-sock-dir value is provided, print the default location. Update the documentation to reflect the fact that vhost-sock-dir values are now subdirectory loctions rather than full paths. Fixes: d8a8f353c23e ("netdev-dpdk: Restrict vhost_sock_dir") Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Aaron Conole <aconole@redhat.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
* netdev-dpdk: Allow arbitrary eal argumentsAaron Conole2016-04-291-0/+5
| | | | | | | | | | | | | | | | | | | A previous change moved some commonly used arguments from commandline to the database, and with it the ability to pass arbitrary arguments to EAL. This change allows arbitrary eal arguments to be provided via a new db entry 'other_config:dpdk-extra' which will tokenize the string and add it to the argument list. The only argument which will not be supported with this change is '--no-huge', which appears to break the system in other ways. Signed-off-by: Aaron Conole <aconole@redhat.com> Tested-by: Sean K Mooney <sean.k.mooney@intel.com> Tested-by: RobertX Wojciechowicz <robertx.wojciechowicz@intel.com> Tested-by: Kevin Traynor <kevin.traynor@intel.com> Acked-by: Panu Matilainen <pmatilai@redhat.com> Acked-by: Kevin Traynor <kevin.traynor@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: Convert initialization from cmdline to dbAaron Conole2016-04-291-19/+59
| | | | | | | | | | | | | | | | Existing DPDK integration is provided by use of command line options which must be split out and passed to librte in a special manner. However, this forces any configuration to be passed by way of a special DPDK flag, and interferes with ovs+dpdk packaging solutions. This commit delays dpdk initialization until after the OVS database connection is established, at which point ovs initializes librte. It pulls all of the config data from the OVS database, and assembles a new argv/argc pair to be passed along. Signed-off-by: Aaron Conole <aconole@redhat.com> Acked-by: Kevin Traynor <kevin.traynor@intel.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* Update relevant artifacts to add support for DPDK 16.04.mweglicx2016-04-151-13/+8
| | | | | | | | | | | | | | | | | | Following changes are applied: - INSTALL.DPDK.md: CONFIG_RTE_BUILD_COMBINE_LIBS step has been removed because it is no longer present in DPDK configuration (combined library is created by default), - INSTALL.DPDK.md: VHost Cuse configuration is updated, - netdev-dpdk.c: Link speed definition is changed in DPDK and netdev_dpdk_get_features is updated accordingly, - netdev-dpdk.c: TSO and checksum offload has been disabled for vhostuser device. - .travis/linux-build.sh: DPDK version is updated and legacy flags have been removed in configuration. Signed-off-by: Michal Weglicki <michalx.weglicki@intel.com> Signed-off-by: Panu Matilainen <pmatilai@redhat.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK: remove issue with QEMU v2.4.0 and dpdkvhostuserMauricio Vásquez2016-03-101-12/+0
| | | | | | | | | The patch mentioned in the commit e73b7508fb58 ("INSTALL.DPDK: Mention issue with QEMU v2.4.0 & dpdkvhostuser") is present in DPDK v2.2.0, then this issue is not valid anymore. Signed-off-by: Mauricio Vasquez B <mauricio.vasquezbernal@studenti.polito.it> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK.md: Installation steps correction for DPDK 2.2.mweglicx2016-03-021-2/+2
| | | | | | | | | Missing step added to INSTALL.DPDK.md which prevents installation error message. Signed-off-by: Michal Weglicki <michalx.weglicki@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev_dpdk.c: Add QoS functionality.Ian Stokes2016-03-021-0/+20
| | | | | | | | | | | | | | | | | | | | | | | This patch provides the modifications required in netdev-dpdk.c and vswitch.xml to allow for a DPDK user space QoS algorithm. This patch adds a QoS configuration structure for netdev-dpdk and expected QoS operations 'dpdk_qos_ops'. Various helper functions are also supplied. Also included are the modifications required for vswitch.xml to allow a new QoS implementation for netdev-dpdk devices. This includes a new QoS type `egress-policer` as well as its expected QoS table entries. The QoS functionality implemented for DPDK devices is `egress-policer`. This can be used to drop egress packets at a configurable rate. The INSTALL.DPDK.md guide has also been modified to provide an example configuration of `egress-policer` QoS. Signed-off-by: Ian Stokes <ian.stokes@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK: Add notes regarding vhost multiq configuration.Ian Stokes2016-02-241-0/+16
| | | | | | | | | | | Linux kernel network devices in a guest should have the number of multi-purpose channels configured when used with DPDK multiqueue on the host. This commit adds an example of how this can be done. Also add QEMU 2.5 requirements for multiqueue with DPDK in NEWS. Signed-off-by: Ian Stokes <ian.stokes@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: Do not add vhost-user ports with '/' or '\' in name.Daniele Di Proietto2016-02-231-1/+2
| | | | | | | | | | | | | | | This check prevents an obvious way for a vhost-user socket to escape the intended directory. There might be other ways to escape the directory (none comes to mind at the moment), but this is a problem that should be properly solved by mandatory access control. A similar check is done for a bridge name, since that name is used as part of a socket as well. Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Flavio Leitner <fbl@sysclose.org>
* dpif-netdev: Add dpif-netdev/pmd-rxq-show appctl command.Ilya Maximets2016-02-221-3/+6
| | | | | | | | | | | | | This command can be used to check the port/rxq assignment to pmd threads. For each pmd thread of the datapath shows list of queue-ids with port names. Additionally log message from pmd_thread_main() extended with queue-id, and type of this message changed from INFO to DBG. Signed-off-by: Ilya Maximets <i.maximets@samsung.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK.md: Correct mergeable buffers parameter.Ian Stokes2016-02-191-1/+1
| | | | | | | | | Update the mergeable buffers paramaters in performance tuning to the correct parameter mrg_rxbuf. Signed-off-by: Ian Stokes <ian.stokes@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK: Update details of XL710 restrictions for DPDK 2.2.Ian Stokes2016-02-191-11/+11
| | | | | | | | | | DPDK 2.2 removes restrictions related to maximum number of TX queues for XL710 devices. Update documentation to reflect these changes. Signed-off-by: Ian Stokes <ian.stokes@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* dpif-netdev: Allow different numbers of rx queues for different ports.Ilya Maximets2016-02-041-5/+12
| | | | | | | | | | | | | | | | | | | Currently, all of the PMD netdevs can only have the same number of rx queues, which is specified in other_config:n-dpdk-rxqs. Fix that by introducing of new option for PMD interfaces: 'n_rxq', which specifies the maximum number of rx queues to be created for this interface. Example: ovs-vsctl set Interface dpdk0 options:n_rxq=8 Old 'other_config:n-dpdk-rxqs' deleted. Signed-off-by: Ilya Maximets <i.maximets@samsung.com> Acked-by: Ben Pfaff <blp@ovn.org> Acked-by: Flavio Leitner <fbl@sysclose.org> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* netdev-dpdk: Add vhost-user multiqueue supportFlavio Leitner2016-01-281-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | Most of the network cards today supports multiple receive and transmit queues (MQ). The core idea is that on packet reception, a NIC can send different packets to different queues to distribute processing among CPUs running in parallel. The packet distribution is based on a result of a filter applied on each packet headers. The filter should keep all packets from the same flow on the same queue to avoid re-ordering while distributing different flows among all available queues. This is how the packet moves in a typical vhost-user use-case: NIC OVS DPDK port ==== bridge --- vhost-user ==== qemu ==== virtio eth0 The DPDK ports, OVS bridges, virtio network driver and recently QEMU (vhost-user) supports MQ. This patch adds MQ support to OVS that leverages DPDK vhost library to implement vhost-user interfaces. Signed-off-by: Flavio Leitner <fbl@sysclose.org> Acked-by: Kevin Traynor <kevin.traynor@intel.com> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* Update relevant artifacts to add support for DPDK v2.2.0.mweglicx2016-01-251-5/+5
| | | | | | | | | Following changes have been applied: - INSTALL.DPDK.md: change DPDK version number, - build.sh: change DPDK version number. Signed-off-by: Michal Weglicki <michalx.weglicki@intel.com> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK: Mention issue with QEMU v2.4.0 & dpdkvhostuserCiara Loftus2015-11-061-0/+12
| | | | | | | | | | Currently when using QEMU v2.4.0+, two (or more) dpdkvhostuser ports cannot be unbound from the kernel driver in the guest without causing the ovs-vswitchd process to crash. Document this limitation and potential workarounds. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK.md: Fix small documentation error in ovs with DPDK installationMauricio Vásquez2015-10-291-1/+1
| | | | | | | | The openvswitch directory does not exist anymore, boot.sh and configure are located at $(OVS_DIR). Signed-off-by: Mauricio Vasquez B <mauricio.vasquezbernal@studenti.polito.it> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* docs: Expand performance tuning section in INSTALL.DPDK.md.Kevin Traynor2015-09-161-39/+202
| | | | | | | Split performance tuning into dedicated section and add more detail. Signed-off-by: Kevin Traynor <kevin.traynor@intel.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* dpdk: add support for v2.1.0Timo Puha2015-09-081-11/+6
| | | | | | | | | | | | | | | | | | | | Update relevant artifacts to add support for DPDK v2.1.0 - INSTALL.DPDK.md - acinclude.m4: Change DPDK library name - netdev-dpdk: Limit minimum mbuf size to to adapt to DPDK bug fix that changes the treatment of the requested mbuf size - build.sh: Change DPDK version number Note that this breaks compatibility with DPDK v2.0.0 although only for the library name change. Note that throughput for vhost ports with mergeable buffers is reduced about 10% due to a necessary bug fix in DPDK vhost code. Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Signed-off-by: Michal Weglicki <michalx.weglicki@intel.com> Signed-off-by: Timo Puha <timox.puha@intel.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
* INSTALL.DPDK: Fix a typo.Russell Bryant2015-09-041-3/+3
| | | | | | | | | I started by just fixing s/expect/expects/ and made a couple more tweaks to the short paragraph while I was in there. Signed-off-by: Russell Bryant <rbryant@redhat.com> Acked-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* INSTALL.DPDK.md: Add details of XL710 restrictions for DPDKIan Stokes2015-08-061-0/+13
| | | | | | | | | | Currently there are restrictions regarding the use of the XL710 network interface with OVS and DPDK. This patch details those restrictions in INSTALL.DPDK.md. Signed-off-by: Ian Stokes <ian.stokes@intel.com> Signed-off-by: Ethan Jackson <ethan@nicira.com> Acked-by: Ethan Jackson <ethan@nicira.com>
* treewide: Fix doubled "the".Ben Pfaff2015-08-031-1/+1
| | | | | Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Russell Bryant <rbryant@redhat.com>
* INSTALL.DPDK.md: Fix wrong command for creating dpdkvhostuser.Wei li2015-07-011-2/+2
| | | | | Signed-off-by: Wei li <liw@dtdream.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* netdev-dpdk: add dpdk vhost-user portsCiara Loftus2015-06-141-34/+160
| | | | | | | | | | | | | | | | | | This patch adds support for a new port type to the userspace datapath called dpdkvhostuser. A new dpdkvhostuser port will create a unix domain socket which when provided to QEMU is used to facilitate communication between the virtio-net device on the VM and the OVS port on the host. vhost-cuse ('dpdkvhost') ports are still available as 'dpdkvhostcuse' ports and will be enabled if vhost-cuse support is detected in the DPDK build specified during compilation of the switch. Otherwise, vhost-user ports are enabled. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
* netdev-dpdk: Properly support non pmd threads.Daniele Di Proietto2015-05-221-3/+0
| | | | | | | | | | | | | We used to reserve DPDK lcore 0 for non pmd operations, making it difficult to use core 0 for packet processing. DPDK 2.0 properly support non EAL threads with lcore LCORE_ID_ANY. Using non EAL threads for non pmd threads, we do not need to reserve any core for non pmd operations Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Signed-off-by: Ethan Jackson <ethan@nicira.com> Acked-by: Ethan Jackson <ethan@nicira.com>
* INSTALL.DPDK: Notes on running ovs-vswitchd/dpdk inside a VMOleg Strikov2015-05-121-0/+18
| | | | | | | | | | | | Additional configuration is required if you want to run ovs-vswitchd with DPDK backend inside a QEMU virtual machine. This happens because, by default, virtio NIC provided to the guest doesn't support multiple TX queues which are required by ovs-vswitchd/dpdk. This commit updates INSTALL.DPDK.md to provide guidelines on how to enable support for multiple TX queues using QEMU command line and Libvirt config file. Signed-off-by: Oleg Strikov <oleg.strikov@canonical.com> Acked-by: Pravin B Shelar <pshelar@nicira.com>
* docs: Clarify creation & bonding of DPDK enabled interfaces.Billy O'Mahony2015-05-071-0/+8
| | | | | | | | | | Unlike system interfaces, DPDK enabled interfaces must have their interface type explicitly set when used to create ports. Mention this in relevant parts of the documentation and add references to INTALL.DPDK.md, where there are many examples. Signed-off-by: Billy O'Mahony <billy.o.mahony@intel.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* DPDK: add support for v2.0.0Mark Kavanagh2015-04-291-4/+9
| | | | | | | | | | | | | | Update relevant artifacts to add support for DPDK v2.0.0 - INSTALL.DPDK.md - travis build script - acinclude.m4: add 'mssse3' flag to OVS_CFLAGS - netdev-dpdk: fix build with unified offload types in DPDK v2.0.0 Note that this breaks compatibility with DPDK v1.8.0 Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Signed-off-by: Panu Matilainen <pmatilai@redhat.com> Acked-by: Pravin B Shelar <pshelar@nicira.com>
* INSTALL.DPDK.md: Update ivshmem page size restrictionsMark D. Gray2015-04-141-4/+10
| | | | | | | | | | Update ivshmem restrictions to indicate that ivshmem does not currently support small pages when sharing with a guest operating system. Reported-by: Daniele Di Proietto <diproiettod@vmware.com> Signed-off-by: Mark D. Gray <mark.d.gray@intel.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* INSTALL.DPDK.md: Fix whitespace.Mark D. Gray2015-04-141-2/+2
| | | | | Signed-off-by: Mark D. Gray <mark.d.gray@intel.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* dpif-netdev: Add dpif-netdev/pmd-stats-* appctl commands.Daniele Di Proietto2015-04-141-0/+8
| | | | | | | | | | | | | | | | These commands can be used to get packets and cycles counters on a pmd thread basis. They're useful to get a clearer picture about the performance of the userspace datapath. They export these pieces of information: - A (per-thread) view of the caches hit rate. Hits in the exact match cache are reported separately from hits in the masked classifier - A rough cycles count. This will allow to estimate the load of OVS and the polling overhead. Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Ethan Jackson <ethan@nicira.com>
* INSTALL.DPDK.md: Terminate code section.Russell Bryant2015-03-231-0/+1
| | | | | | | | | Add a missing terminator for a code section. Without this, the rendering on github at least shows the rest of the file as a code block. Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* DPDK: Update documentation and travis build for vhost.Daniele Di Proietto2015-03-201-12/+9
| | | | | | | | DPDK vhost support is mandatory to compile OVS with DPDK. This commit updates INSTALL.DPDK.md and the travis build procedure to reflect that. Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Pravin B Shelar <pshelar@nicira.com>
* netdev-dpdk: add dpdk vhost-cuse portsKevin Traynor2015-03-191-1/+253
| | | | | | | | | | | | | | | This patch adds support for a new port type to userspace datapath called dpdkvhost. This allows KVM (QEMU) to offload the servicing of virtio-net devices to its associated dpdkvhost port. Instructions for use are in INSTALL.DPDK. This has been tested on Intel multi-core platforms and with clients that have virtio-net interfaces. Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Signed-off-by: Kevin Traynor <kevin.traynor@intel.com> Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
* lib: upgrade to DPDK v1.8.0Mark Kavanagh2015-03-041-3/+3
| | | | | | | | | | | | | DPDK v1.8.0 makes significant changes to struct rte_mbuf, including removal of the 'pkt' and 'data' fields. The latter, formally a pointer, is now calculated via an offset from the start of the segment buffer. So now dp_packet data is also stored as offset from base pointer. Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Signed-off-by: Rory Sexton <rory.sexton@intel.com> Signed-off-by: Kevin Traynor <kevin.traynor@intel.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
* INSTALL.DPDK: Update documentation to indicate VFIO supportMark D. Gray2015-01-291-3/+22
| | | | | | | | | | | | | | Since DPDK 1.7, VFIO is supported in place of UIO. This allows a user to avoid having to insert a non-standard kernel module. This patch updates the documentation with instructions for setting up OVS with VFIO. As part of this work, VFIO was also successfully tested with OVS and the DPDK netdev. [tgraf: Added some more markdown formatting] Signed-off-by: Mark D. Gray <mark.d.gray@intel.com> Signed-off-by: Thomas Graf <tgraf@noironetworks.com>
* INSTALL.DPDK.md: Provide a little a more consistency to documentation.Gurucharan Shetty2015-01-261-42/+50
| | | | | | | | | | | | | | | | A few users (based on the reports in discuss@openvswitch.org) have been literally following the instructions in INSTALL.DPDK.md and mixing up pre-installed utilities and daemons with freshly compiled utilities because the current documentation does not consistently call out using utilities from the compiled sources. This commit updates DPDK documentation to ask users to do a 'make install' and then use the utilities and daemons directly from Linux PATH. It also adds github markup where applicable. Reported-by: Arkajit Ghosh <arkajit.ghosh@tcs.com> Signed-off-by: Gurucharan Shetty <gshetty@nicira.com> Acked-by: Pravin B Shelar <pshelar@nicira.com>
* doc: Add more cross references between docsThomas Graf2014-10-301-3/+5
| | | | | | | Suggested-by: Lori Jakab <lojakab@cisco.com> Signed-off-by: Thomas Graf <tgraf@noironetworks.com> Reviewed-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
* doc: Convert docs to Markdown languageThomas Graf2014-10-281-0/+284
Converts the majority of docs over to use the Markdown language for pretty printing on GitHub. It's a rough first convertion without exploiting the full potential of Markdown at this point. Section titles and indentation are fixed as needed. Minimal docs interlinking is added. Signed-off-by: Thomas Graf <tgraf@noironetworks.com> Signed-off-by: Ben Pfaff <blp@nicira.com>