int MAIN(int argc, char **argv) { uint32_t lcore; int ret; /* Init EAL */ ret = rte_eal_init(argc, argv); if (ret < 0) return -1; argc -= ret; argv += ret; /* Parse application arguments (after the EAL ones) */ ret = app_parse_args(argc, argv); if (ret < 0) { app_print_usage(); return -1; } /* Init */ app_init(); app_print_params(); /* Launch per-lcore init on every lcore */ rte_eal_mp_remote_launch(app_lcore_main_loop, NULL, CALL_MASTER); RTE_LCORE_FOREACH_SLAVE(lcore) { if (rte_eal_wait_lcore(lcore) < 0) { return -1; } } return 0; }
APP_RET_E app_parse_cmd_line( APP_CTXT_X *px_app_ctxt, int i_argc, char **ppuc_argv) { APP_RET_E e_main_ret = eAPP_RET_FAILURE; PAL_RET_E e_pal_ret = ePAL_RET_FAILURE; int32_t i_temp = 0; if ((NULL == px_app_ctxt) || (NULL == ppuc_argv) || (0 == i_argc)) { e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } if (i_argc < 7) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } if ((NULL == ppuc_argv [1]) || (NULL == ppuc_argv [2]) || (NULL == ppuc_argv [3]) || (NULL == ppuc_argv [4]) || (NULL == ppuc_argv [5]) || (NULL == ppuc_argv [6])) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } e_pal_ret = pal_atoi((uint8_t *) ppuc_argv[1], (int32_t *) &(px_app_ctxt->x_app_args.ui_no_nodes)); if (ePAL_RET_SUCCESS != e_pal_ret) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } e_pal_ret = pal_atoi((uint8_t *) ppuc_argv[2], (int32_t *) &(px_app_ctxt->x_app_args.ui_node_index)); if (ePAL_RET_SUCCESS != e_pal_ret) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } e_pal_ret = pal_atoi ((uint8_t *) ppuc_argv [3], &(i_temp)); if ((ePAL_RET_SUCCESS != e_pal_ret) || (i_temp > USHRT_MAX)) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } px_app_ctxt->x_app_args.us_listen_port_start_ho = (uint16_t) i_temp; (void) pal_strncpy (px_app_ctxt->x_app_args.uca_leader_hostname, (const uint8_t *) ppuc_argv [4], sizeof(px_app_ctxt->x_app_args.uca_leader_hostname)); e_pal_ret = pal_atoi ((uint8_t *) ppuc_argv [5], (int32_t *) &(px_app_ctxt->x_app_args.ui_unit_time_ms)); if (ePAL_RET_SUCCESS != e_pal_ret) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } e_pal_ret = pal_atoi ((uint8_t *) ppuc_argv [6], (int32_t *) &(px_app_ctxt->x_app_args.ui_enable_console_logging)); if (ePAL_RET_SUCCESS != e_pal_ret) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } if ((8 == i_argc) && (NULL != ppuc_argv[7])) { e_pal_ret = pal_atoi ((uint8_t *) ppuc_argv [7], &(i_temp)); if ((ePAL_RET_SUCCESS != e_pal_ret) || (i_temp > USHRT_MAX)) { app_print_usage (i_argc, ppuc_argv); e_main_ret = eAPP_RET_FAILURE; goto CLEAN_RETURN; } px_app_ctxt->x_app_args.us_app_internal_port_ho = (uint16_t) i_temp; } printf ("User Entered:\n" "\tTotal Nodes : %d\n" "\tThis Node Index : %d\n" "\tListen Port Range Start : %d\n" "\tLeader Host Name : %s\n" "\tUnit Time : %d\n" "\tEnable Console Logging : %d\n" "\tPort For Internal Use : %d\n", px_app_ctxt->x_app_args.ui_no_nodes, px_app_ctxt->x_app_args.ui_node_index, px_app_ctxt->x_app_args.us_listen_port_start_ho, px_app_ctxt->x_app_args.uca_leader_hostname, px_app_ctxt->x_app_args.ui_unit_time_ms, px_app_ctxt->x_app_args.ui_enable_console_logging, px_app_ctxt->x_app_args.us_app_internal_port_ho); printf ("\n\nEnter 1 to Quit Application\n\n"); e_main_ret = eAPP_RET_SUCCESS; CLEAN_RETURN: return e_main_ret; }