32 #include <sys/types.h>
33 #include <sys/queue.h>
34 #include <netinet/in.h>
42 #include <rte_common.h>
43 #include <rte_malloc.h>
44 #include <rte_ether.h>
45 #include <rte_ethdev.h>
46 #include <rte_mempool.h>
64 #define VNF_PKT_L2(M) rte_pktmbuf_mtod(M, uint8_t *)
65 #define VNF_PKT_LEN(M) rte_pktmbuf_pkt_len(M)
66 #define VNF_RX_BURST_SIZE (32)
91 rte_pktmbuf_adj(m, diff);
124 uint64_t cur_tsc, last_tsc;
127 uint32_t port_id = 0, core_id = rte_lcore_id();
137 last_tsc = rte_rdtsc();
139 if (core_id == rte_get_main_lcore()) {
140 cur_tsc = rte_rdtsc();
141 if (cur_tsc > last_tsc +
app_config->stats_timer) {
151 for (j = 0; j < nb_rx; j++) {
155 rte_pktmbuf_free(mbufs[j]);
157 rte_eth_tx_burst(port_id ^ 1,
queue_id, &mbufs[j], 1);
197 int nr_queues = *(
int *)param;
203 app_config->dpdk_cfg->port_config.nb_queues = nr_queues;
204 app_config->dpdk_cfg->port_config.rss_support = 1;
236 app_config->hw_offload = *(
bool *)param ? 1 : 0;
281 struct doca_argp_param *stats_param, *nr_queues_param, *rx_only_param, *hw_offload_param;
282 struct doca_argp_param *hairpinq_param, *age_thread_param;
399 int i, queue_idx = 0;
402 for (i = 0; i < RTE_MAX_LCORE; i++) {
403 if (!rte_lcore_is_enabled(i))
411 if (queue_idx >= nb_queues)
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_arguments(struct doca_argp_param *param, const char *arguments)
Set the description of the expected arguments of the program param, used during program usage.
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 doca_error_t doca_argp_register_version_callback(doca_argp_param_cb_t callback)
Register an alternative version callback.
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.
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_TRC(format,...)
Generates a TRACE application log message.
#define DOCA_LOG_DBG(format,...)
Generates a DEBUG application log message.
int simple_fwd_parse_packet(uint8_t *data, int len, struct simple_fwd_pkt_info *pinfo)
void simple_fwd_destroy(struct app_vnf *vnf)
static doca_error_t age_thread_callback(void *param, void *config)
static void vnf_adjust_mbuf(struct rte_mbuf *m, struct simple_fwd_pkt_info *pinfo)
int simple_fwd_process_pkts(void *process_pkts_params)
DOCA_LOG_REGISTER(SIMPLE_FWD_VNF :Core)
static doca_error_t nr_queues_callback(void *param, void *config)
static doca_error_t stats_callback(void *param, void *config)
static struct vnf_per_core_params core_params_arr[RTE_MAX_LCORE]
static doca_error_t rx_only_callback(void *param, void *config)
#define VNF_RX_BURST_SIZE
static doca_error_t hw_offload_callback(void *param, void *config)
void simple_fwd_process_pkts_stop(void)
void simple_fwd_map_queue(uint16_t nb_queues)
static void simple_fwd_process_offload(struct rte_mbuf *mbuf, uint16_t queue_id, struct app_vnf *vnf)
doca_error_t register_simple_fwd_params(void)
static volatile bool force_quit
static doca_error_t hairpinq_callback(void *param, void *config)
int(* vnf_dump_stats)(uint32_t port_id)
void(* vnf_flow_age)(uint32_t port_id, uint16_t queue)
int(* vnf_process_pkt)(struct simple_fwd_pkt_info *pinfo)
struct simple_fwd_pkt_format outer
noreturn doca_error_t sdk_version_callback(void *param, void *doca_config)