NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
upf_accel.c File Reference
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <rte_ethdev.h>
#include <rte_hash_crc.h>
#include <dpdk_utils.h>
#include <doca_dpdk.h>
#include <doca_argp.h>
#include <doca_flow.h>
#include <doca_bitfield.h>
#include <doca_log.h>
#include "upf_accel.h"
#include "upf_accel_flow_processing.h"
#include "upf_accel_pipeline.h"
Include dependency graph for upf_accel.c:

Go to the source code of this file.

Functions

 DOCA_LOG_REGISTER (UPF_ACCEL)
 
static uint32_t port_id_and_idx_to_quota_counter (enum upf_accel_port port_id, uint32_t idx)
 
static uint32_t upf_accel_shared_meters_table_offset_get (enum upf_accel_port port_id, uint32_t pdr_idx, uint32_t meter_idx)
 
static uint64_t upf_accel_clamp_rate (uint64_t val)
 
static uint32_t upf_accel_get_pdr_index_from_pdrs (const struct upf_accel_pdrs *pdrs, const struct upf_accel_pdr *pdr)
 
static struct upf_accel_qerupf_accel_get_qer_by_qer_id (struct upf_accel_qers *qers, uint32_t qer_id)
 
static doca_error_t upf_accel_shared_meters_dev_init (struct upf_accel_ctx *upf_accel_ctx, struct doca_flow_shared_resource_cfg *cfg, const struct upf_accel_pdr *pdr, enum upf_accel_port port_id)
 
static doca_error_t upf_accel_shared_meters_level_init (struct upf_accel_ctx *upf_accel_ctx, const struct upf_accel_pdr *pdr)
 
static doca_error_t upf_accel_shared_meters_init (struct upf_accel_ctx *upf_accel_ctx)
 
static doca_error_t pipe_pdr_insert (struct upf_accel_ctx *upf_accel_ctx, struct upf_accel_entry_cfg *cfg, struct doca_flow_pipe_entry **entry)
 
static const struct upf_accel_farupf_accel_get_far_by_id (const struct upf_accel_fars *fars, uint32_t far_id)
 
static doca_error_t upf_accel_pipe_encap_counter_insert (struct upf_accel_ctx *upf_accel_ctx, uint32_t pdr_idx, uint32_t pdr_id, uint32_t far_id, uint8_t qfi, enum upf_accel_pdr_pdi_si pdi_si, enum upf_accel_port port_id, struct doca_flow_pipe_entry **entry)
 
static doca_error_t upf_accel_tx_counters_insert (struct upf_accel_ctx *upf_accel_ctx, uint32_t pdr_idx, uint32_t pdr_id, uint32_t far_id, uint8_t qfi, enum upf_accel_pdr_pdi_si pdi_si, struct doca_flow_pipe_entry **entry)
 
static doca_error_t pipe_shared_meter_common_insert (struct upf_accel_ctx *upf_accel_ctx, uint32_t pdr_idx, uint32_t qer_idx, enum upf_accel_port port_id)
 
static doca_error_t pipe_shared_meter_insert (struct upf_accel_ctx *upf_accel_ctx, uint32_t pdr_idx, uint32_t qer_idx)
 
static doca_error_t upf_accel_smf_rules_add (struct upf_accel_ctx *upf_accel_ctx)
 
static doca_error_t alloc_and_populate_quota_counters_ids (uint16_t start_idx, size_t num_ports, size_t num_cntrs, struct app_shared_counter_ids *shared_counter_ids)
 
static void free_quota_counters_ids (struct app_shared_counter_ids *shared_counter_ids, uint16_t num_ports)
 
static uint32_t calculate_hash_table_size (uint16_t num_cores)
 
static doca_error_t upf_accel_init_quota_counters (struct upf_accel_ctx *upf_accel_ctx)
 
static void upf_accel_fp_data_cleanup (struct upf_accel_fp_data *fp_data_arr)
 
static doca_error_t upf_accel_fp_data_init (struct upf_accel_ctx *ctx, struct upf_accel_fp_data **fp_data_arr_out)
 
static void upf_accel_fp_sw_counters_print (struct upf_accel_fp_data *fp_data_arr)
 
