/* Parse the argument given in the command line of the application */ static int eal_parse_args(int argc, char **argv) { int opt, ret; char **argvopt; int option_index; char *prgname = argv[0]; const int old_optind = optind; const int old_optopt = optopt; char * const old_optarg = optarg; argvopt = argv; optind = 1; while ((opt = getopt_long(argc, argvopt, eal_short_options, eal_long_options, &option_index)) != EOF) { /* getopt is not happy, stop right now */ if (opt == '?') { eal_usage(prgname); ret = -1; goto out; } ret = eal_parse_common_option(opt, optarg, &internal_config); /* common parser is not happy */ if (ret < 0) { eal_usage(prgname); ret = -1; goto out; } /* common parser handled this option */ if (ret == 0) continue; switch (opt) { case 'h': eal_usage(prgname); exit(EXIT_SUCCESS); /* long options */ case OPT_XEN_DOM0_NUM: #ifdef RTE_LIBRTE_XEN_DOM0 internal_config.xen_dom0_support = 1; #else RTE_LOG(ERR, EAL, "Can't support DPDK app " "running on Dom0, please configure" " RTE_LIBRTE_XEN_DOM0=y\n"); ret = -1; goto out; #endif break; case OPT_HUGE_DIR_NUM: internal_config.hugepage_dir = optarg; break; case OPT_FILE_PREFIX_NUM: internal_config.hugefile_prefix = optarg; break; case OPT_SOCKET_MEM_NUM: if (eal_parse_socket_mem(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameters for --" OPT_SOCKET_MEM "\n"); eal_usage(prgname); ret = -1; goto out; } break; case OPT_BASE_VIRTADDR_NUM: if (eal_parse_base_virtaddr(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameter for --" OPT_BASE_VIRTADDR "\n"); eal_usage(prgname); ret = -1; goto out; } break; case OPT_VFIO_INTR_NUM: if (eal_parse_vfio_intr(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameters for --" OPT_VFIO_INTR "\n"); eal_usage(prgname); ret = -1; goto out; } break; case OPT_CREATE_UIO_DEV_NUM: internal_config.create_uio_dev = 1; break; default: if (opt < OPT_LONG_MIN_NUM && isprint(opt)) { RTE_LOG(ERR, EAL, "Option %c is not supported " "on Linux\n", opt); } else if (opt >= OPT_LONG_MIN_NUM && opt < OPT_LONG_MAX_NUM) { RTE_LOG(ERR, EAL, "Option %s is not supported " "on Linux\n", eal_long_options[option_index].name); } else { RTE_LOG(ERR, EAL, "Option %d is not supported " "on Linux\n", opt); } eal_usage(prgname); ret = -1; goto out; } } if (eal_adjust_config(&internal_config) != 0) { ret = -1; goto out; } /* sanity checks */ if (eal_check_common_options(&internal_config) != 0) { eal_usage(prgname); ret = -1; goto out; } /* --xen-dom0 doesn't make sense with --socket-mem */ if (internal_config.xen_dom0_support && internal_config.force_sockets == 1) { RTE_LOG(ERR, EAL, "Options --"OPT_SOCKET_MEM" cannot be specified " "together with --"OPT_XEN_DOM0"\n"); eal_usage(prgname); ret = -1; goto out; } if (optind >= 0) argv[optind-1] = prgname; ret = optind-1; out: /* restore getopt lib */ optind = old_optind; optopt = old_optopt; optarg = old_optarg; return ret; }
/* Parse the argument given in the command line of the application */ static int eal_parse_args(int argc, char **argv) { int opt, ret; char **argvopt; int option_index; char *prgname = argv[0]; struct shared_driver *solib; argvopt = argv; while ((opt = getopt_long(argc, argvopt, eal_short_options, eal_long_options, &option_index)) != EOF) { int ret; /* getopt is not happy, stop right now */ if (opt == '?') { eal_usage(prgname); return -1; } ret = eal_parse_common_option(opt, optarg, &internal_config); /* common parser is not happy */ if (ret < 0) { eal_usage(prgname); return -1; } /* common parser handled this option */ if (ret == 0) continue; switch (opt) { case 'h': eal_usage(prgname); exit(EXIT_SUCCESS); /* force loading of external driver */ case 'd': solib = malloc(sizeof(*solib)); if (solib == NULL) { RTE_LOG(ERR, EAL, "malloc(solib) failed\n"); return -1; } memset(solib, 0, sizeof(*solib)); strncpy(solib->name, optarg, PATH_MAX-1); solib->name[PATH_MAX-1] = 0; TAILQ_INSERT_TAIL(&solib_list, solib, next); break; /* long options */ case OPT_XEN_DOM0_NUM: #ifdef RTE_LIBRTE_XEN_DOM0 internal_config.xen_dom0_support = 1; #else RTE_LOG(ERR, EAL, "Can't support DPDK app " "running on Dom0, please configure" " RTE_LIBRTE_XEN_DOM0=y\n"); return -1; #endif break; case OPT_HUGE_DIR_NUM: internal_config.hugepage_dir = optarg; break; case OPT_FILE_PREFIX_NUM: internal_config.hugefile_prefix = optarg; break; case OPT_SOCKET_MEM_NUM: if (eal_parse_socket_mem(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameters for --" OPT_SOCKET_MEM "\n"); eal_usage(prgname); return -1; } break; case OPT_BASE_VIRTADDR_NUM: if (eal_parse_base_virtaddr(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameter for --" OPT_BASE_VIRTADDR "\n"); eal_usage(prgname); return -1; } break; case OPT_VFIO_INTR_NUM: if (eal_parse_vfio_intr(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameters for --" OPT_VFIO_INTR "\n"); eal_usage(prgname); return -1; } break; case OPT_CREATE_UIO_DEV_NUM: internal_config.create_uio_dev = 1; break; default: if (opt < OPT_LONG_MIN_NUM && isprint(opt)) { RTE_LOG(ERR, EAL, "Option %c is not supported " "on Linux\n", opt); } else if (opt >= OPT_LONG_MIN_NUM && opt < OPT_LONG_MAX_NUM) { RTE_LOG(ERR, EAL, "Option %s is not supported " "on Linux\n", eal_long_options[option_index].name); } else { RTE_LOG(ERR, EAL, "Option %d is not supported " "on Linux\n", opt); } eal_usage(prgname); return -1; } } if (eal_adjust_config(&internal_config) != 0) return -1; /* sanity checks */ if (eal_check_common_options(&internal_config) != 0) { eal_usage(prgname); return -1; } /* --xen-dom0 doesn't make sense with --socket-mem */ if (internal_config.xen_dom0_support && internal_config.force_sockets == 1) { RTE_LOG(ERR, EAL, "Options --"OPT_SOCKET_MEM" cannot be specified " "together with --"OPT_XEN_DOM0"\n"); eal_usage(prgname); return -1; } if (optind >= 0) argv[optind-1] = prgname; ret = optind-1; optind = 0; /* reset getopt lib */ return ret; }
/* Parse the argument given in the command line of the application */ static int eal_parse_args(int argc, char **argv) { int opt, ret; char **argvopt; int option_index; char *prgname = argv[0]; argvopt = argv; while ((opt = getopt_long(argc, argvopt, eal_short_options, eal_long_options, &option_index)) != EOF) { int ret; /* getopt is not happy, stop right now */ if (opt == '?') { eal_usage(prgname); return -1; } ret = eal_parse_common_option(opt, optarg, &internal_config); /* common parser is not happy */ if (ret < 0) { eal_usage(prgname); return -1; } /* common parser handled this option */ if (ret == 0) continue; switch (opt) { case 'h': eal_usage(prgname); exit(EXIT_SUCCESS); default: if (opt < OPT_LONG_MIN_NUM && isprint(opt)) { RTE_LOG(ERR, EAL, "Option %c is not supported " "on FreeBSD\n", opt); } else if (opt >= OPT_LONG_MIN_NUM && opt < OPT_LONG_MAX_NUM) { RTE_LOG(ERR, EAL, "Option %s is not supported " "on FreeBSD\n", eal_long_options[option_index].name); } else { RTE_LOG(ERR, EAL, "Option %d is not supported " "on FreeBSD\n", opt); } eal_usage(prgname); return -1; } } if (eal_adjust_config(&internal_config) != 0) return -1; /* sanity checks */ if (eal_check_common_options(&internal_config) != 0) { eal_usage(prgname); return -1; } if (optind >= 0) argv[optind-1] = prgname; ret = optind-1; optind = 0; /* reset getopt lib */ return ret; }