On 1 Jul 2023, at 16:40, [email protected] wrote:

> From: Lin Huang <[email protected]>
>
> OvS has supported packet-per-second policer which can be set at ingress
> and egress side in kernel datapath. But the userspace datapath dosen't
> support for ingress and egress packet-per-second policing now.
>
> So, this patch add support for userspace ingress pps policing by using
> native ovs token bucket library. Token bucket is accumulated by 'rate'
> tokens per millisecond and store maxiumim tokens at 'burst' bucket size.
> One token in the bucket means one packet (1 kpkts * millisecond) which
> will drop or pass by policer.
>
> This patch reuse 'ingress_policing_kpkts_rate' and
> 'ingress_policing_kpkts_burst' options at interface table. Now userspace
> ingress policer supports setting packet-per-second limits in addition to
> the previously configurable byte rate settings.
>
> Examples:
> $ ovs-vsctl set interface dpdk0 ingress_policing_rate=12300
> $ ovs-vsctl set interface dpdk0 ingress_policing_burst=12300
> $ ovs-vsctl set interface dpdk0 ingress_policing_kpkts_rate=123
> $ ovs-vsctl set interface dpdk0 ingress_policing_kpkts_burst=123
>
> Add some unit tests for ingress packet-per-second policing.
>
> Signed-off-by: Lin Huang <[email protected]>

I did not review this patch, but the same comments from the previous patch 
apply here to.

//Eelco