static void upf_accel_fp_accel_counters_print (struct upf_accel_fp_data *fp_data_arr, const char *name)
 
static void upf_accel_pdrs_print (struct upf_accel_ctx *upf_accel_ctx)
 
static void upf_accel_drop_counter_print (struct upf_accel_ctx *upf_accel_ctx, enum upf_accel_pipe_drop_type drop_type)
 
static void upf_accel_static_hw_counters_print (struct upf_accel_ctx *upf_accel_ctx)
 
static void upf_accel_debug_counters_print (struct upf_accel_ctx *upf_accel_ctx, struct upf_accel_fp_data *fp_data_arr)
 
static doca_error_t upf_accel_signals_mask (sigset_t *sigset)
 
static int upf_accel_fp_loop_wrapper (void *param)
 
static int upf_accel_calc_num_shared_meters (uint16_t num_ports)
 
static int upf_accel_calc_num_shared_counters (uint16_t num_ports)
 
static enum upf_accel_port upf_accel_single_port_get_fwd_port (enum upf_accel_port port_id)
 
static doca_error_t deinit_upf_accel (struct upf_accel_ctx *upf_accel_ctx, struct upf_accel_fp_data *fp_data_arr)
 
static doca_error_t init_upf_accel (struct upf_accel_ctx *upf_accel_ctx, struct upf_accel_fp_data **fp_data_arr)
 
static doca_error_t run_upf_accel (struct upf_accel_ctx *upf_accel_ctx, struct upf_accel_fp_data *fp_data_arr)
 
static doca_error_t smf_config_file_path_callback (void *param, void *config)
 
static doca_error_t vxlan_config_file_path_callback (void *param, void *config)
 
static doca_error_t aging_time_sec_callback (void *param, void *config)
 
static doca_error_t pkts_before_accel_callback (void *param, void *config)
 
static doca_error_t fixed_port_callback (void *param, void *config)
 
static doca_error_t upf_accel_register_params (void)
 
static doca_error_t upf_accel_dpdk_config_num_ports (struct application_dpdk_config *dpdk_config)
 
int main (int argc, char **argv)
 

Variables

volatile bool force_quit
 

Function Documentation

◆ aging_time_sec_callback()

static doca_error_t aging_time_sec_callback ( void *  param,
void *  config 
)
static

Definition at line 1354 of file upf_accel.c.

◆ alloc_and_populate_quota_counters_ids()

static doca_error_t alloc_and_populate_quota_counters_ids ( uint16_t  start_idx,
size_t  num_ports,
size_t  num_cntrs,
struct app_shared_counter_ids shared_counter_ids 
)
static

Definition at line 540 of file upf_accel.c.

◆ calculate_hash_table_size()

static uint32_t calculate_hash_table_size ( uint16_t  num_cores)
static

Definition at line 602 of file upf_accel.c.

◆ deinit_upf_accel()

static doca_error_t deinit_upf_accel ( struct upf_accel_ctx upf_accel_ctx,
struct upf_accel_fp_data fp_data_arr 
)
static

Definition at line 1143 of file upf_accel.c.

◆ DOCA_LOG_REGISTER()

DOCA_LOG_REGISTER ( UPF_ACCEL  )

◆ fixed_port_callback()

static doca_error_t fixed_port_callback ( void *  param,
void *  config 
)
static

Definition at line 1406 of file upf_accel.c.

◆ free_quota_counters_ids()

static void free_quota_counters_ids ( struct app_shared_counter_ids shared_counter_ids,
uint16_t  num_ports 
)
static

Definition at line 581 of file upf_accel.c.

◆ init_upf_accel()

static doca_error_t init_upf_accel ( struct upf_accel_ctx upf_accel_ctx,
struct upf_accel_fp_data **  fp_data_arr 
)
static

Definition at line 1165 of file upf_accel.c.

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 1546 of file upf_accel.c.

◆ pipe_pdr_insert()

static doca_error_t pipe_pdr_insert ( struct upf_accel_ctx upf_accel_ctx,
struct upf_accel_entry_cfg cfg,
struct doca_flow_pipe_entry **  entry 
)
static

Definition at line 271 of file upf_accel.c.

◆ pipe_shared_meter_common_insert()

