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__ */
|