From 74c8ec894d5e7ebd3408c0e2d2955f0fa7c9f932 Mon Sep 17 00:00:00 2001 From: Li Zhang Date: Tue, 13 Apr 2021 18:59:54 +0300 Subject: [PATCH] ethdev: add packet mode in meter profile structure Currently meter algorithms only supports rate is bytes per second (BPS). Add packet_mode flag in meter profile parameters data structure. So that it can meter traffic by packet per second. When packet_mode is 0, the profile rates and bucket sizes are specified in bytes per second and bytes when packet_mode is not 0, the profile rates and bucket sizes are specified in packets and packets per second. The below structure will be extended: rte_mtr_meter_profile rte_mtr_capabilities Signed-off-by: Li Zhang Acked-by: Matan Azrad Acked-by: Cristian Dumitrescu Acked-by: Jerin Jacob Acked-by: Ajit Khaparde --- doc/guides/rel_notes/release_21_05.rst | 6 ++ lib/librte_ethdev/rte_mtr.h | 90 ++++++++++++++++++++++---- 2 files changed, 85 insertions(+), 11 deletions(-) diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index 1f3c411f74..d7fdc8dc12 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -81,6 +81,12 @@ New Features representor=[[c#]pf#]sf# sf[0,2-1023] /* 1023 SFs. */ representor=[c#]pf# c2pf[0,1] /* 2 PFs on controller 2. */ +* **Added support for meter PPS profile.** + + Added packet mode in the meter profile parameters data structures + to support metering traffic by packet per second (PPS), + in addition to the initial bytes per second (BPS) mode (value 0). + * **Updated Arkville PMD driver.** Updated Arkville net driver with new features and improvements, including: diff --git a/lib/librte_ethdev/rte_mtr.h b/lib/librte_ethdev/rte_mtr.h index 916a09c5c3..ceb5dcbef1 100644 --- a/lib/librte_ethdev/rte_mtr.h +++ b/lib/librte_ethdev/rte_mtr.h @@ -132,46 +132,71 @@ struct rte_mtr_meter_profile { union { /** Items only valid when *alg* is set to srTCM - RFC 2697. */ struct { - /** Committed Information Rate (CIR) (bytes/second). */ + /** + * Committed Information Rate (CIR) + * (bytes per second or packets per second). + */ uint64_t cir; - /** Committed Burst Size (CBS) (bytes). */ + /** Committed Burst Size (CBS) (bytes or packets). */ uint64_t cbs; - /** Excess Burst Size (EBS) (bytes). */ + /** Excess Burst Size (EBS) (bytes or packets). */ uint64_t ebs; } srtcm_rfc2697; /** Items only valid when *alg* is set to trTCM - RFC 2698. */ struct { - /** Committed Information Rate (CIR) (bytes/second). */ + /** + * Committed Information Rate (CIR) + * (bytes per second or packets per second). + */ uint64_t cir; - /** Peak Information Rate (PIR) (bytes/second). */ + /** + * Peak Information Rate (PIR) + * (bytes per second or packets per second). + */ uint64_t pir; - /** Committed Burst Size (CBS) (byes). */ + /** Committed Burst Size (CBS) (bytes or packets). */ uint64_t cbs; - /** Peak Burst Size (PBS) (bytes). */ + /** Peak Burst Size (PBS) (bytes or packets). */ uint64_t pbs; } trtcm_rfc2698; /** Items only valid when *alg* is set to trTCM - RFC 4115. */ struct { - /** Committed Information Rate (CIR) (bytes/second). */ + /** + * Committed Information Rate (CIR) + * (bytes per second or packets per second). + */ uint64_t cir; - /** Excess Information Rate (EIR) (bytes/second). */ + /** + * Excess Information Rate (EIR) + * (bytes per second or packets per second). + */ uint64_t eir; - /** Committed Burst Size (CBS) (byes). */ + /** Committed Burst Size (CBS) (bytes or packets). */ uint64_t cbs; - /** Excess Burst Size (EBS) (bytes). */ + /** Excess Burst Size (EBS) (bytes or packets). */ uint64_t ebs; } trtcm_rfc4115; }; + + /** + * When zero, the byte mode is enabled for the current profile, so the + * *rate* and *size* fields are specified in bytes per second + * and bytes, respectively. + * When non-zero, the packet mode is enabled for the current profile, + * so the *rate* and *size* fields are specified in packets per second + * and packets, respectively. + */ + int packet_mode; }; /** @@ -354,6 +379,48 @@ struct rte_mtr_capabilities { */ int policer_action_drop_supported; + /** + * srTCM rfc2697 byte mode supported. + * When non-zero, it indicates that byte mode is supported for + * the srTCM RFC 2697 metering algorithm. + */ + int srtcm_rfc2697_byte_mode_supported; + + /** + * srTCM rfc2697 packet mode supported. + * When non-zero, it indicates that packet mode is supported for + * the srTCM RFC 2697 metering algorithm. + */ + int srtcm_rfc2697_packet_mode_supported; + + /** + * trTCM rfc2698 byte mode supported. + * When non-zero, it indicates that byte mode is supported for + * the trTCM RFC 2698 metering algorithm. + */ + int trtcm_rfc2698_byte_mode_supported; + + /** + * trTCM rfc2698 packet mode supported. + * When non-zero, it indicates that packet mode is supported for + * the trTCM RFC 2698 metering algorithm. + */ + int trtcm_rfc2698_packet_mode_supported; + + /** + * trTCM rfc4115 byte mode supported. + * When non-zero, it indicates that byte mode is supported for + * the trTCM RFC 4115 metering algorithm. + */ + int trtcm_rfc4115_byte_mode_supported; + + /** + * trTCM rfc4115 packet mode supported. + * When non-zero, it indicates that packet mode is supported for + * the trTCM RFC 4115 metering algorithm. + */ + int trtcm_rfc4115_packet_mode_supported; + /** Set of supported statistics counter types. * @see enum rte_mtr_stats_type */ @@ -371,6 +438,7 @@ enum rte_mtr_error_type { RTE_MTR_ERROR_TYPE_UNSPECIFIED, /**< Cause unspecified. */ RTE_MTR_ERROR_TYPE_METER_PROFILE_ID, RTE_MTR_ERROR_TYPE_METER_PROFILE, + RTE_MTR_ERROR_TYPE_METER_PROFILE_PACKET_MODE, RTE_MTR_ERROR_TYPE_MTR_ID, RTE_MTR_ERROR_TYPE_MTR_PARAMS, RTE_MTR_ERROR_TYPE_POLICER_ACTION_GREEN, -- 2.20.1