27 #include <rte_byteorder.h>
28 #include <rte_ethdev.h>
38 #define FLOW_SWITCH_DEV_ARGS "dv_flow_en=2,fdb_def_rule_en=0,vport_match=1,repr_matching_en=0,dv_xmeta_en=4"
39 #define FLOW_SWITCH_REP_ARG ",representor="
47 memcpy(argv, dpdk_argv,
sizeof(argv[0]) * argc);
49 argv[argc++] =
"pci:00:00.0";
64 char *n = (
char *)param;
66 if (FLOW_SWITCH_PORTS_MAX <= ctx->
nb_ports) {
71 ctx->dev_arg[
ctx->nb_ports++] = n;
86 char *n = (
char *)param;
88 if (FLOW_SWITCH_PORTS_MAX <= ctx->
nb_reps) {
89 DOCA_LOG_ERR(
"Encountered too many PCI devices representors, maximal amount is: %d",
94 ctx->rep_arg[
ctx->nb_reps++] = n;
110 ctx->is_expert = *(
bool *)param;
118 struct doca_argp_param *pci_param;
119 struct doca_argp_param *rep_param;
120 struct doca_argp_param *exp_param;
182 for (i = 0; i <
ctx->nb_ports; i++) {
190 if (
ctx->rep_arg[i]) {
191 port_args[i] = calloc(1,
193 strlen(
ctx->rep_arg[i]) + 1);
195 DOCA_LOG_ERR(
"Failed to allocate dpdk args port: %d", i);
201 strcat(port_args[i],
ctx->rep_arg[i]);
202 dpdk_arg = port_args[i];
214 for (i = 0; i <
ctx->nb_ports; i++)
225 for (i = 0; i <
ctx->nb_ports; i++) {
226 if (
ctx->doca_dev[i]) {
238 for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++) {
239 if (!rte_eth_dev_is_valid_port(port_id))
static doca_error_t open_doca_device_with_pci(const char *pcie_value, struct doca_dev **retval)
doca_error_t dpdk_init(int argc, char **argv)
#define FLOW_SWITCH_REP_ARG
doca_error_t init_doca_flow_switch_common(struct flow_switch_ctx *ctx)
static doca_error_t param_flow_switch_rep_callback(void *param, void *config)
uint8_t get_dpdk_nb_ports(void)
DOCA_LOG_REGISTER(flow_switch_common)
void destroy_doca_flow_switch_common(struct flow_switch_ctx *ctx)
doca_error_t register_doca_flow_switch_param(void)
static doca_error_t param_flow_switch_pci_callback(void *param, void *config)
static doca_error_t param_flow_switch_exp_callback(void *param, void *config)
#define FLOW_SWITCH_DEV_ARGS
doca_error_t init_flow_switch_dpdk(int argc, char **dpdk_argv)
#define FLOW_SWITCH_PORTS_MAX
DOCA_EXPERIMENTAL void doca_argp_param_set_description(struct doca_argp_param *param, const char *description)
Set the description of the program param, used during program usage.
DOCA_EXPERIMENTAL void doca_argp_param_set_long_name(struct doca_argp_param *param, const char *name)
Set the long name of the program param.
DOCA_EXPERIMENTAL void doca_argp_param_set_callback(struct doca_argp_param *param, doca_argp_param_cb_t callback)
Set the callback function of the program param.
DOCA_EXPERIMENTAL doca_error_t doca_argp_param_create(struct doca_argp_param **param)
Create new program param.
DOCA_EXPERIMENTAL void doca_argp_param_set_type(struct doca_argp_param *param, enum doca_argp_type type)
Set the type of the param arguments.
DOCA_EXPERIMENTAL void doca_argp_param_set_short_name(struct doca_argp_param *param, const char *name)
Set the short name of the program param.
DOCA_EXPERIMENTAL doca_error_t doca_argp_register_param(struct doca_argp_param *input_param)
Register a program flag.
DOCA_EXPERIMENTAL void doca_argp_param_set_multiplicity(struct doca_argp_param *param)
Mark the program param as supporting multiple appearances.
DOCA_STABLE doca_error_t doca_dev_close(struct doca_dev *dev)
Destroy allocated local device instance.
DOCA_EXPERIMENTAL doca_error_t doca_dpdk_port_probe(struct doca_dev *dev, const char *devargs)
Attach a DPDK port specified by DOCA device.
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
@ DOCA_ERROR_INVALID_VALUE
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_INFO(format,...)
Generates an INFO application log message.
struct upf_accel_ctx * ctx