NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
upf_accel.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2025 NVIDIA CORPORATION AND AFFILIATES. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are permitted
5  * provided that the following conditions are met:
6  * * Redistributions of source code must retain the above copyright notice, this list of
7  * conditions and the following disclaimer.
8  * * Redistributions in binary form must reproduce the above copyright notice, this list of
9  * conditions and the following disclaimer in the documentation and/or other materials
10  * provided with the distribution.
11  * * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used
12  * to endorse or promote products derived from this software without specific prior written
13  * permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
21  * STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  */
25 
26 #ifndef UPF_ACCEL_H_
27 #define UPF_ACCEL_H_
28 
29 #include <stdbool.h>
30 
31 #include <rte_malloc.h>
32 #include <rte_hash.h>
33 
34 #include <doca_flow.h>
35 #include <doca_flow_net.h>
36 
37 #include <flow_common.h>
38 #include <packet_parser.h>
39 
44 };
45 
46 #define UPF_ACCEL_NUM_DOMAINS_PER_PORT 2
47 #define UPF_ACCEL_NUM_DOMAINS (UPF_ACCEL_PORTS_MAX * UPF_ACCEL_NUM_DOMAINS_PER_PORT)
48 
49 #define UPF_ACCEL_PDR_STR_LEN 64
50 #define UPF_ACCEL_PDR_URRIDS_LEN 16
51 #define UPF_ACCEL_PDR_QERIDS_LEN 16
52 
53 #define UPF_ACCEL_LOG_MAX_NUM_PDR 5
54 #define UPF_ACCEL_MAX_NUM_PDR (1ul << UPF_ACCEL_LOG_MAX_NUM_PDR)
55 
56 #define UPF_ACCEL_NUM_QUOTA_COUNTERS_PER_PORT UPF_ACCEL_MAX_NUM_PDR
57 
58 #define UPF_ACCEL_SRC_MAC \
59  { \
60  0xde, 0xad, 0xbe, 0xef, 0x00, 0x01 \
61  }
62 #define UPF_ACCEL_DST_MAC \
63  { \
64  0xde, 0xad, 0xbe, 0xef, 0x00, 0x02 \
65  }
66 
67 #define UPF_ACCEL_SRC_IP 0xc0a80101 // 192.168.1.1
68 #define UPF_ACCEL_DST_IP 0xc0a80201 // 192.168.2.1
69 
70 #define UPF_ACCEL_LOG_MAX_PDR_NUM_RATE_METERS 2
71 #define UPF_ACCEL_MAX_PDR_NUM_RATE_METERS (1ul << UPF_ACCEL_LOG_MAX_PDR_NUM_RATE_METERS)
72 
73 #define UPF_ACCEL_META_PKT_DIR_OFFSET (UPF_ACCEL_LOG_MAX_NUM_PDR)
74 #define UPF_ACCEL_META_PKT_DIR_UL (0x1 << UPF_ACCEL_META_PKT_DIR_OFFSET)
75 #define UPF_ACCEL_META_PKT_DIR_DL (0x2 << UPF_ACCEL_META_PKT_DIR_OFFSET)
76 #define UPF_ACCEL_META_PKT_DIR_MASK (0x3 << UPF_ACCEL_META_PKT_DIR_OFFSET)
77 
78 #define UPF_ACCEL_HW_AGING_POLL_INTERVAL_SEC (1)
79 #define UPF_ACCEL_HW_AGING_TIME_DEFAULT_SEC (15)
80 
81 #define UPF_ACCEL_SW_AGING_TIME_DEFAULT_SEC (15)
82 
83 /*
84  * Number of packets handled in SW before deciding to accelerate, example:
85  * If UPF_ACCEL_DEFAULT_DPI_THRESHOLD = 2 then we handle 2 packets in SW,
86  * the 2nd packet triggers a rule creation for the side it came from.
87  * Must be positive (1 is for undelayed acceleration).
88  */
89 #define UPF_ACCEL_DEFAULT_DPI_THRESHOLD 2
90 
91 #define UPF_ACCEL_FIXED_PORT_NONE (-1)
92 
93 #define UNUSED(x) ((void)(x))
94 
95 extern volatile bool force_quit;
96 
97 typedef enum upf_accel_port (*upf_accel_get_forwarding_port)(enum upf_accel_port port_id);
98 
99 struct upf_accel_fp_data;
100 
102  /* Only those two types are supported */
103  UPF_ACCEL_PDR_PDI_SI_UL = 0, /* Source Interface - Uplink */
104  UPF_ACCEL_PDR_PDI_SI_DL = 2, /* Source Interface - Downlink */
105 };
106 
110 };
111 
117 };
118 
127 
133 
139 
146 
148 };
149 
155 };
156 
160 };
161 
163  UPF_ACCEL_FLOW_STATUS_NONE, /* Flow isn't active on this port (not established yet or aged out) */
164  UPF_ACCEL_FLOW_STATUS_PENDING, /* Flow is in the proccess of being established */
165  UPF_ACCEL_FLOW_STATUS_UNACCELERATED, /* Flow not accelerated yet */
166  UPF_ACCEL_FLOW_STATUS_ACCELERATED, /* Flow is accelerated (by HW) */
167  UPF_ACCEL_FLOW_STATUS_FAILED_ACCELERATION, /* Failed to accelerate */
168 };
169 
171  uint32_t *ids[UPF_ACCEL_PORTS_MAX]; /* Array of IDs per port */
172  uint16_t cntr_0; /* Index of the first counter */
173  size_t cntrs_num; /* Number of counters (in each port) */
174 };
175 
177  union {
178  uint32_t v4; /* IPV4 address */
179  uint8_t v6[12]; /* IPV6 address */
180  };
181  uint8_t netmask; /* IP netmask */
182 };
183 
185  uint16_t from; /* Start of the range */
186  uint16_t to; /* End of the range*/
187 };
188 
190  uint32_t id; /* PDR ID */
191  uint32_t farid; /* FAR ID */
192  uint32_t urrids_num; /* Number of URR IDs */
193  uint32_t urrids[UPF_ACCEL_PDR_URRIDS_LEN]; /* List of URR IDs */
194  uint32_t qerids_num; /* Number of QER IDs, equivalent to num of meters */
195  uint32_t qerids[UPF_ACCEL_PDR_QERIDS_LEN]; /* List of QER IDs */
196  enum upf_accel_pdr_pdi_si pdi_si; /* PDI's source interface */
197  uint32_t pdi_local_teid_start; /* PDI's local TEID start */
198  uint32_t pdi_local_teid_end; /* PDI's local TEID end */
199  struct upf_accel_ip_addr pdi_local_teid_ip; /* PDI's local teid IP */
200  struct upf_accel_ip_addr pdi_ueip; /* PDI's UEIP */
201  uint16_t pdi_sdf_proto; /* PDI's SDF protocol */
202  uint8_t pdi_qfi; /* PDI's QFI */
203  struct upf_accel_ip_addr pdi_sdf_from_ip; /* PDI's SDF from IP */
204  struct upf_accel_ip_port_range pdi_sdf_from_port_range; /* PDI's SDF from port range */
205  struct upf_accel_ip_addr pdi_sdf_to_ip; /* PDI's SDF to IP */
206  struct upf_accel_ip_port_range pdi_sdf_to_port_range; /* PDI's SDF to port range */
207 };
208 
210  size_t num_pdrs; /* Number of PDRs */
211  struct upf_accel_pdr arr_pdrs[]; /* PDRs array */
212 };
213 
215  uint32_t id; /* FAR ID */
216  struct upf_accel_ip_addr fp_oh_ip; /* Forwardind policy outer header creation IP */
217  uint32_t fp_oh_teid; /* Forwarding policy outer header creation teid */
218 };
219 
221  size_t num_fars; /* Number of FARs */
222  struct upf_accel_far arr_fars[]; /* FARs array */
223 };
224 
226  uint32_t id; /* URR ID */
227  uint64_t volume_quota_total_volume; /* Volume quota total volume */
228 };
229 
231  size_t num_urrs; /* Number of URRs */
232  struct upf_accel_urr arr_urrs[]; /* URRs array */
233 };
234 
236  uint32_t id; /* QER ID */
237  uint8_t qfi; /* QFI */
238  uint64_t mbr_dl_mbr; /* MBR downlink */
239  uint64_t mbr_ul_mbr; /* MBR uplink */
240 };
241 
243  size_t num_qers; /* Number of QERs */
244  struct upf_accel_qer arr_qers[]; /* QERs array */
245 };
246 
248  uint32_t id; /* VXLAN ID */
249  uint32_t vni; /* VXLAN network identifier */
250  uint8_t mac[DOCA_FLOW_ETHER_ADDR_LEN]; /* MAC address */
251 };
252 
254  size_t num_vxlans; /* Number of VXLANs */
255  struct upf_accel_vxlan arr_vxlans[]; /* VXLANs array */
256 };
257 
259  const char *smf_config_file_path; /* Path to SMF configuration file */
260  struct upf_accel_pdrs *pdrs; /* PDRs */
261  struct upf_accel_fars *fars; /* FARs */
262  struct upf_accel_urrs *urrs; /* URRs */
263  struct upf_accel_qers *qers; /* QERs */
264  const char *vxlan_config_file_path; /* Path to SMF configuration file */
265  struct upf_accel_vxlans *vxlans; /* VXLANs */
266  uint32_t hw_aging_time_sec; /* Amount of seconds before deleting an accelerated flow */
267  uint32_t sw_aging_time_sec; /* Amount of seconds before deleting an unaccelerated flow */
268  uint32_t dpi_threshold; /* Number of packets handled in SW before deciding to accelerate */
269  uint32_t fixed_port; /* UL port number in fixed port mode */
270 };
271 
273  uint32_t te_ip; /* Source IP */
274  uint32_t te_id; /* TEID */
275  uint8_t qfi; /* QFI */
276 };
277 static_assert(sizeof(struct upf_accel_match_tun) == 12, "Unexpected tunnel key size");
278 
280  uint32_t ue_ip; /* User equipment IP */
281  uint32_t extern_ip; /* Extern IP */
282  uint16_t ue_port; /* User equipment port */
283  uint16_t extern_port; /* Extern port */
284  uint8_t ip_proto; /* IP protocol */
285 };
286 static_assert(sizeof(struct upf_accel_match_5t) == 16, "Unexpected 5t key size");
287 
289  struct upf_accel_match_5t inner; /* Inner match */
290  struct upf_accel_match_tun outer; /* Outer (tunnel) match */
291 };
292 static_assert(sizeof(struct upf_accel_match_8t) == 28, "Unexpected 8t key size");
293 
295  int32_t head; /* Head of the SW aging linked list */
296  int32_t tail; /* Tail of the SW aging linked list */
297 };
298 
300  int32_t prev; /* Index of the prev node in the SW aging linked list */
301  int32_t next; /* Index of the next node in the SW aging linked list */
302  uint64_t timestamp; /* Timestamp of the last packet received in this flow */
303 };
304 
306  struct upf_accel_match_8t match; /* Connection match */
307  uint64_t cnt_pkts[PARSER_PKT_TYPE_NUM]; /* Packets counter */
308  uint64_t cnt_bytes[PARSER_PKT_TYPE_NUM]; /* Bytes counter */
309  union {
310  /* Fields required for accelerated flows */
311  struct {
312  enum doca_flow_entry_status status; /* Flow accelerated entry status */
313  struct doca_flow_pipe_entry *entry; /* Flow accelerated entry */
314  };
315  /* Fields required for unaccelerated flows */
316  struct upf_accel_sw_aging_ll_node sw_aging_node; /* SW Aging linked list node */
317  } entries[PARSER_PKT_TYPE_NUM]; /* Pipe entries (accelerated) / Linked list entries (unaccelerated) */
318  struct upf_accel_fp_data *fp_data; /* Pointer to the data of the handling core */
319  uint32_t pdr_id[PARSER_PKT_TYPE_NUM]; /* PDR ID */
320  int32_t conn_idx; /* Position of the connection in the hash table */
321  hash_sig_t hash; /* RTE hash (aka signature) */
322  enum upf_accel_flow_status flow_status[PARSER_PKT_TYPE_NUM]; /* Status of an accelerated flow */
323 };
324 
326  struct entries_status ctrl_status; /* Control status */
327 };
328 
330  enum upf_accel_rule_type type; /* Type of the entry */
331  union {
332  struct upf_accel_dyn_entry_ctx dyn_ctx; /* Dynamic entry context */
333  struct upf_accel_static_entry_ctx static_ctx; /* Static entry context */
334  };
335 } __rte_aligned(RTE_CACHE_LINE_SIZE);
336 
338  uint16_t num_ports; /* Number of ports */
339  uint16_t num_queues; /* Number of device queues */
340  struct flow_resources resource; /* Flow resources */
341  uint32_t num_shared_resources[SHARED_RESOURCE_NUM_VALUES]; /* Number of shared resources */
342  const struct upf_accel_config *upf_accel_cfg; /* UPF Acceleration configuration */
343  struct doca_flow_pipe *pipes[UPF_ACCEL_PORTS_MAX][UPF_ACCEL_PIPE_NUM]; /* Pipes */
344  struct doca_flow_port *ports[UPF_ACCEL_PORTS_MAX]; /* Ports */
345  struct doca_dev *dev_arr[UPF_ACCEL_PORTS_MAX]; /* Devices array */
346  struct doca_flow_pipe_entry *smf_entries[UPF_ACCEL_MAX_NUM_PDR][UPF_ACCEL_PORTS_MAX]; /* Resulting hw entries */
347  struct doca_flow_pipe_entry *drop_entries[UPF_ACCEL_DROP_NUM][UPF_ACCEL_NUM_DOMAINS]; /* Resulting hw Drops
348  entries */
349  struct upf_accel_entry_ctx static_entry_ctx[UPF_ACCEL_PORTS_MAX]; /* Static entries contexs */
350  uint32_t num_static_entries[UPF_ACCEL_PORTS_MAX]; /* Number of static entries */
351  upf_accel_get_forwarding_port get_fwd_port; /* Function pointer to get fwd port */
352 };
353 
355  struct doca_flow_actions **action_list; /* List of actions */
356  struct doca_flow_action_descs **action_desc_list; /* List of action descriptions */
357  size_t num_actions; /* Number of actions */
358 };
359 
361  enum upf_accel_port port_id; /* Port ID */
362  struct doca_flow_port *port; /* Port */
363  enum doca_flow_pipe_domain domain; /* Domain (RX/TX) */
364  char *name; /* Pipe name */
365  bool is_root; /* Flag to indicate if the pipe is root */
366  uint32_t num_entries; /* Number of entries */
367  struct doca_flow_match *match; /* Match */
368  struct doca_flow_match *match_mask; /* Match mask */
369  struct doca_flow_fwd *fwd; /* Forward hit */
370  struct doca_flow_fwd *fwd_miss; /* Forward miss */
371  struct doca_flow_monitor *mon; /* Monitor */
372  struct upf_accel_action_cfg actions; /* UPF Acceleration actions */
373 };
374 
376  struct doca_flow_pipe *pipe; /* Pipe */
377  struct doca_flow_match *match; /* Match */
378  struct doca_flow_actions *action; /* Action */
379  struct doca_flow_monitor *mon; /* Monitor */
380  struct doca_flow_fwd *fwd; /* Forward */
381  enum upf_accel_port port_id; /* Port ID */
382  enum doca_flow_pipe_domain domain; /* Domain (RX/TX) */
383  uint32_t entry_idx; /* Entry index */
384 };
385 
386 /*
387  * Calculate index of a given drop pipe
388  *
389  * @pipe_cfg [in]: UPF Acceleration configuration
390  * @drop_type [in]: the desired drop pipe type
391  * @return: index of the desired pipe
392  */
393 static inline uint8_t upf_accel_drop_idx_get(struct upf_accel_pipe_cfg *pipe_cfg,
394  enum upf_accel_pipe_drop_type drop_type)
395 {
396  return (pipe_cfg->domain ? UPF_ACCEL_PIPE_TX_DROPS_START : UPF_ACCEL_PIPE_RX_DROPS_START) + drop_type;
397 }
398 
399 /*
400  * Calculate index of the given domain of the given port
401  *
402  * @port_id [in]: port id
403  * @domain [in]: domain id
404  * @return: index of the domain
405  */
406 static inline uint8_t upf_accel_domain_idx_get(enum upf_accel_port port_id, uint8_t domain)
407 {
408  return 2 * port_id + !!domain;
409 }
410 
411 /*
412  * Get the opposite port of a given port
413  *
414  * @port_id [in]: port ID
415  * @return: the opposite port
416  */
418 {
419  const enum upf_accel_port opposite_port = port_id ^ 1;
420 
421  assert(opposite_port == UPF_ACCEL_PORT0 || opposite_port == UPF_ACCEL_PORT1);
422 
423  return opposite_port;
424 }
425 
426 /*
427  * SMF Config parsing & initialization
428  *
429  * @cfg [in]: UPF Acceleration configuration.
430  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
431  */
433 
434 /*
435  * VXLAN Config parsing & initialization
436  *
437  * @cfg [in]: UPF Acceleration onfiguration.
438  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
439  */
441 
442 /*
443  * Cleans SMF configuration logic
444  *
445  * @cfg [in]: UPF Acceleration configuration.
446  */
448 
449 /*
450  * Cleans VXLAN configuration logic
451  *
452  * @cfg [in]: UPF Acceleration configuration.
453  */
455 
456 /*
457  * Init the SW Aging doubly linked list head & tail
458  *
459  * @fp_data [in]: flow processing data
460  * @pkt_type [in]: packet direction
461  */
462 void upf_accel_sw_aging_ll_init(struct upf_accel_fp_data *fp_data, enum parser_pkt_type pkt_type);
463 
464 #endif /* UPF_ACCEL_H_ */
static enum doca_flow_pipe_domain domain
enum doca_error doca_error_t
DOCA API return codes.
#define DOCA_FLOW_ETHER_ADDR_LEN
Definition: doca_flow_net.h:36
doca_flow_entry_status
doca flow entry status
Definition: doca_flow.h:160
doca_flow_pipe_domain
doca flow pipe domain
Definition: doca_flow.h:240
const struct ip_frag_config * cfg
Definition: ip_frag_dp.c:0
parser_pkt_type
Definition: packet_parser.h:35
@ PARSER_PKT_TYPE_NUM
Definition: packet_parser.h:39
#define SHARED_RESOURCE_NUM_VALUES
Definition: flow_common.h:59
uint32_t * ids[UPF_ACCEL_PORTS_MAX]
Definition: upf_accel.h:171
action descriptor array
Definition: doca_flow.h:1033
doca flow actions information
Definition: doca_flow.h:684
forwarding configuration
Definition: doca_flow.h:779
uint16_t port_id
Definition: doca_flow.h:795
doca flow matcher information
Definition: doca_flow.h:491
doca monitor action configuration
Definition: doca_flow.h:968
user context struct that will be used in entries process callback
Definition: flow_common.h:78
struct doca_flow_action_descs ** action_desc_list
Definition: upf_accel.h:356
struct doca_flow_actions ** action_list
Definition: upf_accel.h:355
struct upf_accel_pdrs * pdrs
Definition: upf_accel.h:260
uint32_t sw_aging_time_sec
Definition: upf_accel.h:267
const char * vxlan_config_file_path
Definition: upf_accel.h:264
const char * smf_config_file_path
Definition: upf_accel.h:259
struct upf_accel_qers * qers
Definition: upf_accel.h:263
uint32_t hw_aging_time_sec
Definition: upf_accel.h:266
struct upf_accel_vxlans * vxlans
Definition: upf_accel.h:265
struct upf_accel_urrs * urrs
Definition: upf_accel.h:262
uint32_t dpi_threshold
Definition: upf_accel.h:268
uint32_t fixed_port
Definition: upf_accel.h:269
struct upf_accel_fars * fars
Definition: upf_accel.h:261
upf_accel_get_forwarding_port get_fwd_port
Definition: upf_accel.h:351
uint16_t num_queues
Definition: upf_accel.h:339
struct doca_flow_pipe * pipes[UPF_ACCEL_PORTS_MAX][UPF_ACCEL_PIPE_NUM]
Definition: upf_accel.h:343
struct flow_resources resource
Definition: upf_accel.h:340
uint32_t num_static_entries[UPF_ACCEL_PORTS_MAX]
Definition: upf_accel.h:350
struct doca_flow_port * ports[UPF_ACCEL_PORTS_MAX]
Definition: upf_accel.h:344
uint16_t num_ports
Definition: upf_accel.h:338
struct doca_flow_pipe_entry * drop_entries[UPF_ACCEL_DROP_NUM][UPF_ACCEL_NUM_DOMAINS]
Definition: upf_accel.h:347
struct doca_dev * dev_arr[UPF_ACCEL_PORTS_MAX]
Definition: upf_accel.h:345
uint32_t num_shared_resources[SHARED_RESOURCE_NUM_VALUES]
Definition: upf_accel.h:341
struct upf_accel_entry_ctx static_entry_ctx[UPF_ACCEL_PORTS_MAX]
Definition: upf_accel.h:349
struct doca_flow_pipe_entry * smf_entries[UPF_ACCEL_MAX_NUM_PDR][UPF_ACCEL_PORTS_MAX]
Definition: upf_accel.h:346
const struct upf_accel_config * upf_accel_cfg
Definition: upf_accel.h:342
Definition: upf_accel.h:305
uint64_t cnt_pkts[PARSER_PKT_TYPE_NUM]
Definition: upf_accel.h:307
struct upf_accel_match_8t match
Definition: upf_accel.h:306
uint32_t pdr_id[PARSER_PKT_TYPE_NUM]
Definition: upf_accel.h:319
struct doca_flow_pipe_entry * entry
Definition: upf_accel.h:313
hash_sig_t hash
Definition: upf_accel.h:321
struct upf_accel_fp_data * fp_data
Definition: upf_accel.h:318
uint64_t cnt_bytes[PARSER_PKT_TYPE_NUM]
Definition: upf_accel.h:308
union upf_accel_dyn_entry_ctx::@47 entries[PARSER_PKT_TYPE_NUM]
enum doca_flow_entry_status status
Definition: upf_accel.h:312
struct upf_accel_sw_aging_ll_node sw_aging_node
Definition: upf_accel.h:316
int32_t conn_idx
Definition: upf_accel.h:320
enum upf_accel_flow_status flow_status[PARSER_PKT_TYPE_NUM]
Definition: upf_accel.h:322
Definition: upf_accel.h:375
uint32_t entry_idx
Definition: upf_accel.h:383
struct doca_flow_monitor * mon
Definition: upf_accel.h:379
struct doca_flow_match * match
Definition: upf_accel.h:377
struct doca_flow_actions * action
Definition: upf_accel.h:378
struct doca_flow_fwd * fwd
Definition: upf_accel.h:380
struct doca_flow_pipe * pipe
Definition: upf_accel.h:376
enum doca_flow_pipe_domain domain
Definition: upf_accel.h:382
enum upf_accel_port port_id
Definition: upf_accel.h:381
Definition: upf_accel.h:329
struct upf_accel_dyn_entry_ctx dyn_ctx
Definition: upf_accel.h:332
enum upf_accel_rule_type type
Definition: upf_accel.h:330
struct upf_accel_static_entry_ctx static_ctx
Definition: upf_accel.h:333
uint32_t fp_oh_teid
Definition: upf_accel.h:217
uint32_t id
Definition: upf_accel.h:215
struct upf_accel_ip_addr fp_oh_ip
Definition: upf_accel.h:216
struct upf_accel_far arr_fars[]
Definition: upf_accel.h:222
size_t num_fars
Definition: upf_accel.h:221
uint8_t v6[12]
Definition: upf_accel.h:179
uint16_t ue_port
Definition: upf_accel.h:282
uint16_t extern_port
Definition: upf_accel.h:283
uint32_t extern_ip
Definition: upf_accel.h:281
struct upf_accel_match_5t inner
Definition: upf_accel.h:289
struct upf_accel_match_tun outer
Definition: upf_accel.h:290
uint32_t qerids[UPF_ACCEL_PDR_QERIDS_LEN]
Definition: upf_accel.h:195
struct upf_accel_ip_addr pdi_sdf_to_ip
Definition: upf_accel.h:205
uint32_t urrids_num
Definition: upf_accel.h:192
uint8_t pdi_qfi
Definition: upf_accel.h:202
uint16_t pdi_sdf_proto
Definition: upf_accel.h:201
struct upf_accel_ip_addr pdi_local_teid_ip
Definition: upf_accel.h:199
struct upf_accel_ip_addr pdi_sdf_from_ip
Definition: upf_accel.h:203
uint32_t qerids_num
Definition: upf_accel.h:194
uint32_t pdi_local_teid_start
Definition: upf_accel.h:197
uint32_t pdi_local_teid_end
Definition: upf_accel.h:198
struct upf_accel_ip_addr pdi_ueip
Definition: upf_accel.h:200
uint32_t urrids[UPF_ACCEL_PDR_URRIDS_LEN]
Definition: upf_accel.h:193
struct upf_accel_ip_port_range pdi_sdf_from_port_range
Definition: upf_accel.h:204
enum upf_accel_pdr_pdi_si pdi_si
Definition: upf_accel.h:196
struct upf_accel_ip_port_range pdi_sdf_to_port_range
Definition: upf_accel.h:206
uint32_t farid
Definition: upf_accel.h:191
uint32_t id
Definition: upf_accel.h:190
struct upf_accel_pdr arr_pdrs[]
Definition: upf_accel.h:211
size_t num_pdrs
Definition: upf_accel.h:210
uint32_t num_entries
Definition: upf_accel.h:366
struct doca_flow_fwd * fwd
Definition: upf_accel.h:369
enum doca_flow_pipe_domain domain
Definition: upf_accel.h:363
struct doca_flow_match * match
Definition: upf_accel.h:367
struct doca_flow_port * port
Definition: upf_accel.h:362
struct doca_flow_match * match_mask
Definition: upf_accel.h:368
struct doca_flow_monitor * mon
Definition: upf_accel.h:371
struct upf_accel_action_cfg actions
Definition: upf_accel.h:372
struct doca_flow_fwd * fwd_miss
Definition: upf_accel.h:370
enum upf_accel_port port_id
Definition: upf_accel.h:361
uint32_t id
Definition: upf_accel.h:236
uint8_t qfi
Definition: upf_accel.h:237
uint64_t mbr_dl_mbr
Definition: upf_accel.h:238
uint64_t mbr_ul_mbr
Definition: upf_accel.h:239
size_t num_qers
Definition: upf_accel.h:243
struct upf_accel_qer arr_qers[]
Definition: upf_accel.h:244
Definition: upf_accel.h:325
struct entries_status ctrl_status
Definition: upf_accel.h:326
uint64_t volume_quota_total_volume
Definition: upf_accel.h:227
uint32_t id
Definition: upf_accel.h:226
size_t num_urrs
Definition: upf_accel.h:231
struct upf_accel_urr arr_urrs[]
Definition: upf_accel.h:232
uint32_t vni
Definition: upf_accel.h:249
uint32_t id
Definition: upf_accel.h:248
uint8_t mac[DOCA_FLOW_ETHER_ADDR_LEN]
Definition: upf_accel.h:250
size_t num_vxlans
Definition: upf_accel.h:254
struct upf_accel_vxlan arr_vxlans[]
Definition: upf_accel.h:255
void upf_accel_sw_aging_ll_init(struct upf_accel_fp_data *fp_data, enum parser_pkt_type pkt_type)
upf_accel_flow_status
Definition: upf_accel.h:162
@ UPF_ACCEL_FLOW_STATUS_UNACCELERATED
Definition: upf_accel.h:165
@ UPF_ACCEL_FLOW_STATUS_FAILED_ACCELERATION
Definition: upf_accel.h:167
@ UPF_ACCEL_FLOW_STATUS_ACCELERATED
Definition: upf_accel.h:166
@ UPF_ACCEL_FLOW_STATUS_PENDING
Definition: upf_accel.h:164
@ UPF_ACCEL_FLOW_STATUS_NONE
Definition: upf_accel.h:163
#define UPF_ACCEL_PDR_URRIDS_LEN
Definition: upf_accel.h:50
enum upf_accel_port(* upf_accel_get_forwarding_port)(enum upf_accel_port port_id)
Definition: upf_accel.h:97
void upf_accel_vxlan_cleanup(struct upf_accel_config *cfg)
#define UPF_ACCEL_PDR_QERIDS_LEN
Definition: upf_accel.h:51
struct upf_accel_ctx __rte_aligned
upf_accel_port
Definition: upf_accel.h:40
@ UPF_ACCEL_PORT0
Definition: upf_accel.h:41
@ UPF_ACCEL_PORTS_MAX
Definition: upf_accel.h:43
@ UPF_ACCEL_PORT1
Definition: upf_accel.h:42
doca_error_t upf_accel_vxlan_parse(struct upf_accel_config *cfg)
upf_accel_pipe_drop_type
Definition: upf_accel.h:112
@ UPF_ACCEL_DROP_DBG
Definition: upf_accel.h:113
@ UPF_ACCEL_DROP_RATE
Definition: upf_accel.h:114
@ UPF_ACCEL_DROP_NUM
Definition: upf_accel.h:116
@ UPF_ACCEL_DROP_FILTER
Definition: upf_accel.h:115
static uint8_t upf_accel_drop_idx_get(struct upf_accel_pipe_cfg *pipe_cfg, enum upf_accel_pipe_drop_type drop_type)
Definition: upf_accel.h:393
#define UPF_ACCEL_MAX_PDR_NUM_RATE_METERS
Definition: upf_accel.h:71
#define UPF_ACCEL_MAX_NUM_PDR
Definition: upf_accel.h:54
static uint8_t upf_accel_domain_idx_get(enum upf_accel_port port_id, uint8_t domain)
Definition: upf_accel.h:406
void upf_accel_smf_cleanup(struct upf_accel_config *cfg)
upf_accel_rule_type
Definition: upf_accel.h:157
@ UPF_ACCEL_RULE_STATIC
Definition: upf_accel.h:159
@ UPF_ACCEL_RULE_DYNAMIC
Definition: upf_accel.h:158
upf_accel_pipe_type
Definition: upf_accel.h:119
@ UPF_ACCEL_PIPE_FAR
Definition: upf_accel.h:121
@ UPF_ACCEL_PIPE_TX_COLOR_MATCH_START
Definition: upf_accel.h:136
@ UPF_ACCEL_PIPE_8T
Definition: upf_accel.h:142
@ UPF_ACCEL_PIPE_ULDL
Definition: upf_accel.h:140
@ UPF_ACCEL_PIPE_DL_TO_SW
Definition: upf_accel.h:122
@ UPF_ACCEL_PIPE_DECAP
Definition: upf_accel.h:145
@ UPF_ACCEL_PIPE_RX_DROPS_START
Definition: upf_accel.h:125
@ UPF_ACCEL_PIPE_TX_ROOT
Definition: upf_accel.h:128
@ UPF_ACCEL_PIPE_TX_VXLAN_ENCAP
Definition: upf_accel.h:130
@ UPF_ACCEL_PIPE_TX_COLOR_MATCH_END
Definition: upf_accel.h:137
@ UPF_ACCEL_PIPE_TX_SHARED_METERS_END
Definition: upf_accel.h:135
@ UPF_ACCEL_PIPE_TX_DROPS_END
Definition: upf_accel.h:132
@ UPF_ACCEL_PIPE_RX_DROPS_END
Definition: upf_accel.h:126
@ UPF_ACCEL_PIPE_TX_COUNTER
Definition: upf_accel.h:129
@ UPF_ACCEL_PIPE_NUM
Definition: upf_accel.h:147
@ UPF_ACCEL_PIPE_RX_VXLAN_DECAP
Definition: upf_accel.h:124
@ UPF_ACCEL_PIPE_5T
Definition: upf_accel.h:144
@ UPF_ACCEL_PIPE_7T
Definition: upf_accel.h:143
@ UPF_ACCEL_PIPE_RX_ROOT
Definition: upf_accel.h:120
@ UPF_ACCEL_PIPE_UL_TO_SW
Definition: upf_accel.h:123
@ UPF_ACCEL_PIPE_EXT_GTP
Definition: upf_accel.h:141
@ UPF_ACCEL_PIPE_TX_SHARED_METERS_START
Definition: upf_accel.h:134
@ UPF_ACCEL_PIPE_TX_DROPS_START
Definition: upf_accel.h:131
@ UPF_ACCEL_PIPE_TX_COLOR_MATCH_NO_MORE_METERS
Definition: upf_accel.h:138
static enum upf_accel_port upf_accel_get_opposite_port(enum upf_accel_port port_id)
Definition: upf_accel.h:417
doca_error_t upf_accel_smf_parse(struct upf_accel_config *cfg)
volatile bool force_quit
upf_accel_pdr_pdi_si
Definition: upf_accel.h:101
@ UPF_ACCEL_PDR_PDI_SI_DL
Definition: upf_accel.h:104
@ UPF_ACCEL_PDR_PDI_SI_UL
Definition: upf_accel.h:103
upf_accel_far_action
Definition: upf_accel.h:107
@ UPF_ACCEL_FAR_ACTION_DROP
Definition: upf_accel.h:108
@ UPF_ACCEL_FAR_ACTION_FWD
Definition: upf_accel.h:109
upf_accel_encap_action_type
Definition: upf_accel.h:150
@ UPF_ACCEL_ENCAP_ACTION_NONE
Definition: upf_accel.h:153
@ UPF_ACCEL_ENCAP_ACTION_NUM
Definition: upf_accel.h:154
@ UPF_ACCEL_ENCAP_ACTION_5G
Definition: upf_accel.h:152
@ UPF_ACCEL_ENCAP_ACTION_4G
Definition: upf_accel.h:151
#define UPF_ACCEL_NUM_DOMAINS
Definition: upf_accel.h:47