Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}