> ---
>  Documentation/topics/dpdk/qos.rst |  14 +-
>  NEWS                              |   2 +
>  lib/netdev-dpdk.c                 |  71 ++++++++--
>  tests/system-dpdk.at              | 218 ++++++++++++++++++++++++++++++
>  4 files changed, 288 insertions(+), 17 deletions(-)
>
> diff --git a/Documentation/topics/dpdk/qos.rst 
> b/Documentation/topics/dpdk/qos.rst
> index 5f0b1469a..4812ed37c 100644
> --- a/Documentation/topics/dpdk/qos.rst
> +++ b/Documentation/topics/dpdk/qos.rst
> @@ -106,13 +106,19 @@ Refer to ``vswitch.xml`` for more details on egress 
> policer.
>  Rate Limiting (Ingress Policing)
>  --------------------------------
>
> -Assuming you have a :doc:`vhost-user port <vhost-user>` receiving traffic
> -consisting of packets of size 64 bytes, the following command would limit the
> -reception rate of the port to ~1,000,000 packets per second::
> +Assuming you have a :doc:`vhost-user port <vhost-user>` receiving traffic,
> +the following command would limit the reception rate of the port to
> +~1,000,000 bits per second::
>
> -    $ ovs-vsctl set interface vhost-user0 ingress_policing_rate=368000 \
> +    $ ovs-vsctl set interface vhost-user0 ingress_policing_rate=1000 \
>          ingress_policing_burst=1000`
>
> +or, the following command would limit the reception rate of the port to
> +~1,000,000 packets per second::
> +
> +    $ ovs-vsctl set interface dpdk0 ingress_policing_kpkts_rate=1000 \
> +        ingress_policing_kpkts_burst=1000`
> +
>  To examine the ingress policer configuration of the port::
>
>      $ ovs-vsctl list interface vhost-user0
> diff --git a/NEWS b/NEWS
> index d88f490b1..91f62a0e4 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -46,6 +46,8 @@ Post-v3.1.0
>         table to check the status.
>       * Added new configuration options 'kpkts_rate' and 'kpkts_burst' for
>        'egress-policer' to support kilo packet-per-second policing.
> +     * Added support for ingress kilo packet-per-second policing configured 
> by
> +       ingress_policing_kpkts_rate/burst options.
>
>
>  v3.1.0 - 16 Feb 2023
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index f97153665..b6efa70a4 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -413,6 +413,8 @@ struct ingress_policer {
>      struct rte_meter_srtcm_params app_srtcm_params;
>      struct rte_meter_srtcm in_policer;
>      struct rte_meter_srtcm_profile in_prof;
> +    struct token_bucket tb;
> +    enum policer_type type;
>      rte_spinlock_t policer_lock;
>  };
>
> @@ -499,6 +501,9 @@ struct netdev_dpdk {
>          uint32_t policer_rate;
>          uint32_t policer_burst;
>
> +        uint32_t policer_kpkts_rate;
> +        uint32_t policer_kpkts_burst;
> +
>          /* Array of vhost rxq states, see vring_state_changed. */
>          bool *vhost_rxq_enabled;
>      );
> @@ -1377,6 +1382,8 @@ common_construct(struct netdev *netdev, dpdk_port_t 
> port_no,
>      ovsrcu_init(&dev->ingress_policer, NULL);
>      dev->policer_rate = 0;
>      dev->policer_burst = 0;
> +    dev->policer_kpkts_rate = 0;
> +    dev->policer_kpkts_burst = 0;
>
>      netdev->n_rxq = 0;
>      netdev->n_txq = 0;
> @@ -2471,14 +2478,22 @@ static int
>  ingress_policer_run(struct ingress_policer *policer, struct rte_mbuf **pkts,
>                      int pkt_cnt, bool should_steal)
>  {
> +    int bps_drop = 0, pps_drop = 0;
>      int cnt = 0;
>
>      rte_spinlock_lock(&policer->policer_lock);
> -    cnt = srtcm_policer_run_single_packet(&policer->in_policer,
> -                                          &policer->in_prof,
> -                                          pkts, pkt_cnt);
> +    if (policer->type & POLICER_BPS) {
> +        bps_drop = srtcm_policer_run_single_packet(&policer->in_policer,
> +                                                   &policer->in_prof,
> +                                                   pkts, pkt_cnt);
> +    }
> +
> +    if (policer->type & POLICER_PKTPS) {
> +        pps_drop = pkts_policer_run_single_packet(&policer->tb, pkt_cnt);
> +    }
>      rte_spinlock_unlock(&policer->policer_lock);
>
> +    cnt = MAX(bps_drop, pps_drop);
>      if (should_steal && cnt) {
>          rte_pktmbuf_free_bulk(&pkts[pkt_cnt - cnt], cnt);
>      }
> @@ -3648,7 +3663,8 @@ netdev_dpdk_get_features(const struct netdev *netdev,
>  }
>
>  static struct ingress_policer *
> -netdev_dpdk_policer_construct(uint32_t rate, uint32_t burst)
> +netdev_dpdk_policer_construct(uint32_t rate, uint32_t burst,
> +                              uint32_t kpkts_rate, uint32_t kpkts_burst)
>  {
>      struct ingress_policer *policer = NULL;
>      uint64_t rate_bytes;
> @@ -3672,9 +3688,23 @@ netdev_dpdk_policer_construct(uint32_t rate, uint32_t 
> burst)
>                                       &policer->in_prof);
>      }
>      if (err) {
> -        VLOG_ERR("Could not create rte meter for ingress policer");
> +        VLOG_DBG("Could not create rte meter for ingress policer");
> +    } else {
> +        policer->type |= POLICER_BPS;
> +    }
> +
> +    err = pkts_policer_profile_config(&policer->tb, kpkts_rate, kpkts_burst);
> +    if (err) {
> +        VLOG_DBG("Could not create tocken bucket for ingress policer");
> +    } else {
> +        policer->type |= POLICER_PKTPS;
> +    }
> +
> +    if (!policer->type) {
> +        /* Neither kbps nor kpkts policer is configured. */
>          free(policer);
> -        return NULL;
> +        policer = NULL;
> +        VLOG_DBG("Could not create qos for ingress policer");
>      }
>
>      return policer;
> @@ -3683,8 +3713,8 @@ netdev_dpdk_policer_construct(uint32_t rate, uint32_t 
> burst)
>  static int
>  netdev_dpdk_set_policing(struct netdev* netdev, uint32_t policer_rate,
>                           uint32_t policer_burst,
> -                         uint32_t policer_kpkts_rate OVS_UNUSED,
> -                         uint32_t policer_kpkts_burst OVS_UNUSED)
> +                         uint32_t policer_kpkts_rate,
> +                         uint32_t policer_kpkts_burst)
>  {
>      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
>      struct ingress_policer *policer;
> @@ -3697,13 +3727,23 @@ netdev_dpdk_set_policing(struct netdev* netdev, 
> uint32_t policer_rate,
>                       : !policer_burst ? 8000
>                       : policer_burst);
>
> +    /*
> +     * Force to 0 if no rate specified,
> +     * default to rate value if burst is 0,
> +     * else stick with user-specified value.
> +     */
> +    policer_kpkts_burst = (!policer_kpkts_rate ? 0
> +                           : !policer_kpkts_burst ? policer_kpkts_rate
> +                           : policer_kpkts_burst);
>      ovs_mutex_lock(&dev->mutex);
>
>      policer = ovsrcu_get_protected(struct ingress_policer *,
> -                                    &dev->ingress_policer);
> +                                   &dev->ingress_policer);
>
>      if (dev->policer_rate == policer_rate &&
> -        dev->policer_burst == policer_burst) {
> +        dev->policer_burst == policer_burst &&
> +        dev->policer_kpkts_rate == policer_kpkts_rate &&
> +        dev->policer_kpkts_burst == policer_kpkts_burst) {
>          /* Assume that settings haven't changed since we last set them. */
>          ovs_mutex_unlock(&dev->mutex);
>          return 0;
> @@ -3714,14 +3754,19 @@ netdev_dpdk_set_policing(struct netdev* netdev, 
> uint32_t policer_rate,
>          ovsrcu_postpone(free, policer);
>      }
>
> -    if (policer_rate != 0) {
> -        policer = netdev_dpdk_policer_construct(policer_rate, policer_burst);
> -    } else {
> +    if (!policer_rate && !policer_kpkts_rate) {
> +        /* Both policers are zero. */
>          policer = NULL;
> +    } else {
> +        policer = netdev_dpdk_policer_construct(policer_rate, policer_burst,
> +                                                policer_kpkts_rate,
> +                                                policer_kpkts_burst);
>      }
>      ovsrcu_set(&dev->ingress_policer, policer);
>      dev->policer_rate = policer_rate;
>      dev->policer_burst = policer_burst;
> +    dev->policer_kpkts_rate = policer_kpkts_rate;
> +    dev->policer_kpkts_burst = policer_kpkts_burst;
>      ovs_mutex_unlock(&dev->mutex);
>
>      return 0;
> diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
> index 233f7e493..1a3215801 100644
> --- a/tests/system-dpdk.at
> +++ b/tests/system-dpdk.at
> @@ -276,6 +276,7 @@ OVS_DPDK_PRE_PHY_SKIP()
>  OVS_DPDK_START()
>
>  dnl Add userspace bridge and attach it to OVS and add policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
>  AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
>  AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk 
> options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
>  AT_CHECK([ovs-vsctl set interface phy0 ingress_policing_rate=10000 
> ingress_policing_burst=1000])
> @@ -312,6 +313,7 @@ OVS_DPDK_PRE_CHECK()
>  OVS_DPDK_START([--no-pci])
>
>  dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
>  AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
>  AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
>  AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_rate=10000 ingress_policing_burst=1000])
> @@ -355,6 +357,7 @@ OVS_DPDK_PRE_CHECK()
>  OVS_DPDK_START([--no-pci])
>
>  dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
>  AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
>  AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
>  AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_burst=1000])
> @@ -396,6 +399,7 @@ OVS_DPDK_PRE_CHECK()
>  OVS_DPDK_START([--no-pci])
>
>  dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
>  AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
>  AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
>  AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_rate=10000])
> @@ -426,6 +430,218 @@ AT_CLEANUP
>  dnl 
> --------------------------------------------------------------------------
>
>
> +dnl 
> --------------------------------------------------------------------------
> +dnl Ingress policing (kpkts) create delete vport port
> +AT_SETUP([OVS-DPDK - Ingress policing (kpkts) create delete vport port])
> +AT_KEYWORDS([dpdk])
> +
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START()
> +
> +dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
> +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
> +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
> +AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_kpkts_rate=10000 ingress_policing_kpkts_burst=10000])
> +AT_CHECK([ovs-vsctl show], [], [stdout])
> +sleep 2
> +
> +dnl Remove ingress policer
> +AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_kpkts_rate=0 ingress_policing_kpkts_burst=0])
> +
> +dnl Fail if ingress policer could not be created
> +AT_FAIL_IF([grep "Could not create token bucket for ingress policer" 
> ovs-vswitchd.log], [], [stdout])
> +
> +dnl Check ingress policer was removed correctly
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_burst: 0' stdout], [], [stdout])
> +
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_rate: 0' stdout], [], [stdout])
> +
> +dnl Parse log file
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) vhost-user 
> client: socket created" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' 
> mode, using client socket" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) 
> reconnecting..." ovs-vswitchd.log], [], [stdout])
> +
> +dnl Clean up
> +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], 
> [stderr])
> +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> +\@Could not create rte meter for ingress policer@d
> +\@VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) failed to connect: No such 
> file or directory@d
> +])")
> +AT_CLEANUP
> +dnl 
> --------------------------------------------------------------------------
> +
> +
> +
> +dnl 
> --------------------------------------------------------------------------
> +dnl Ingress policing (kpkts) no policing rate
> +AT_SETUP([OVS-DPDK - Ingress policing (kpkts) no policing rate])
> +AT_KEYWORDS([dpdk])
> +
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START()
> +
> +dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
> +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
> +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
> +AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_kpkts_burst=1000])
> +AT_CHECK([ovs-vsctl show], [], [stdout])
> +sleep 2
> +
> +dnl check ingress policer not be created
> +AT_FAIL_IF([grep "Could not create token bucket for ingress policer" 
> ovs-vswitchd.log], [], [stdout])
> +
> +dnl Check ingress policer was created correctly
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_burst: 1000' stdout], [], [stdout])
> +
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_rate: 0' stdout], [], [stdout])
> +
> +
> +dnl Parse log file
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) vhost-user 
> client: socket created" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' 
> mode, using client socket" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) 
> reconnecting..." ovs-vswitchd.log], [], [stdout])
> +
> +dnl Clean up
> +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], 
> [stderr])
> +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> +\@VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) failed to connect: No such 
> file or directory@d
> +])")
> +AT_CLEANUP
> +dnl 
> --------------------------------------------------------------------------
> +
> +
> +
> +dnl 
> --------------------------------------------------------------------------
> +dnl Ingress policing (kpkts) no policing burst
> +AT_SETUP([OVS-DPDK - Ingress policing (kpkts) no policing burst])
> +AT_KEYWORDS([dpdk])
> +
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START()
> +
> +dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
> +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
> +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
> +AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_kpkts_rate=10000])
> +AT_CHECK([ovs-vsctl show], [], [stdout])
> +sleep 2
> +
> +dnl check ingress policer not be created
> +AT_FAIL_IF([grep "Could not create token bucket for ingress policer" 
> ovs-vswitchd.log], [], [stdout])
> +
> +dnl Check ingress policer was created correctly
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_burst: 0' stdout], [], [stdout])
> +
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_rate: 10000' stdout], [], [stdout])
> +
> +dnl Parse log file
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) vhost-user 
> client: socket created" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' 
> mode, using client socket" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) 
> reconnecting..." ovs-vswitchd.log], [], [stdout])
> +
> +dnl Clean up
> +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], 
> [stderr])
> +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> +\@Could not create rte meter for ingress policer@d
> +\@VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) failed to connect: No such 
> file or directory@d
> +])")
> +AT_CLEANUP
> +dnl 
> --------------------------------------------------------------------------
> +
> +
> +
> +dnl 
> --------------------------------------------------------------------------
> +dnl Ingress policing (kpkts) max policing rate
> +AT_SETUP([OVS-DPDK - Ingress policing (kpkts) max policing rate])
> +AT_KEYWORDS([dpdk])
> +
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START()
> +
> +dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
> +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
> +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
> +AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_kpkts_rate=42949671])
> +AT_CHECK([ovs-vsctl show], [], [stdout])
> +sleep 2
> +
> +dnl Check ingress policer was created correctly
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_burst: 0' stdout], [], [stdout])
> +
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_rate: 42949671' stdout], [], 
> [stdout])
> +
> +dnl Parse log file
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) vhost-user 
> client: socket created" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' 
> mode, using client socket" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) 
> reconnecting..." ovs-vswitchd.log], [], [stdout])
> +
> +dnl Clean up
> +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], 
> [stderr])
> +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> +\@Could not create token bucket for ingress policer@d
> +\@Could not create rte meter for ingress policer@d
> +\@VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) failed to connect: No such 
> file or directory@d
> +])")
> +AT_CLEANUP
> +dnl 
> --------------------------------------------------------------------------
> +
> +
> +
> +dnl 
> --------------------------------------------------------------------------
> +dnl Ingress policing (kpkts) max policing burst
> +AT_SETUP([OVS-DPDK - Ingress policing (kpkts) max policing burst])
> +AT_KEYWORDS([dpdk])
> +
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START()
> +
> +dnl Add userspace bridge and attach it to OVS and add ingress policer
> +AT_CHECK([ovs-appctl vlog/set netdev_dpdk:dbg], [], [stdout])
> +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
> +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface 
> dpdkvhostuserclient0 type=dpdkvhostuserclient 
> options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], 
> [stderr])
> +AT_CHECK([ovs-vsctl set interface dpdkvhostuserclient0 
> ingress_policing_kpkts_burst=42949671])
> +AT_CHECK([ovs-vsctl show], [], [stdout])
> +sleep 2
> +
> +dnl check ingress policer not be created
> +AT_FAIL_IF([grep "Could not create token bucket for ingress policer" 
> ovs-vswitchd.log], [], [stdout])
> +
> +dnl Check ingress policer was created correctly
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_burst: 42949671' stdout], [], 
> [stdout])
> +
> +AT_CHECK([ovs-vsctl list interface dpdkvhostuserclient0], [], [stdout])
> +AT_CHECK([grep -E 'ingress_policing_kpkts_rate: 0' stdout], [], [stdout])
> +
> +dnl Parse log file
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) vhost-user 
> client: socket created" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' 
> mode, using client socket" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) 
> reconnecting..." ovs-vswitchd.log], [], [stdout])
> +
> +dnl Clean up
> +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], 
> [stderr])
> +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> +\@Could not create token bucket for ingress policer@d
> +\@Could not create rte meter for ingress policer@d
> +\@VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) failed to connect: No such 
> file or directory@d
> +])")
> +AT_CLEANUP
> +dnl 
> --------------------------------------------------------------------------
> +
> +
> +
>  dnl 
> --------------------------------------------------------------------------
>  dnl QoS create delete phy port
>  AT_SETUP([OVS-DPDK - QoS create delete phy port])
> @@ -1390,3 +1606,5 @@ OVS_VSWITCHD_STOP("m4_join([], 
> [SYSTEM_DPDK_ALLOWED_LOGS], [
>  ])")
>  AT_CLEANUP
>  dnl 
> --------------------------------------------------------------------------
> +
> +
> -- 
> 2.39.1
>
> _______________________________________________
> 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

Reply via email to