static doca_error_t pipe_shared_meter_common_insert ( struct upf_accel_ctx upf_accel_ctx,
uint32_t  pdr_idx,
uint32_t  qer_idx,
enum upf_accel_port  port_id 
)
static

Definition at line 413 of file upf_accel.c.

◆ pipe_shared_meter_insert()

static doca_error_t pipe_shared_meter_insert ( struct upf_accel_ctx upf_accel_ctx,
uint32_t  pdr_idx,
uint32_t  qer_idx 
)
static

Definition at line 457 of file upf_accel.c.

◆ pkts_before_accel_callback()

static doca_error_t pkts_before_accel_callback ( void *  param,
void *  config 
)
static

Definition at line 1372 of file upf_accel.c.

◆ port_id_and_idx_to_quota_counter()

static uint32_t port_id_and_idx_to_quota_counter ( enum upf_accel_port  port_id,
uint32_t  idx 
)
inlinestatic

Definition at line 55 of file upf_accel.c.

◆ run_upf_accel()

static doca_error_t run_upf_accel ( struct upf_accel_ctx upf_accel_ctx,
struct upf_accel_fp_data fp_data_arr 
)
static

Definition at line 1265 of file upf_accel.c.

◆ smf_config_file_path_callback()

static doca_error_t smf_config_file_path_callback ( void *  param,
void *  config 
)
static

Definition at line 1320 of file upf_accel.c.

◆ upf_accel_calc_num_shared_counters()

static int upf_accel_calc_num_shared_counters ( uint16_t  num_ports)
inlinestatic

Definition at line 1119 of file upf_accel.c.

◆ upf_accel_calc_num_shared_meters()

static int upf_accel_calc_num_shared_meters ( uint16_t  num_ports)
inlinestatic

Definition at line 1106 of file upf_accel.c.

◆ upf_accel_clamp_rate()

static uint64_t upf_accel_clamp_rate ( uint64_t  val)
inlinestatic

Definition at line 100 of file upf_accel.c.

◆ upf_accel_debug_counters_print()

static void upf_accel_debug_counters_print ( struct upf_accel_ctx upf_accel_ctx,
struct upf_accel_fp_data fp_data_arr 
)
static

Definition at line 1045 of file upf_accel.c.

◆ upf_accel_dpdk_config_num_ports()

static doca_error_t upf_accel_dpdk_config_num_ports ( struct application_dpdk_config dpdk_config)
static

Definition at line 1526 of file upf_accel.c.

◆ upf_accel_drop_counter_print()

static void upf_accel_drop_counter_print ( struct upf_accel_ctx upf_accel_ctx,
enum upf_accel_pipe_drop_type  drop_type 
)
static

Definition at line 963 of file upf_accel.c.

◆ upf_accel_fp_accel_counters_print()

static void upf_accel_fp_accel_counters_print ( struct upf_accel_fp_data fp_data_arr,
const char *  name 
)
static

Definition at line 836 of file upf_accel.c.

◆ upf_accel_fp_data_cleanup()

static void upf_accel_fp_data_cleanup ( struct upf_accel_fp_data fp_data_arr)
static

Definition at line 666 of file upf_accel.c.

◆ upf_accel_fp_data_init()

static doca_error_t upf_accel_fp_data_init ( struct upf_accel_ctx ctx,
struct upf_accel_fp_data **  fp_data_arr_out 
)
static

Definition at line 690 of file upf_accel.c.

◆ upf_accel_fp_loop_wrapper()

static int upf_accel_fp_loop_wrapper ( void *  param)
static

Definition at line 1092 of file upf_accel.c.

◆ upf_accel_fp_sw_counters_print()

static void upf_accel_fp_sw_counters_print ( struct upf_accel_fp_data fp_data_arr)
static

Definition at line 786 of file upf_accel.c.

◆ upf_accel_get_far_by_id()

static const struct upf_accel_far* upf_accel_get_far_by_id ( const struct upf_accel_fars fars,
uint32_t  far_id 
)
inlinestatic

Definition at line 301 of file upf_accel.c.

◆ upf_accel_get_pdr_index_from_pdrs()

