diff mbox

[ovs-dev,RFC,1/1] netdev-dpdk: add DPDK pdump capability

Message ID 1469786288-7012-2-git-send-email-ciara.loftus@intel.com
State Superseded
Delegated to: Daniele Di Proietto
Headers show

Commit Message

Ciara Loftus July 29, 2016, 9:58 a.m. UTC
This commit provides the ability to 'listen' on DPDK ports and save
packets to a pcap file with a DPDK app that uses the librte_pdump
library. One such app is the 'pdump' app that can be found in the DPDK
'app' directory. Instructions on how to use this can be found in
INSTALL.DPDK-ADVANCED.md

The pdump feature is optional. Should you wish to use it, pcap libraries
must to be installed on the system and the CONFIG_RTE_LIBRTE_PMD_PCAP=y
and CONFIG_RTE_LIBRTE_PDUMP=y options set in DPDK. Additionally you must
set the 'dpdk-pdump' ovs other_config DB value to 'true'.

Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
---
 INSTALL.DPDK-ADVANCED.md | 27 +++++++++++++++++++++++++--
 NEWS                     |  1 +
 acinclude.m4             | 23 +++++++++++++++++++++++
 lib/netdev-dpdk.c        | 19 +++++++++++++++++++
 vswitchd/vswitch.xml     | 12 ++++++++++++
 5 files changed, 80 insertions(+), 2 deletions(-)

Comments

Mooney, Sean K July 29, 2016, 11:10 a.m. UTC | #1
This looks like a nice useablity feature to add.
Two questions inline 
Regards sean.

> -----Original Message-----

> From: dev [mailto:dev-bounces@openvswitch.org] On Behalf Of Ciara Loftus

> Sent: Friday, July 29, 2016 10:58 AM

> To: dev@openvswitch.org

> Subject: [ovs-dev] [PATCH RFC 1/1] netdev-dpdk: add DPDK pdump capability

> 

> This commit provides the ability to 'listen' on DPDK ports and save packets to a

> pcap file with a DPDK app that uses the librte_pdump library. One such app is the

> 'pdump' app that can be found in the DPDK 'app' directory. Instructions on how to

> use this can be found in INSTALL.DPDK-ADVANCED.md

> 

> The pdump feature is optional. Should you wish to use it, pcap libraries must to

> be installed on the system and the CONFIG_RTE_LIBRTE_PMD_PCAP=y and

> CONFIG_RTE_LIBRTE_PDUMP=y options set in DPDK. Additionally you must set

> the 'dpdk-pdump' ovs other_config DB value to 'true'.

> 

> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>

> ---

>  INSTALL.DPDK-ADVANCED.md | 27 +++++++++++++++++++++++++--

>  NEWS                     |  1 +

>  acinclude.m4             | 23 +++++++++++++++++++++++

>  lib/netdev-dpdk.c        | 19 +++++++++++++++++++

>  vswitchd/vswitch.xml     | 12 ++++++++++++

>  5 files changed, 80 insertions(+), 2 deletions(-)

> 

> diff --git a/INSTALL.DPDK-ADVANCED.md b/INSTALL.DPDK-ADVANCED.md index

> ec1de29..0ffafa3 100644

> --- a/INSTALL.DPDK-ADVANCED.md

> +++ b/INSTALL.DPDK-ADVANCED.md

