32 #include <rte_ethdev.h>
39 #define IP_FRAG_TBL_TIMEOUT_MS 2
40 #define IP_FRAG_TBL_SIZE 2048
51 if (signum == SIGINT || signum == SIGTERM) {
52 DOCA_LOG_INFO(
"Signal %d received, preparing to exit", signum);
67 const char *mode_str = param;
69 if (!strcmp(mode_str,
"bidir")) {
71 }
else if (!strcmp(mode_str,
"multiport")) {
90 const uint32_t
mtu = *(
const uint32_t *)param;
93 if (mtu < RTE_ETHER_MIN_MTU || mtu > RTE_ETHER_MAX_JUMBO_FRAME_LEN) {
111 const uint32_t timeout = *(
const uint32_t *)param;
128 const uint32_t size = *(
const uint32_t *)param;
162 const bool hw_cksum_disable = *(
const bool *)param;
177 struct doca_argp_param *app_mode_param;
178 struct doca_argp_param *mtu_param;
179 struct doca_argp_param *frag_tbl_timeout_param;
180 struct doca_argp_param *frag_tbl_size_param;
181 struct doca_argp_param *mbuf_chain_param;
194 "Ip_frag application mode."
195 " Bidirectional mode forwards packets between a single reassembly port and a single fragmentation port (two ports in total)."
196 " Multiport mode forwards packets between two pairs of reassembly and fragmentation ports (four ports in total)."
197 " For more information consult DOCA IP Fragmentation Application Guide."
198 " Format: bidir, multiport");
234 frag_tbl_timeout_param,
235 "Aging timeout of fragments pending packet reassembly in the fragmentation table (in ms)");
254 "Frag table size, i.e. maximum amount of concurrent defragmentation contexts per worker thread");
272 "Enable mbuf chaining (required for IPv6 fragmentation support)");
303 uint16_t
nb_ports = rte_eth_dev_count_avail();
340 uint32_t num_ports = rte_eth_dev_count_avail();
344 if (num_ports != 2) {
350 if (num_ports != 4) {
370 int main(
int argc,
char **argv)
374 .
mtu = RTE_ETHER_MAX_LEN,
380 struct doca_log_backend *sdk_log;
381 int exit_status = EXIT_FAILURE;
450 goto dpdk_ports_queues_cleanup;
453 exit_status = EXIT_SUCCESS;
454 dpdk_ports_queues_cleanup:
461 if (exit_status == EXIT_SUCCESS)
doca_error_t dpdk_init(int argc, char **argv)
doca_error_t dpdk_queues_and_ports_init(struct application_dpdk_config *app_dpdk_config)
void dpdk_queues_and_ports_fini(struct application_dpdk_config *app_dpdk_config)
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 doca_error_t doca_argp_start(int argc, char **argv)
Parse incoming arguments (cmd line/json).
DOCA_EXPERIMENTAL doca_error_t doca_argp_init(const char *program_name, void *program_config)
Initialize the parser interface.
DOCA_EXPERIMENTAL void doca_argp_set_dpdk_program(doca_argp_dpdk_cb_t callback)
Mark the program as based on DPDK API.
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 void doca_argp_param_set_mandatory(struct doca_argp_param *param)
Mark the program param as mandatory.
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_destroy(void)
ARG Parser destroy.
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
@ DOCA_ERROR_NOT_SUPPORTED
DOCA_EXPERIMENTAL doca_error_t doca_log_backend_create_standard(void)
Create default, non configurable backend for application messages.
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_INFO(format,...)
Generates an INFO application log message.
DOCA_EXPERIMENTAL doca_error_t doca_log_backend_create_with_file_sdk(FILE *fptr, struct doca_log_backend **backend)
Create a logging backend with a FILE* stream for SDK messages.
DOCA_EXPERIMENTAL doca_error_t doca_log_backend_set_sdk_level(struct doca_log_backend *backend, uint32_t level)
Set the log level limit for SDK logging backends.
static doca_error_t ip_frag_mode_callback(void *param, void *config)
static doca_error_t validate_mode(enum ip_frag_mode mode)
int main(int argc, char **argv)
static doca_error_t ip_frag_dpdk_config_num_ports(struct application_dpdk_config *dpdk_config)
static doca_error_t ip_frag_mtu_callback(void *param, void *config)
static doca_error_t ip_frag_tbl_size_callback(void *param, void *config)
DOCA_LOG_REGISTER(IP_FRAG)
static doca_error_t ip_frag_register_params(void)
#define IP_FRAG_TBL_TIMEOUT_MS
static doca_error_t ip_frag_dpdk_config_tx_offloads(struct ip_frag_config *cfg, struct application_dpdk_config *dpdk_config)
static doca_error_t ip_frag_mbuf_chain_callback(void *param, void *config)
static doca_error_t ip_frag_tbl_timeout_callback(void *param, void *config)
static doca_error_t ip_frag_mbuf_hw_cksum_callback(void *param, void *config)
static void signal_handler(int signum)
doca_error_t ip_frag(struct ip_frag_config *cfg, struct application_dpdk_config *dpdk_cfg)
const struct ip_frag_config * cfg
struct application_port_config port_config
uint32_t frag_tbl_timeout