static uint32_t upf_accel_get_pdr_index_from_pdrs ( const struct upf_accel_pdrs pdrs,
const struct upf_accel_pdr pdr 
)
inlinestatic

Definition at line 112 of file upf_accel.c.

◆ upf_accel_get_qer_by_qer_id()

static struct upf_accel_qer* upf_accel_get_qer_by_qer_id ( struct upf_accel_qers qers,
uint32_t  qer_id 
)
inlinestatic

Definition at line 130 of file upf_accel.c.

◆ upf_accel_init_quota_counters()

static doca_error_t upf_accel_init_quota_counters ( struct upf_accel_ctx upf_accel_ctx)
static

Definition at line 620 of file upf_accel.c.

◆ upf_accel_pdrs_print()

static void upf_accel_pdrs_print ( struct upf_accel_ctx upf_accel_ctx)
static

Definition at line 909 of file upf_accel.c.

◆ upf_accel_pipe_encap_counter_insert()

static doca_error_t upf_accel_pipe_encap_counter_insert ( struct upf_accel_ctx upf_accel_ctx,
uint32_t  pdr_idx,
uint32_t  pdr_id,
uint32_t  far_id,
uint8_t  qfi,
enum upf_accel_pdr_pdi_si  pdi_si,
enum upf_accel_port  port_id,
struct doca_flow_pipe_entry **  entry 
)
static

Definition at line 323 of file upf_accel.c.

◆ upf_accel_register_params()

static doca_error_t upf_accel_register_params ( void  )
static

Definition at line 1426 of file upf_accel.c.

◆ upf_accel_shared_meters_dev_init()

static doca_error_t upf_accel_shared_meters_dev_init ( struct upf_accel_ctx upf_accel_ctx,
struct doca_flow_shared_resource_cfg cfg,
const struct upf_accel_pdr pdr,
enum upf_accel_port  port_id 
)
static

Definition at line 155 of file upf_accel.c.

◆ upf_accel_shared_meters_init()

static doca_error_t upf_accel_shared_meters_init ( struct upf_accel_ctx upf_accel_ctx)
static

Definition at line 241 of file upf_accel.c.

◆ upf_accel_shared_meters_level_init()

static doca_error_t upf_accel_shared_meters_level_init ( struct upf_accel_ctx upf_accel_ctx,
const struct upf_accel_pdr pdr 
)
static

Definition at line 212 of file upf_accel.c.

◆ upf_accel_shared_meters_table_offset_get()

static uint32_t upf_accel_shared_meters_table_offset_get ( enum upf_accel_port  port_id,
uint32_t  pdr_idx,
uint32_t  meter_idx 
)
inlinestatic

Definition at line 85 of file upf_accel.c.

◆ upf_accel_signals_mask()

static doca_error_t upf_accel_signals_mask ( sigset_t *  sigset)
static

Definition at line 1068 of file upf_accel.c.

◆ upf_accel_single_port_get_fwd_port()

static enum upf_accel_port upf_accel_single_port_get_fwd_port ( enum upf_accel_port  port_id)
static

Definition at line 1119 of file upf_accel.c.

◆ upf_accel_smf_rules_add()

static doca_error_t upf_accel_smf_rules_add ( struct upf_accel_ctx upf_accel_ctx)
static

Definition at line 480 of file upf_accel.c.

◆ upf_accel_static_hw_counters_print()

static void upf_accel_static_hw_counters_print ( struct upf_accel_ctx upf_accel_ctx)
static

Definition at line 1029 of file upf_accel.c.

◆ upf_accel_tx_counters_insert()

static doca_error_t upf_accel_tx_counters_insert ( struct upf_accel_ctx upf_accel_ctx,
uint32_t  pdr_idx,
uint32_t  pdr_id,
uint32_t  far_id,
uint8_t  qfi,
enum upf_accel_pdr_pdi_si  pdi_si,
struct doca_flow_pipe_entry **  entry 
)
static

Definition at line 377 of file upf_accel.c.

◆ vxlan_config_file_path_callback()

static doca_error_t vxlan_config_file_path_callback ( void *  param,
void *  config 
)
static

Definition at line 1337 of file upf_accel.c.

Variable Documentation

◆ force_quit

volatile bool force_quit

Definition at line 46 of file upf_accel.c.