> @@ -11,7 +11,8 @@ OVS DPDK ADVANCED INSTALL GUIDE  6. [Vhost

> Walkthrough](#vhost)  7. [QOS](#qos)  8. [Rate Limiting](#rl) -9.

> [Vsperf](#vsperf)

> +9. [Pdump](#pdump)

> +10. [Vsperf](#vsperf)

> 

>  ## <a name="overview"></a> 1. Overview

> 

> @@ -827,7 +828,29 @@ To clear the ingress policer configuration from the port

> use the following:

> 

>  For more details regarding ingress-policer see the vswitch.xml.

> 

> -## <a name="vsperf"></a> 9. Vsperf

> +## <a name="pdump"></a> 9. Pdump

> +

> +Pdump allows you to listen on DPDK ports and view the traffic that is

> +passing on them. To use this utility, one must have libpcap installed

> +on the system. Furthermore, DPDK must be built with

> +CONFIG_RTE_LIBRTE_PDUMP=y and CONFIG_RTE_LIBRTE_PMD_PCAP=y. And

> +finally, the following database value must be set before launching the switch,

> like so:

> +

> +`ovs-vsctl set Open_vSwitch . other_config:dpdk-pdump=true`

> +

> +To use pdump, simply launch OVS as usual. Then, navigate to the 'app/pdump'

> +directory in DPDK, 'make' the application and run like so:

> +

> +`sudo ./build/app/dpdk_pdump -- --pdump

> +'port=0,queue=0,rx-dev=/tmp/rx.pcap'`

[Mooney, Sean K] can the dpdk_pdump utility dump non dpdk physical ports such as
Vhost-user ports or dump all queues on a port at the same time? 
Am I correct in saying that Port=0 in this case indicate the first index in the dpdk port
list which is dpdk0 from an ovs perspective or is this the port id as shown in ovs-appctl dpctl/show?
> +

> +The above command captures traffic received on queue 0 of port 0 and

> +stores it in /tmp/rx.pcap. Other combinations of port numbers, queues

> +numbers and pcap locations are of course also available to use.

> +

> +A small performance decrease is seen when dpdk-pdump=true. This

> +decrease is larger when using a monitoring application like the DPDK pdump

> app.

> +

> +## <a name="vsperf"></a> 10. Vsperf

> 

>  Vsperf project goal is to develop vSwitch test framework that can be used to

> validate the suitability of different vSwitch implementations in a Telco

> deployment diff --git a/NEWS b/NEWS index 32975b0..f59b3b0 100644

> --- a/NEWS

> +++ b/NEWS

> @@ -64,6 +64,7 @@ Post-v2.5.0

>       * Basic connection tracking for the userspace datapath (no ALG,

>         fragmentation or NAT support yet)

>       * Support for DPDK 16.07

> +     * Optional support for DPDK pdump enabled.

>     - Increase number of registers to 16.

>     - ovs-benchmark: This utility has been removed due to lack of use and

>       bitrot.

> diff --git a/acinclude.m4 b/acinclude.m4 index faf79eb..0c1dafd 100644

> --- a/acinclude.m4

> +++ b/acinclude.m4

> @@ -211,6 +211,29 @@ AC_DEFUN([OVS_CHECK_DPDK], [

> 

>      AC_SEARCH_LIBS([get_mempolicy],[numa],[],[AC_MSG_ERROR([unable to

> find libnuma, install the dependency package])])

> 

> +    AC_COMPILE_IFELSE([

> +      AC_LANG_PROGRAM(

> +        [

> +          #include <rte_config.h>

> +#if RTE_LIBRTE_PMD_PCAP

> +#error

> +#endif

> +        ], [])

> +      ], [],

> +      [AC_SEARCH_LIBS([pcap_dump],[pcap],[],[AC_MSG_ERROR([unable to find

> libpcap, install the dependency package])])

> +       DPDK_EXTRA_LIB="-lpcap"

> +       AC_COMPILE_IFELSE([

> +         AC_LANG_PROGRAM(

> +           [

> +             #include <rte_config.h>

> +#if RTE_LIBRTE_PDUMP

> +#error

> +#endif

> +         ], [])

> +       ], [],

> +       [AC_DEFINE([DPDK_PDUMP], [1], [DPDK pdump enabled in OVS.])])

> +     ])

> +

>      # On some systems we have to add -ldl to link with dpdk

>      #

>      # This code, at first, tries to link without -ldl (""), diff --git a/lib/netdev-dpdk.c

> b/lib/netdev-dpdk.c index f21ddcc..e52ad6f 100644

> --- a/lib/netdev-dpdk.c

> +++ b/lib/netdev-dpdk.c

> @@ -57,6 +57,9 @@

>  #include "rte_config.h"

>  #include "rte_mbuf.h"

>  #include "rte_meter.h"

> +#ifdef DPDK_PDUMP

> +#include "rte_pdump.h"

> +#endif

>  #include "rte_virtio_net.h"

> 

>  VLOG_DEFINE_THIS_MODULE(dpdk);

> @@ -3193,6 +3196,7 @@ dpdk_init__(const struct smap *ovs_other_config)

> #ifndef VHOST_CUSE

>      char *sock_dir_subcomponent;

>  #endif

> +    bool set_pdump = false;

> 

>      if (!smap_get_bool(ovs_other_config, "dpdk-init", false)) {

>          VLOG_INFO("DPDK Disabled - to change this requires a restart.\n"); @@ -

> 3333,6 +3337,21 @@ dpdk_init__(const struct smap *ovs_other_config)

> 

>      dpdk_vhost_class_init();

> 

> +    set_pdump = smap_get_bool(ovs_other_config, "dpdk-pdump", false);

> +

> +    if (set_pdump) {

> +#ifdef DPDK_PDUMP

> +        VLOG_INFO("DPDK pdump packet capture enabled");

> +        err = rte_pdump_init(NULL);

> +        if (err != 0) {

> +            VLOG_INFO("Error initialising DPDK pdump");

> +        }

> +#else

> +        VLOG_INFO("Cannot initialise DPDK pdump packet capture - option not "

> +                  "enabled in the DPDK build"); #endif

> +    }

> +

>      /* Finally, register the dpdk classes */

>      netdev_dpdk_register();

>  }

> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index f0e1381..7cf38fe

> 100644

> --- a/vswitchd/vswitch.xml

> +++ b/vswitchd/vswitch.xml

> @@ -311,6 +311,18 @@

>          </p>

>        </column>

> 

> +      <column name="other_config" key="dpdk-pdump"

> +              type='{"type": "boolean"}'>

> +        <p>

> +          Set this value to <code>true</code> to enable DPDK pdump packet

> +          capture capability on DPDK port types.

> +        </p>

> +        <p>

> +          The default value is <code>false</code>. Changing this value requires

> +          restarting the daemon.

> +        </p>

> +      </column>

> +

>        <column name="other_config" key="n-handler-threads"

>                type='{"type": "integer", "minInteger": 1}'>

>          <p>

> --

> 2.4.3

> 

> _______________________________________________

> dev mailing list

> dev@openvswitch.org

> http://openvswitch.org/mailman/listinfo/dev
Ciara Loftus July 29, 2016, 12:38 p.m. UTC | #2
> 

> This looks like a nice useablity feature to add.

> Two questions inline

> Regards sean.


Thanks Sean, replies inline.

Ciara

> 

> > -----Original Message-----

> > From: dev [mailto:dev-bounces@openvswitch.org] On Behalf Of Ciara

> Loftus

> > Sent: Friday, July 29, 2016 10:58 AM

> > To: dev@openvswitch.org

> > Subject: [ovs-dev] [PATCH RFC 1/1] netdev-dpdk: add DPDK pdump

> capability

> >

> > This commit provides the ability to 'listen' on DPDK ports and save packets

> to a

> > pcap file with a DPDK app that uses the librte_pdump library. One such app

> is the

> > 'pdump' app that can be found in the DPDK 'app' directory. Instructions on

> how to

> > use this can be found in INSTALL.DPDK-ADVANCED.md

> >

> > The pdump feature is optional. Should you wish to use it, pcap libraries

> must to

> > be installed on the system and the CONFIG_RTE_LIBRTE_PMD_PCAP=y

> and

> > CONFIG_RTE_LIBRTE_PDUMP=y options set in DPDK. Additionally you must

> set

> > the 'dpdk-pdump' ovs other_config DB value to 'true'.

> >

> > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>

> > ---

> >  INSTALL.DPDK-ADVANCED.md | 27 +++++++++++++++++++++++++--

> >  NEWS                     |  1 +

> >  acinclude.m4             | 23 +++++++++++++++++++++++

> >  lib/netdev-dpdk.c        | 19 +++++++++++++++++++

> >  vswitchd/vswitch.xml     | 12 ++++++++++++

> >  5 files changed, 80 insertions(+), 2 deletions(-)

> >

> > diff --git a/INSTALL.DPDK-ADVANCED.md b/INSTALL.DPDK-ADVANCED.md

> index

> > ec1de29..0ffafa3 100644

> > --- a/INSTALL.DPDK-ADVANCED.md

> > +++ b/INSTALL.DPDK-ADVANCED.md

> > @@ -11,7 +11,8 @@ OVS DPDK ADVANCED INSTALL GUIDE  6. [Vhost

> > Walkthrough](#vhost)  7. [QOS](#qos)  8. [Rate Limiting](#rl) -9.

> > [Vsperf](#vsperf)

> > +9. [Pdump](#pdump)

> > +10. [Vsperf](#vsperf)

> >

> >  ## <a name="overview"></a> 1. Overview

> >

> > @@ -827,7 +828,29 @@ To clear the ingress policer configuration from the

> port

> > use the following:

> >

> >  For more details regarding ingress-policer see the vswitch.xml.

> >

> > -## <a name="vsperf"></a> 9. Vsperf

> > +## <a name="pdump"></a> 9. Pdump

> > +

> > +Pdump allows you to listen on DPDK ports and view the traffic that is

> > +passing on them. To use this utility, one must have libpcap installed

> > +on the system. Furthermore, DPDK must be built with

> > +CONFIG_RTE_LIBRTE_PDUMP=y and

> CONFIG_RTE_LIBRTE_PMD_PCAP=y. And

> > +finally, the following database value must be set before launching the

> switch,

> > like so:

> > +

> > +`ovs-vsctl set Open_vSwitch . other_config:dpdk-pdump=true`

> > +

> > +To use pdump, simply launch OVS as usual. Then, navigate to the

> 'app/pdump'

> > +directory in DPDK, 'make' the application and run like so:

> > +

> > +`sudo ./build/app/dpdk_pdump -- --pdump

> > +'port=0,queue=0,rx-dev=/tmp/rx.pcap'`

> [Mooney, Sean K] can the dpdk_pdump utility dump non dpdk physical ports

> such as

> Vhost-user ports or dump all queues on a port at the same time?


The user guide for the pdump sample app can be found here which has more info:
http://dpdk.org/browse/dpdk/tree/doc/guides/sample_app_ug/pdump.rst?h=releases
I might add a reference to this in the docs.

Re: non-physical ports: it appears not due to a bug in the eth_dev library (see doc above).
Re: all queues at the same time: it appears you can, by specifying queue_id=*.

> Am I correct in saying that Port=0 in this case indicate the first index in the

> dpdk port

> list which is dpdk0 from an ovs perspective or is this the port id as shown in

> ovs-appctl dpctl/show?

It is the DPDK port_id as the pdump app has no awareness of OVS other than that it is a DPDK primary process.
So the port_id is the dpdk port_id ie. =0 for dpdk0

> > +

> > +The above command captures traffic received on queue 0 of port 0 and

> > +stores it in /tmp/rx.pcap. Other combinations of port numbers, queues

> > +numbers and pcap locations are of course also available to use.

> > +

> > +A small performance decrease is seen when dpdk-pdump=true. This

> > +decrease is larger when using a monitoring application like the DPDK

> pdump

> > app.

> > +

> > +## <a name="vsperf"></a> 10. Vsperf

> >

> >  Vsperf project goal is to develop vSwitch test framework that can be used

> to

> > validate the suitability of different vSwitch implementations in a Telco

> > deployment diff --git a/NEWS b/NEWS index 32975b0..f59b3b0 100644

> > --- a/NEWS

> > +++ b/NEWS

> > @@ -64,6 +64,7 @@ Post-v2.5.0

> >       * Basic connection tracking for the userspace datapath (no ALG,

> >         fragmentation or NAT support yet)

> >       * Support for DPDK 16.07

> > +     * Optional support for DPDK pdump enabled.

> >     - Increase number of registers to 16.

> >     - ovs-benchmark: This utility has been removed due to lack of use and

> >       bitrot.

> > diff --git a/acinclude.m4 b/acinclude.m4 index faf79eb..0c1dafd 100644

> > --- a/acinclude.m4

> > +++ b/acinclude.m4

> > @@ -211,6 +211,29 @@ AC_DEFUN([OVS_CHECK_DPDK], [

> >

> >      AC_SEARCH_LIBS([get_mempolicy],[numa],[],[AC_MSG_ERROR([unable

> to

> > find libnuma, install the dependency package])])

> >

> > +    AC_COMPILE_IFELSE([

> > +      AC_LANG_PROGRAM(

> > +        [

> > +          #include <rte_config.h>

> > +#if RTE_LIBRTE_PMD_PCAP

> > +#error

> > +#endif

> > +        ], [])

> > +      ], [],

> > +      [AC_SEARCH_LIBS([pcap_dump],[pcap],[],[AC_MSG_ERROR([unable

> to find

> > libpcap, install the dependency package])])

> > +       DPDK_EXTRA_LIB="-lpcap"

> > +       AC_COMPILE_IFELSE([

> > +         AC_LANG_PROGRAM(

> > +           [

> > +             #include <rte_config.h>

> > +#if RTE_LIBRTE_PDUMP

> > +#error

> > +#endif

> > +         ], [])

> > +       ], [],

> > +       [AC_DEFINE([DPDK_PDUMP], [1], [DPDK pdump enabled in OVS.])])

> > +     ])

> > +

> >      # On some systems we have to add -ldl to link with dpdk

> >      #

> >      # This code, at first, tries to link without -ldl (""), diff --git a/lib/netdev-

> dpdk.c

> > b/lib/netdev-dpdk.c index f21ddcc..e52ad6f 100644

> > --- a/lib/netdev-dpdk.c

> > +++ b/lib/netdev-dpdk.c

> > @@ -57,6 +57,9 @@

> >  #include "rte_config.h"

> >  #include "rte_mbuf.h"

> >  #include "rte_meter.h"

> > +#ifdef DPDK_PDUMP

> > +#include "rte_pdump.h"

> > +#endif

> >  #include "rte_virtio_net.h"

> >

> >  VLOG_DEFINE_THIS_MODULE(dpdk);

> > @@ -3193,6 +3196,7 @@ dpdk_init__(const struct smap

> *ovs_other_config)

> > #ifndef VHOST_CUSE

> >      char *sock_dir_subcomponent;

> >  #endif

> > +    bool set_pdump = false;

> >

> >      if (!smap_get_bool(ovs_other_config, "dpdk-init", false)) {

> >          VLOG_INFO("DPDK Disabled - to change this requires a restart.\n");

> @@ -

> > 3333,6 +3337,21 @@ dpdk_init__(const struct smap *ovs_other_config)

> >

> >      dpdk_vhost_class_init();

> >

> > +    set_pdump = smap_get_bool(ovs_other_config, "dpdk-pdump", false);

> > +

> > +    if (set_pdump) {

> > +#ifdef DPDK_PDUMP

> > +        VLOG_INFO("DPDK pdump packet capture enabled");

> > +        err = rte_pdump_init(NULL);

> > +        if (err != 0) {

> > +            VLOG_INFO("Error initialising DPDK pdump");

> > +        }

> > +#else

> > +        VLOG_INFO("Cannot initialise DPDK pdump packet capture - option

> not "

> > +                  "enabled in the DPDK build"); #endif

> > +    }

> > +

> >      /* Finally, register the dpdk classes */

> >      netdev_dpdk_register();

> >  }

> > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index

> f0e1381..7cf38fe

> > 100644

> > --- a/vswitchd/vswitch.xml

> > +++ b/vswitchd/vswitch.xml

> > @@ -311,6 +311,18 @@

> >          </p>

> >        </column>

> >

> > +      <column name="other_config" key="dpdk-pdump"

> > +              type='{"type": "boolean"}'>

> > +        <p>

> > +          Set this value to <code>true</code> to enable DPDK pdump packet

> > +          capture capability on DPDK port types.

> > +        </p>

> > +        <p>

> > +          The default value is <code>false</code>. Changing this value

> requires

> > +          restarting the daemon.

> > +        </p>

> > +      </column>

> > +

> >        <column name="other_config" key="n-handler-threads"

> >                type='{"type": "integer", "minInteger": 1}'>

> >          <p>

> > --

> > 2.4.3

> >

> > _______________________________________________

> > dev mailing list

> > dev@openvswitch.org

> > http://openvswitch.org/mailman/listinfo/dev
diff mbox

Patch

diff --git a/INSTALL.DPDK-ADVANCED.md b/INSTALL.DPDK-ADVANCED.md
index ec1de29..0ffafa3 100644
--- a/INSTALL.DPDK-ADVANCED.md
+++ b/INSTALL.DPDK-ADVANCED.md
@@ -11,7 +11,8 @@  OVS DPDK ADVANCED INSTALL GUIDE
 6. [Vhost Walkthrough](#vhost)
 7. [QOS](#qos)
 8. [Rate Limiting](#rl)
-9. [Vsperf](#vsperf)
+9. [Pdump](#pdump)
+10. [Vsperf](#vsperf)
 
 ## <a name="overview"></a> 1. Overview
 
@@ -827,7 +828,29 @@  To clear the ingress policer configuration from the port use the following:
 
 For more details regarding ingress-policer see the vswitch.xml.
 
-## <a name="vsperf"></a> 9. Vsperf
+## <a name="pdump"></a> 9. Pdump
+
+Pdump allows you to listen on DPDK ports and view the traffic that is
+passing on them. To use this utility, one must have libpcap installed
+on the system. Furthermore, DPDK must be built with CONFIG_RTE_LIBRTE_PDUMP=y
+and CONFIG_RTE_LIBRTE_PMD_PCAP=y. And finally, the following database
+value must be set before launching the switch, like so:
+
+`ovs-vsctl set Open_vSwitch . other_config:dpdk-pdump=true`
+
+To use pdump, simply launch OVS as usual. Then, navigate to the 'app/pdump'
+directory in DPDK, 'make' the application and run like so:
+
+`sudo ./build/app/dpdk_pdump -- --pdump 'port=0,queue=0,rx-dev=/tmp/rx.pcap'`
+
+The above command captures traffic received on queue 0 of port 0 and stores
+it in /tmp/rx.pcap. Other combinations of port numbers, queues numbers and
+pcap locations are of course also available to use.
+
+A small performance decrease is seen when dpdk-pdump=true. This decrease
+is larger when using a monitoring application like the DPDK pdump app.
+
+## <a name="vsperf"></a> 10. Vsperf
 
 Vsperf project goal is to develop vSwitch test framework that can be used to
 validate the suitability of different vSwitch implementations in a Telco deployment
diff --git a/NEWS b/NEWS
index 32975b0..f59b3b0 100644
--- a/NEWS
+++ b/NEWS
@@ -64,6 +64,7 @@  Post-v2.5.0
      * Basic connection tracking for the userspace datapath (no ALG,
        fragmentation or NAT support yet)
      * Support for DPDK 16.07
+     * Optional support for DPDK pdump enabled.
    - Increase number of registers to 16.
    - ovs-benchmark: This utility has been removed due to lack of use and
      bitrot.
diff --git a/acinclude.m4 b/acinclude.m4
index faf79eb..0c1dafd 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -211,6 +211,29 @@  AC_DEFUN([OVS_CHECK_DPDK], [
 
     AC_SEARCH_LIBS([get_mempolicy],[numa],[],[AC_MSG_ERROR([unable to find libnuma, install the dependency package])])
 
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM(
+        [
+          #include <rte_config.h>
+#if RTE_LIBRTE_PMD_PCAP
+#error
+#endif
+        ], [])
+      ], [],
+      [AC_SEARCH_LIBS([pcap_dump],[pcap],[],[AC_MSG_ERROR([unable to find libpcap, install the dependency package])])
+       DPDK_EXTRA_LIB="-lpcap"
+       AC_COMPILE_IFELSE([
+         AC_LANG_PROGRAM(
+           [
+             #include <rte_config.h>
+#if RTE_LIBRTE_PDUMP
+#error
+#endif
+         ], [])
+       ], [],
+       [AC_DEFINE([DPDK_PDUMP], [1], [DPDK pdump enabled in OVS.])])
+     ])
+
     # On some systems we have to add -ldl to link with dpdk
     #
     # This code, at first, tries to link without -ldl (""),
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index f21ddcc..e52ad6f 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -57,6 +57,9 @@ 
 #include "rte_config.h"
 #include "rte_mbuf.h"
 #include "rte_meter.h"
+#ifdef DPDK_PDUMP
+#include "rte_pdump.h"
+#endif
 #include "rte_virtio_net.h"
 
 VLOG_DEFINE_THIS_MODULE(dpdk);
@@ -3193,6 +3196,7 @@  dpdk_init__(const struct smap *ovs_other_config)
 #ifndef VHOST_CUSE
     char *sock_dir_subcomponent;
 #endif
+    bool set_pdump = false;
 
     if (!smap_get_bool(ovs_other_config, "dpdk-init", false)) {
         VLOG_INFO("DPDK Disabled - to change this requires a restart.\n");
@@ -3333,6 +3337,21 @@  dpdk_init__(const struct smap *ovs_other_config)
 
     dpdk_vhost_class_init();
 
+    set_pdump = smap_get_bool(ovs_other_config, "dpdk-pdump", false);
+
+    if (set_pdump) {
+#ifdef DPDK_PDUMP
+        VLOG_INFO("DPDK pdump packet capture enabled");
+        err = rte_pdump_init(NULL);
+        if (err != 0) {
+            VLOG_INFO("Error initialising DPDK pdump");
+        }
+#else
+        VLOG_INFO("Cannot initialise DPDK pdump packet capture - option not "
+                  "enabled in the DPDK build");
+#endif
+    }
+
     /* Finally, register the dpdk classes */
     netdev_dpdk_register();
 }
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index f0e1381..7cf38fe 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -311,6 +311,18 @@ 
         </p>
       </column>
 
+      <column name="other_config" key="dpdk-pdump"
+              type='{"type": "boolean"}'>
+        <p>
+          Set this value to <code>true</code> to enable DPDK pdump packet
+          capture capability on DPDK port types.
+        </p>
+        <p>
+          The default value is <code>false</code>. Changing this value requires
+          restarting the daemon.
+        </p>
+      </column>
+
       <column name="other_config" key="n-handler-threads"
               type='{"type": "integer", "minInteger": 1}'>
         <p>