LCOV - code coverage report
Current view: top level - lib/ethdev - rte_mtr_driver.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 3 0.0 %
Date: 2025-02-01 18:54:23 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 232 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2017 Intel Corporation
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef __INCLUDE_RTE_MTR_DRIVER_H__
       6                 :            : #define __INCLUDE_RTE_MTR_DRIVER_H__
       7                 :            : 
       8                 :            : /**
       9                 :            :  * @file
      10                 :            :  * RTE Generic Traffic Metering and Policing API (Driver Side)
      11                 :            :  *
      12                 :            :  * This file provides implementation helpers for internal use by PMDs, they
      13                 :            :  * are not intended to be exposed to applications and are not subject to ABI
      14                 :            :  * versioning.
      15                 :            :  */
      16                 :            : 
      17                 :            : #include <stdint.h>
      18                 :            : 
      19                 :            : #include <rte_errno.h>
      20                 :            : #include "rte_ethdev.h"
      21                 :            : #include "ethdev_driver.h"
      22                 :            : #include "rte_mtr.h"
      23                 :            : 
      24                 :            : #ifdef __cplusplus
      25                 :            : extern "C" {
      26                 :            : #endif
      27                 :            : 
      28                 :            : /** @internal MTR capabilities get. */
      29                 :            : typedef int (*rte_mtr_capabilities_get_t)(struct rte_eth_dev *dev,
      30                 :            :         struct rte_mtr_capabilities *cap,
      31                 :            :         struct rte_mtr_error *error);
      32                 :            : 
      33                 :            : /** @internal MTR meter profile add. */
      34                 :            : typedef int (*rte_mtr_meter_profile_add_t)(struct rte_eth_dev *dev,
      35                 :            :         uint32_t meter_profile_id,
      36                 :            :         struct rte_mtr_meter_profile *profile,
      37                 :            :         struct rte_mtr_error *error);
      38                 :            : 
      39                 :            : /** @internal MTR meter profile delete. */
      40                 :            : typedef int (*rte_mtr_meter_profile_delete_t)(struct rte_eth_dev *dev,
      41                 :            :         uint32_t meter_profile_id,
      42                 :            :         struct rte_mtr_error *error);
      43                 :            : 
      44                 :            : /** @internal MTR meter profile get. */
      45                 :            : typedef struct rte_flow_meter_profile *
      46                 :            : (*rte_mtr_meter_profile_get_t)(struct rte_eth_dev *dev,
      47                 :            :         uint32_t meter_profile_id,
      48                 :            :         struct rte_mtr_error *error);
      49                 :            : 
      50                 :            : /** @internal MTR meter policy validate. */
      51                 :            : typedef int (*rte_mtr_meter_policy_validate_t)(struct rte_eth_dev *dev,
      52                 :            :         struct rte_mtr_meter_policy_params *policy,
      53                 :            :         struct rte_mtr_error *error);
      54                 :            : 
      55                 :            : /** @internal MTR meter policy add. */
      56                 :            : typedef int (*rte_mtr_meter_policy_add_t)(struct rte_eth_dev *dev,
      57                 :            :         uint32_t policy_id,
      58                 :            :         struct rte_mtr_meter_policy_params *policy,
      59                 :            :         struct rte_mtr_error *error);
      60                 :            : 
      61                 :            : /** @internal MTR meter policy delete. */
      62                 :            : typedef int (*rte_mtr_meter_policy_delete_t)(struct rte_eth_dev *dev,
      63                 :            :         uint32_t policy_id,
      64                 :            :         struct rte_mtr_error *error);
      65                 :            : 
      66                 :            : /** @internal MTR meter policy get. */
      67                 :            : typedef struct rte_flow_meter_policy *
      68                 :            : (*rte_mtr_meter_policy_get_t)(struct rte_eth_dev *dev,
      69                 :            :         uint32_t policy_id,
      70                 :            :         struct rte_mtr_error *error);
      71                 :            : 
      72                 :            : 
      73                 :            : /** @internal MTR object create. */
      74                 :            : typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev,
      75                 :            :         uint32_t mtr_id,
      76                 :            :         struct rte_mtr_params *params,
      77                 :            :         int shared,
      78                 :            :         struct rte_mtr_error *error);
      79                 :            : 
      80                 :            : /** @internal MTR object destroy. */
      81                 :            : typedef int (*rte_mtr_destroy_t)(struct rte_eth_dev *dev,
      82                 :            :         uint32_t mtr_id,
      83                 :            :         struct rte_mtr_error *error);
      84                 :            : 
      85                 :            : /** @internal MTR object meter enable. */
      86                 :            : typedef int (*rte_mtr_meter_enable_t)(struct rte_eth_dev *dev,
      87                 :            :         uint32_t mtr_id,
      88                 :            :         struct rte_mtr_error *error);
      89                 :            : 
      90                 :            : /** @internal MTR object meter disable. */
      91                 :            : typedef int (*rte_mtr_meter_disable_t)(struct rte_eth_dev *dev,
      92                 :            :         uint32_t mtr_id,
      93                 :            :         struct rte_mtr_error *error);
      94                 :            : 
      95                 :            : /** @internal MTR object meter profile update. */
      96                 :            : typedef int (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev,
      97                 :            :         uint32_t mtr_id,
      98                 :            :         uint32_t meter_profile_id,
      99                 :            :         struct rte_mtr_error *error);
     100                 :            : 
     101                 :            : /** @internal MTR object meter policy update. */
     102                 :            : typedef int (*rte_mtr_meter_policy_update_t)(struct rte_eth_dev *dev,
     103                 :            :         uint32_t mtr_id,
     104                 :            :         uint32_t meter_policy_id,
     105                 :            :         struct rte_mtr_error *error);
     106                 :            : 
     107                 :            : /** @internal MTR object meter DSCP table update. */
     108                 :            : typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev,
     109                 :            :         uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
     110                 :            :         enum rte_color *dscp_table,
     111                 :            :         struct rte_mtr_error *error);
     112                 :            : 
     113                 :            : /** @internal mtr object meter vlan table update. */
     114                 :            : typedef int (*rte_mtr_meter_vlan_table_update_t)(struct rte_eth_dev *dev,
     115                 :            :         uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
     116                 :            :         enum rte_color *vlan_table,
     117                 :            :         struct rte_mtr_error *error);
     118                 :            : 
     119                 :            : /** @internal Set the input color protocol on MTR object. */
     120                 :            : typedef int (*rte_mtr_meter_color_in_proto_set_t)(struct rte_eth_dev *dev,
     121                 :            :         uint32_t mtr_id,
     122                 :            :         enum rte_mtr_color_in_protocol proto,
     123                 :            :         uint32_t priority,
     124                 :            :         struct rte_mtr_error *error);
     125                 :            : 
     126                 :            : /** @internal Get the input color protocols of MTR object. */
     127                 :            : typedef int (*rte_mtr_meter_color_in_proto_get_t)(struct rte_eth_dev *dev,
     128                 :            :         uint32_t mtr_id,
     129                 :            :         uint64_t *proto_mask,
     130                 :            :         struct rte_mtr_error *error);
     131                 :            : 
     132                 :            : /** @internal Get the input color protocol priority of MTR object. */
     133                 :            : typedef int (*rte_mtr_meter_color_in_proto_prio_get_t)(struct rte_eth_dev *dev,
     134                 :            :         uint32_t mtr_id,
     135                 :            :         enum rte_mtr_color_in_protocol proto,
     136                 :            :         uint32_t *priority,
     137                 :            :         struct rte_mtr_error *error);
     138                 :            : 
     139                 :            : /** @internal MTR object enabled stats update. */
     140                 :            : typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev,
     141                 :            :         uint32_t mtr_id,
     142                 :            :         uint64_t stats_mask,
     143                 :            :         struct rte_mtr_error *error);
     144                 :            : 
     145                 :            : /** @internal MTR object stats read. */
     146                 :            : typedef int (*rte_mtr_stats_read_t)(struct rte_eth_dev *dev,
     147                 :            :         uint32_t mtr_id,
     148                 :            :         struct rte_mtr_stats *stats,
     149                 :            :         uint64_t *stats_mask,
     150                 :            :         int clear,
     151                 :            :         struct rte_mtr_error *error);
     152                 :            : 
     153                 :            : struct rte_mtr_ops {
     154                 :            :         /** MTR capabilities get */
     155                 :            :         rte_mtr_capabilities_get_t capabilities_get;
     156                 :            : 
     157                 :            :         /** MTR meter profile add */
     158                 :            :         rte_mtr_meter_profile_add_t meter_profile_add;
     159                 :            : 
     160                 :            :         /** MTR meter profile delete */
     161                 :            :         rte_mtr_meter_profile_delete_t meter_profile_delete;
     162                 :            : 
     163                 :            :         /** MTR object create */
     164                 :            :         rte_mtr_create_t create;
     165                 :            : 
     166                 :            :         /** MTR object destroy */
     167                 :            :         rte_mtr_destroy_t destroy;
     168                 :            : 
     169                 :            :         /** MTR object meter enable */
     170                 :            :         rte_mtr_meter_enable_t meter_enable;
     171                 :            : 
     172                 :            :         /** MTR object meter disable */
     173                 :            :         rte_mtr_meter_disable_t meter_disable;
     174                 :            : 
     175                 :            :         /** MTR object meter profile update */
     176                 :            :         rte_mtr_meter_profile_update_t meter_profile_update;
     177                 :            : 
     178                 :            :         /** MTR object meter DSCP table update */
     179                 :            :         rte_mtr_meter_dscp_table_update_t meter_dscp_table_update;
     180                 :            : 
     181                 :            :         /** MTR object meter VLAN table update */
     182                 :            :         rte_mtr_meter_vlan_table_update_t meter_vlan_table_update;
     183                 :            : 
     184                 :            :         /** Set the input color protocol on MTR object. */
     185                 :            :         rte_mtr_meter_color_in_proto_set_t in_proto_set;
     186                 :            : 
     187                 :            :         /** Get the input color protocol of MTR object. */
     188                 :            :         rte_mtr_meter_color_in_proto_get_t in_proto_get;
     189                 :            : 
     190                 :            :         /** Get the input color protocol priority of MTR object. */
     191                 :            :         rte_mtr_meter_color_in_proto_prio_get_t in_proto_prio_get;
     192                 :            : 
     193                 :            :         /** MTR object enabled stats update */
     194                 :            :         rte_mtr_stats_update_t stats_update;
     195                 :            : 
     196                 :            :         /** MTR object stats read */
     197                 :            :         rte_mtr_stats_read_t stats_read;
     198                 :            : 
     199                 :            :         /** MTR meter policy validate */
     200                 :            :         rte_mtr_meter_policy_validate_t meter_policy_validate;
     201                 :            : 
     202                 :            :         /** MTR meter policy add */
     203                 :            :         rte_mtr_meter_policy_add_t meter_policy_add;
     204                 :            : 
     205                 :            :         /** MTR meter policy delete */
     206                 :            :         rte_mtr_meter_policy_delete_t meter_policy_delete;
     207                 :            : 
     208                 :            :         /** MTR object meter policy update */
     209                 :            :         rte_mtr_meter_policy_update_t meter_policy_update;
     210                 :            : 
     211                 :            :         /** MTR meter profile get */
     212                 :            :         rte_mtr_meter_profile_get_t meter_profile_get;
     213                 :            : 
     214                 :            :         /** MTR meter policy get */
     215                 :            :         rte_mtr_meter_policy_get_t meter_policy_get;
     216                 :            : };
     217                 :            : 
     218                 :            : /**
     219                 :            :  * Initialize generic error structure.
     220                 :            :  *
     221                 :            :  * This function also sets rte_errno to a given value.
     222                 :            :  *
     223                 :            :  * @param[out] error
     224                 :            :  *   Pointer to error structure (may be NULL).
     225                 :            :  * @param[in] code
     226                 :            :  *   Related error code (rte_errno).
     227                 :            :  * @param[in] type
     228                 :            :  *   Cause field and error type.
     229                 :            :  * @param[in] cause
     230                 :            :  *   Object responsible for the error.
     231                 :            :  * @param[in] message
     232                 :            :  *   Human-readable error message.
     233                 :            :  *
     234                 :            :  * @return
     235                 :            :  *   Error code.
     236                 :            :  */
     237                 :            : static inline int
     238                 :            : rte_mtr_error_set(struct rte_mtr_error *error,
     239                 :            :                    int code,
     240                 :            :                    enum rte_mtr_error_type type,
     241                 :            :                    const void *cause,
     242                 :            :                    const char *message)
     243                 :            : {
     244   [ #  #  #  #  :          0 :         if (error) {
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
     245                 :          0 :                 *error = (struct rte_mtr_error){
     246                 :            :                         .type = type,
     247                 :            :                         .cause = cause,
     248                 :            :                         .message = message,
     249                 :            :                 };
     250                 :            :         }
     251                 :          0 :         rte_errno = code;
     252                 :            :         return code;
     253                 :            : }
     254                 :            : 
     255                 :            : /**
     256                 :            :  * Get generic traffic metering and policing operations structure from a port
     257                 :            :  *
     258                 :            :  * @param[in] port_id
     259                 :            :  *   The port identifier of the Ethernet device.
     260                 :            :  * @param[out] error
     261                 :            :  *   Error details
     262                 :            :  *
     263                 :            :  * @return
     264                 :            :  *   The traffic metering and policing operations structure associated with
     265                 :            :  *   port_id on success, NULL otherwise.
     266                 :            :  */
     267                 :            : const struct rte_mtr_ops *
     268                 :            : rte_mtr_ops_get(uint16_t port_id, struct rte_mtr_error *error);
     269                 :            : 
     270                 :            : #ifdef __cplusplus
     271                 :            : }
     272                 :            : #endif
     273                 :            : 
     274                 :            : #endif /* __INCLUDE_RTE_MTR_DRIVER_H__ */

Generated by: LCOV version 1.14