31 #include <rte_malloc.h>
37 #include <flow_common.h>
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)
49 #define UPF_ACCEL_PDR_STR_LEN 64
50 #define UPF_ACCEL_PDR_URRIDS_LEN 16
51 #define UPF_ACCEL_PDR_QERIDS_LEN 16
53 #define UPF_ACCEL_LOG_MAX_NUM_PDR 5
54 #define UPF_ACCEL_MAX_NUM_PDR (1ul << UPF_ACCEL_LOG_MAX_NUM_PDR)
56 #define UPF_ACCEL_NUM_QUOTA_COUNTERS_PER_PORT UPF_ACCEL_MAX_NUM_PDR
58 #define UPF_ACCEL_SRC_MAC \
60 0xde, 0xad, 0xbe, 0xef, 0x00, 0x01 \
62 #define UPF_ACCEL_DST_MAC \
64 0xde, 0xad, 0xbe, 0xef, 0x00, 0x02 \
67 #define UPF_ACCEL_SRC_IP 0xc0a80101
68 #define UPF_ACCEL_DST_IP 0xc0a80201
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)
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)
78 #define UPF_ACCEL_HW_AGING_POLL_INTERVAL_SEC (1)
79 #define UPF_ACCEL_HW_AGING_TIME_DEFAULT_SEC (15)
81 #define UPF_ACCEL_SW_AGING_TIME_DEFAULT_SEC (15)
89 #define UPF_ACCEL_DEFAULT_DPI_THRESHOLD 2
91 #define UPF_ACCEL_FIXED_PORT_NONE (-1)
93 #define UNUSED(x) ((void)(x))
423 return opposite_port;
static enum doca_flow_pipe_domain domain
enum doca_error doca_error_t
DOCA API return codes.
#define DOCA_FLOW_ETHER_ADDR_LEN
doca_flow_entry_status
doca flow entry status
doca_flow_pipe_domain
doca flow pipe domain
const struct ip_frag_config * cfg
#define SHARED_RESOURCE_NUM_VALUES
uint32_t * ids[UPF_ACCEL_PORTS_MAX]
doca flow actions information
doca flow matcher information
doca monitor action configuration
user context struct that will be used in entries process callback
struct doca_flow_action_descs ** action_desc_list
struct doca_flow_actions ** action_list
struct upf_accel_pdrs * pdrs
uint32_t sw_aging_time_sec
const char * vxlan_config_file_path
const char * smf_config_file_path
struct upf_accel_qers * qers
uint32_t hw_aging_time_sec
struct upf_accel_vxlans * vxlans
struct upf_accel_urrs * urrs
struct upf_accel_fars * fars
upf_accel_get_forwarding_port get_fwd_port
struct doca_flow_pipe * pipes[UPF_ACCEL_PORTS_MAX][UPF_ACCEL_PIPE_NUM]
struct flow_resources resource
uint32_t num_static_entries[UPF_ACCEL_PORTS_MAX]
struct doca_flow_port * ports[UPF_ACCEL_PORTS_MAX]
struct doca_flow_pipe_entry * drop_entries[UPF_ACCEL_DROP_NUM][UPF_ACCEL_NUM_DOMAINS]
struct doca_dev * dev_arr[UPF_ACCEL_PORTS_MAX]
uint32_t num_shared_resources[SHARED_RESOURCE_NUM_VALUES]
struct upf_accel_entry_ctx static_entry_ctx[UPF_ACCEL_PORTS_MAX]
struct doca_flow_pipe_entry * smf_entries[UPF_ACCEL_MAX_NUM_PDR][UPF_ACCEL_PORTS_MAX]
const struct upf_accel_config * upf_accel_cfg
uint64_t cnt_pkts[PARSER_PKT_TYPE_NUM]
struct upf_accel_match_8t match
uint32_t pdr_id[PARSER_PKT_TYPE_NUM]
struct doca_flow_pipe_entry * entry
struct upf_accel_fp_data * fp_data
uint64_t cnt_bytes[PARSER_PKT_TYPE_NUM]
union upf_accel_dyn_entry_ctx::@47 entries[PARSER_PKT_TYPE_NUM]
enum doca_flow_entry_status status
struct upf_accel_sw_aging_ll_node sw_aging_node
enum upf_accel_flow_status flow_status[PARSER_PKT_TYPE_NUM]
struct doca_flow_monitor * mon
struct doca_flow_match * match
struct doca_flow_actions * action
struct doca_flow_fwd * fwd
struct doca_flow_pipe * pipe
enum doca_flow_pipe_domain domain
enum upf_accel_port port_id
struct upf_accel_dyn_entry_ctx dyn_ctx
enum upf_accel_rule_type type
struct upf_accel_static_entry_ctx static_ctx
struct upf_accel_ip_addr fp_oh_ip
struct upf_accel_far arr_fars[]
struct upf_accel_match_5t inner
struct upf_accel_match_tun outer
uint32_t qerids[UPF_ACCEL_PDR_QERIDS_LEN]
struct upf_accel_ip_addr pdi_sdf_to_ip
struct upf_accel_ip_addr pdi_local_teid_ip
struct upf_accel_ip_addr pdi_sdf_from_ip
uint32_t pdi_local_teid_start
uint32_t pdi_local_teid_end
struct upf_accel_ip_addr pdi_ueip
uint32_t urrids[UPF_ACCEL_PDR_URRIDS_LEN]
struct upf_accel_ip_port_range pdi_sdf_from_port_range
enum upf_accel_pdr_pdi_si pdi_si
struct upf_accel_ip_port_range pdi_sdf_to_port_range
struct upf_accel_pdr arr_pdrs[]
struct doca_flow_fwd * fwd
enum doca_flow_pipe_domain domain
struct doca_flow_match * match
struct doca_flow_port * port
struct doca_flow_match * match_mask
struct doca_flow_monitor * mon
struct upf_accel_action_cfg actions
struct doca_flow_fwd * fwd_miss
enum upf_accel_port port_id
struct upf_accel_qer arr_qers[]
struct entries_status ctrl_status
uint64_t volume_quota_total_volume
struct upf_accel_urr arr_urrs[]
uint8_t mac[DOCA_FLOW_ETHER_ADDR_LEN]
struct upf_accel_vxlan arr_vxlans[]
void upf_accel_sw_aging_ll_init(struct upf_accel_fp_data *fp_data, enum parser_pkt_type pkt_type)
@ UPF_ACCEL_FLOW_STATUS_UNACCELERATED
@ UPF_ACCEL_FLOW_STATUS_FAILED_ACCELERATION
@ UPF_ACCEL_FLOW_STATUS_ACCELERATED
@ UPF_ACCEL_FLOW_STATUS_PENDING
@ UPF_ACCEL_FLOW_STATUS_NONE
#define UPF_ACCEL_PDR_URRIDS_LEN
enum upf_accel_port(* upf_accel_get_forwarding_port)(enum upf_accel_port port_id)
void upf_accel_vxlan_cleanup(struct upf_accel_config *cfg)
#define UPF_ACCEL_PDR_QERIDS_LEN
struct upf_accel_ctx __rte_aligned
doca_error_t upf_accel_vxlan_parse(struct upf_accel_config *cfg)
static uint8_t upf_accel_drop_idx_get(struct upf_accel_pipe_cfg *pipe_cfg, enum upf_accel_pipe_drop_type drop_type)
#define UPF_ACCEL_MAX_PDR_NUM_RATE_METERS
#define UPF_ACCEL_MAX_NUM_PDR
static uint8_t upf_accel_domain_idx_get(enum upf_accel_port port_id, uint8_t domain)
void upf_accel_smf_cleanup(struct upf_accel_config *cfg)
@ UPF_ACCEL_PIPE_TX_COLOR_MATCH_START
@ UPF_ACCEL_PIPE_DL_TO_SW
@ UPF_ACCEL_PIPE_RX_DROPS_START
@ UPF_ACCEL_PIPE_TX_VXLAN_ENCAP
@ UPF_ACCEL_PIPE_TX_COLOR_MATCH_END
@ UPF_ACCEL_PIPE_TX_SHARED_METERS_END
@ UPF_ACCEL_PIPE_TX_DROPS_END
@ UPF_ACCEL_PIPE_RX_DROPS_END
@ UPF_ACCEL_PIPE_TX_COUNTER
@ UPF_ACCEL_PIPE_RX_VXLAN_DECAP
@ UPF_ACCEL_PIPE_UL_TO_SW
@ UPF_ACCEL_PIPE_TX_SHARED_METERS_START
@ UPF_ACCEL_PIPE_TX_DROPS_START
@ UPF_ACCEL_PIPE_TX_COLOR_MATCH_NO_MORE_METERS
static enum upf_accel_port upf_accel_get_opposite_port(enum upf_accel_port port_id)
doca_error_t upf_accel_smf_parse(struct upf_accel_config *cfg)
@ UPF_ACCEL_PDR_PDI_SI_DL
@ UPF_ACCEL_PDR_PDI_SI_UL
@ UPF_ACCEL_FAR_ACTION_DROP
@ UPF_ACCEL_FAR_ACTION_FWD
upf_accel_encap_action_type
@ UPF_ACCEL_ENCAP_ACTION_NONE
@ UPF_ACCEL_ENCAP_ACTION_NUM
@ UPF_ACCEL_ENCAP_ACTION_5G
@ UPF_ACCEL_ENCAP_ACTION_4G
#define UPF_ACCEL_NUM_DOMAINS