1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
5 #ifndef __INCLUDE_RTE_MTR_DRIVER_H__
6 #define __INCLUDE_RTE_MTR_DRIVER_H__
10 * RTE Generic Traffic Metering and Policing API (Driver Side)
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
19 #include <rte_errno.h>
20 #include "rte_ethdev.h"
21 #include "ethdev_driver.h"
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);
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);
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);
44 /** @internal MTR meter policy validate. */
45 typedef int (*rte_mtr_meter_policy_validate_t)(struct rte_eth_dev *dev,
46 struct rte_mtr_meter_policy_params *policy,
47 struct rte_mtr_error *error);
49 /** @internal MTR meter policy add. */
50 typedef int (*rte_mtr_meter_policy_add_t)(struct rte_eth_dev *dev,
52 struct rte_mtr_meter_policy_params *policy,
53 struct rte_mtr_error *error);
55 /** @internal MTR meter policy delete. */
56 typedef int (*rte_mtr_meter_policy_delete_t)(struct rte_eth_dev *dev,
58 struct rte_mtr_error *error);
60 /** @internal MTR object create. */
61 typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev,
63 struct rte_mtr_params *params,
65 struct rte_mtr_error *error);
67 /** @internal MTR object destroy. */
68 typedef int (*rte_mtr_destroy_t)(struct rte_eth_dev *dev,
70 struct rte_mtr_error *error);
72 /** @internal MTR object meter enable. */
73 typedef int (*rte_mtr_meter_enable_t)(struct rte_eth_dev *dev,
75 struct rte_mtr_error *error);
77 /** @internal MTR object meter disable. */
78 typedef int (*rte_mtr_meter_disable_t)(struct rte_eth_dev *dev,
80 struct rte_mtr_error *error);
82 /** @internal MTR object meter profile update. */
83 typedef int (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev,
85 uint32_t meter_profile_id,
86 struct rte_mtr_error *error);
88 /** @internal MTR object meter policy update. */
89 typedef int (*rte_mtr_meter_policy_update_t)(struct rte_eth_dev *dev,
91 uint32_t meter_policy_id,
92 struct rte_mtr_error *error);
94 /** @internal MTR object meter DSCP table update. */
95 typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev,
97 enum rte_color *dscp_table,
98 struct rte_mtr_error *error);
100 /** @internal mtr object meter vlan table update. */
101 typedef int (*rte_mtr_meter_vlan_table_update_t)(struct rte_eth_dev *dev,
103 enum rte_color *vlan_table,
104 struct rte_mtr_error *error);
106 /** @internal Set the input color protocol on MTR object. */
107 typedef int (*rte_mtr_meter_color_in_proto_set_t)(struct rte_eth_dev *dev,
109 enum rte_mtr_color_in_protocol proto,
111 struct rte_mtr_error *error);
113 /** @internal Get the input color protocols of MTR object. */
114 typedef int (*rte_mtr_meter_color_in_proto_get_t)(struct rte_eth_dev *dev,
116 uint64_t *proto_mask,
117 struct rte_mtr_error *error);
119 /** @internal Get the input color protocol priority of MTR object. */
120 typedef int (*rte_mtr_meter_color_in_proto_prio_get_t)(struct rte_eth_dev *dev,
122 enum rte_mtr_color_in_protocol proto,
124 struct rte_mtr_error *error);
126 /** @internal MTR object enabled stats update. */
127 typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev,
130 struct rte_mtr_error *error);
132 /** @internal MTR object stats read. */
133 typedef int (*rte_mtr_stats_read_t)(struct rte_eth_dev *dev,
135 struct rte_mtr_stats *stats,
136 uint64_t *stats_mask,
138 struct rte_mtr_error *error);
141 /** MTR capabilities get */
142 rte_mtr_capabilities_get_t capabilities_get;
144 /** MTR meter profile add */
145 rte_mtr_meter_profile_add_t meter_profile_add;
147 /** MTR meter profile delete */
148 rte_mtr_meter_profile_delete_t meter_profile_delete;
150 /** MTR object create */
151 rte_mtr_create_t create;
153 /** MTR object destroy */
154 rte_mtr_destroy_t destroy;
156 /** MTR object meter enable */
157 rte_mtr_meter_enable_t meter_enable;
159 /** MTR object meter disable */
160 rte_mtr_meter_disable_t meter_disable;
162 /** MTR object meter profile update */
163 rte_mtr_meter_profile_update_t meter_profile_update;
165 /** MTR object meter DSCP table update */
166 rte_mtr_meter_dscp_table_update_t meter_dscp_table_update;
168 /** MTR object meter VLAN table update */
169 rte_mtr_meter_vlan_table_update_t meter_vlan_table_update;
171 /** Set the input color protocol on MTR object. */
172 rte_mtr_meter_color_in_proto_set_t in_proto_set;
174 /** Get the input color protocol of MTR object. */
175 rte_mtr_meter_color_in_proto_get_t in_proto_get;
177 /** Get the input color protocol priority of MTR object. */
178 rte_mtr_meter_color_in_proto_prio_get_t in_proto_prio_get;
180 /** MTR object enabled stats update */
181 rte_mtr_stats_update_t stats_update;
183 /** MTR object stats read */
184 rte_mtr_stats_read_t stats_read;
186 /** MTR meter policy validate */
187 rte_mtr_meter_policy_validate_t meter_policy_validate;
189 /** MTR meter policy add */
190 rte_mtr_meter_policy_add_t meter_policy_add;
192 /** MTR meter policy delete */
193 rte_mtr_meter_policy_delete_t meter_policy_delete;
195 /** MTR object meter policy update */
196 rte_mtr_meter_policy_update_t meter_policy_update;
200 * Initialize generic error structure.
202 * This function also sets rte_errno to a given value.
205 * Pointer to error structure (may be NULL).
207 * Related error code (rte_errno).
209 * Cause field and error type.
211 * Object responsible for the error.
213 * Human-readable error message.
219 rte_mtr_error_set(struct rte_mtr_error *error,
221 enum rte_mtr_error_type type,
226 *error = (struct rte_mtr_error){
237 * Get generic traffic metering and policing operations structure from a port
240 * The port identifier of the Ethernet device.
245 * The traffic metering and policing operations structure associated with
246 * port_id on success, NULL otherwise.
248 const struct rte_mtr_ops *
249 rte_mtr_ops_get(uint16_t port_id, struct rte_mtr_error *error);
255 #endif /* __INCLUDE_RTE_MTR_DRIVER_H__ */