int conf_parse(struct mip6_config *c, int argc, char **argv) { char cfile[MAXPATHLEN]; int ret; /* set config defaults */ conf_default(c); if ((ret = conf_alt_file(cfile, argc, argv)) != 0) { if (ret == -EINVAL) { fprintf(stderr, "%s: option requires an argument -- c\n", argv[0]); conf_usage(basename(argv[0])); return -1; } else if (ret == -ENAMETOOLONG) { fprintf(stderr, "%s: argument too long -- c <file>\n", argv[0]); return -1; } strcpy(cfile, DEFAULT_CONFIG_FILE); } if (conf_file(c, cfile) < 0 && ret == 0) return -1; if (conf_cmdline(c, argc, argv) < 0) return -1; return 0; }
static int conf_cmdline(struct mip6_config *cfg, int argc, char **argv) { static struct option long_opts[] = { {"version", 0, 0, 'V'}, {"help", 0, 0, 'h'}, {"correspondent-node", 0, 0, 'C'}, {"home-agent", 0, 0, 'H'}, {"mobile-node", 0, 0, 'M'}, {"show-config", 0, 0, 0}, #ifdef ENABLE_VT {"vt-service", 1, 0, 0 }, #endif {0, 0, 0, 0} }; /* parse all other cmd line parameters than -c */ while (1) { int idx, c; c = getopt_long(argc, argv, "c:d:l:Vh?CMH", long_opts, &idx); if (c == -1) break; switch (c) { case 0: #ifdef ENABLE_VT if (strcmp(long_opts[idx].name, "vt-service") == 0) { cfg->vt_service = optarg; break; } #endif if (idx == 5) conf_show(cfg); return -1; case 'V': conf_version(); return -1; case '?': case 'h': conf_usage(basename(argv[0])); return -1; case 'd': cfg->debug_level = atoi(optarg); break; case 'l': cfg->debug_log_file = optarg; break; case 'C': cfg->mip6_entity = MIP6_ENTITY_CN; break; case 'H': cfg->mip6_entity = MIP6_ENTITY_HA; break; case 'M': cfg->mip6_entity = MIP6_ENTITY_MN; break; default: break; }; } return 0; }
int main(int ac, char **av) { const char *progname = av[0]; int opt; const char *name, *defconfig_file = NULL /* gcc uninit */; struct stat tmpstat; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) { input_mode = (enum input_mode)opt; switch (opt) { case silentoldconfig: sync_kconfig = 1; break; case defconfig: case savedefconfig: defconfig_file = optarg; break; case randconfig: { struct timeval now; unsigned int seed; /* * Use microseconds derived seed, * compensate for systems where it may be zero */ gettimeofday(&now, NULL); seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); srand(seed); break; } case oldaskconfig: case oldconfig: case allnoconfig: case allyesconfig: case allmodconfig: case alldefconfig: case listnewconfig: case oldnoconfig: break; case '?': conf_usage(progname); exit(1); break; } } if (ac == optind) { printf(_("%s: Kconfig file missing\n"), av[0]); conf_usage(progname); exit(1); } name = av[optind]; conf_parse(name); //zconfdump(stdout); if (sync_kconfig) { name = conf_get_configname(); if (stat(name, &tmpstat)) { fprintf(stderr, _("***\n" "*** Configuration file \"%s\" not found!\n" "***\n" "*** Please run some configurator (e.g. \"make oldconfig\" or\n" "*** \"make menuconfig\" or \"make xconfig\").\n" "***\n"), name); exit(1); } } switch (input_mode) { case defconfig: if (!defconfig_file) defconfig_file = conf_get_default_confname(); if (conf_read(defconfig_file)) { printf(_("***\n" "*** Can't find default configuration \"%s\"!\n" "***\n"), defconfig_file); exit(1); } name = getenv("KCONFIG_SELINUX"); printf("KCONFIG_SELINUX(%s)\n", name); if (name) { if (conf_read_simple(name, S_DEF_USER, false)) { printf(_("***\n" "*** Can't find selinux configuration \"%s\"!\n" "***\n"), name); exit(1); } } name = getenv("KCONFIG_LOG_SELINUX"); printf("KCONFIG_LOG_SELINUX(%s)\n", name); if (name) { if (conf_read_simple(name, S_DEF_USER, false)) { printf(_("***\n" "*** Can't find selinux log configuration \"%s\"!\n" "***\n"), name); exit(1); } } name = getenv("KCONFIG_TIMA"); printf("KCONFIG_TIMA(%s)\n", name); if (name) { if (conf_read_simple(name, S_DEF_USER, false)) { printf(_("***\n" "*** Can't find tima log configuration \"%s\"!\n" "***\n"), name); exit(1); } } name = getenv("KCONFIG_VARIANT"); printf("KCONFIG_VARIANT(%s)\n", name); if (name) { if (conf_read_simple(name, S_DEF_USER, false)) { printf(_("***\n" "*** Can't find variant configuration \"%s\"!\n" "***\n"), name); exit(1); } } name = getenv("KCONFIG_DEBUG"); printf("KCONFIG_DEBUG(%s)\n", name); if (name) { if (conf_read_simple(name, S_DEF_USER, false)) { printf(_("***\n" "*** Can't find debug configuration \"%s\"!\n" "***\n"), name); exit(1); } } break; case savedefconfig: case silentoldconfig: case oldaskconfig: case oldconfig: case listnewconfig: case oldnoconfig: conf_read(NULL); break; case allnoconfig: case allyesconfig: case allmodconfig: case alldefconfig: case randconfig: name = getenv("KCONFIG_ALLCONFIG"); if (name && !stat(name, &tmpstat)) { conf_read_simple(name, S_DEF_USER, true); break; } switch (input_mode) { case allnoconfig: name = "allno.config"; break; case allyesconfig: name = "allyes.config"; break; case allmodconfig: name = "allmod.config"; break; case alldefconfig: name = "alldef.config"; break; case randconfig: name = "allrandom.config"; break; default: break; } if (!stat(name, &tmpstat)) conf_read_simple(name, S_DEF_USER, true); else if (!stat("all.config", &tmpstat)) conf_read_simple("all.config", S_DEF_USER, true); break; default: break; } if (sync_kconfig) { if (conf_get_changed()) { name = getenv("KCONFIG_NOSILENTUPDATE"); if (name && *name) { fprintf(stderr, _("\n*** The configuration requires explicit update.\n\n")); return 1; } } valid_stdin = isatty(0) && isatty(1) && isatty(2); } switch (input_mode) { case allnoconfig: conf_set_all_new_symbols(def_no); break; case allyesconfig: conf_set_all_new_symbols(def_yes); break; case allmodconfig: conf_set_all_new_symbols(def_mod); break; case alldefconfig: conf_set_all_new_symbols(def_default); break; case randconfig: conf_set_all_new_symbols(def_random); break; case defconfig: conf_set_all_new_symbols(def_default); break; case savedefconfig: break; case oldaskconfig: rootEntry = &rootmenu; conf(&rootmenu); input_mode = silentoldconfig; /* fall through */ case oldconfig: case listnewconfig: case oldnoconfig: case silentoldconfig: /* Update until a loop caused no more changes */ do { conf_cnt = 0; check_conf(&rootmenu); } while (conf_cnt && (input_mode != listnewconfig && input_mode != oldnoconfig)); break; } if (sync_kconfig) { /* silentoldconfig is used during the build so we shall update autoconf. * All other commands are only used to generate a config. */ if (conf_get_changed() && conf_write(NULL)) { fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n")); exit(1); } if (conf_write_autoconf()) { fprintf(stderr, _("\n*** Error during update of the configuration.\n\n")); return 1; } } else if (input_mode == savedefconfig) { if (conf_write_defconfig(defconfig_file)) { fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"), defconfig_file); return 1; } } else if (input_mode != listnewconfig) { if (conf_write(NULL)) { fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n")); exit(1); } } return 0; }
int main(int ac, char **av) { const char *progname = av[0]; int opt; const char *name, *defconfig_file = NULL /* gcc uninit */; struct stat tmpstat; tty_stdio = isatty(0) && isatty(1); while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) { if (opt == 's') { conf_set_message_callback(NULL); continue; } input_mode = (enum input_mode)opt; switch (opt) { case syncconfig: sync_kconfig = 1; break; case defconfig: case savedefconfig: defconfig_file = optarg; break; case randconfig: { struct timeval now; unsigned int seed; char *seed_env; /* * Use microseconds derived seed, * compensate for systems where it may be zero */ gettimeofday(&now, NULL); seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); seed_env = getenv("KCONFIG_SEED"); if( seed_env && *seed_env ) { char *endp; int tmp = (int)strtol(seed_env, &endp, 0); if (*endp == '\0') { seed = tmp; } } fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed ); srand(seed); break; } case oldaskconfig: case oldconfig: case allnoconfig: case allyesconfig: case allmodconfig: case alldefconfig: case listnewconfig: case olddefconfig: break; case '?': conf_usage(progname); exit(1); break; } } if (ac == optind) { fprintf(stderr, "%s: Kconfig file missing\n", av[0]); conf_usage(progname); exit(1); } name = av[optind]; conf_parse(name); //zconfdump(stdout); if (sync_kconfig) { name = conf_get_configname(); if (stat(name, &tmpstat)) { fprintf(stderr, "***\n" "*** Configuration file \"%s\" not found!\n" "***\n" "*** Please run some configurator (e.g. \"make oldconfig\" or\n" "*** \"make menuconfig\" or \"make xconfig\").\n" "***\n", name); exit(1); } } switch (input_mode) { case defconfig: if (!defconfig_file) defconfig_file = conf_get_default_confname(); if (conf_read(defconfig_file)) { fprintf(stderr, "***\n" "*** Can't find default configuration \"%s\"!\n" "***\n", defconfig_file); exit(1); } break; case savedefconfig: case syncconfig: case oldaskconfig: case oldconfig: case listnewconfig: case olddefconfig: conf_read(NULL); break; case allnoconfig: case allyesconfig: case allmodconfig: case alldefconfig: case randconfig: name = getenv("KCONFIG_ALLCONFIG"); if (!name) break; if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) { if (conf_read_simple(name, S_DEF_USER)) { fprintf(stderr, "*** Can't read seed configuration \"%s\"!\n", name); exit(1); } break; } switch (input_mode) { case allnoconfig: name = "allno.config"; break; case allyesconfig: name = "allyes.config"; break; case allmodconfig: name = "allmod.config"; break; case alldefconfig: name = "alldef.config"; break; case randconfig: name = "allrandom.config"; break; default: break; } if (conf_read_simple(name, S_DEF_USER) && conf_read_simple("all.config", S_DEF_USER)) { fprintf(stderr, "*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n", name); exit(1); } break; default: break; } if (sync_kconfig) { if (conf_get_changed()) { name = getenv("KCONFIG_NOSILENTUPDATE"); if (name && *name) { fprintf(stderr, "\n*** The configuration requires explicit update.\n\n"); return 1; } } } switch (input_mode) { case allnoconfig: conf_set_all_new_symbols(def_no); break; case allyesconfig: conf_set_all_new_symbols(def_yes); break; case allmodconfig: conf_set_all_new_symbols(def_mod); break; case alldefconfig: conf_set_all_new_symbols(def_default); break; case randconfig: /* Really nothing to do in this loop */ while (conf_set_all_new_symbols(def_random)) ; break; case defconfig: conf_set_all_new_symbols(def_default); break; case savedefconfig: break; case oldaskconfig: rootEntry = &rootmenu; conf(&rootmenu); input_mode = oldconfig; /* fall through */ case oldconfig: case listnewconfig: case syncconfig: /* Update until a loop caused no more changes */ do { conf_cnt = 0; check_conf(&rootmenu); } while (conf_cnt); break; case olddefconfig: default: break; } if (sync_kconfig) { /* syncconfig is used during the build so we shall update autoconf. * All other commands are only used to generate a config. */ if (conf_get_changed() && conf_write(NULL)) { fprintf(stderr, "\n*** Error during writing of the configuration.\n\n"); exit(1); } if (conf_write_autoconf()) { fprintf(stderr, "\n*** Error during update of the configuration.\n\n"); return 1; } } else if (input_mode == savedefconfig) { if (conf_write_defconfig(defconfig_file)) { fprintf(stderr, "n*** Error while saving defconfig to: %s\n\n", defconfig_file); return 1; } } else if (input_mode != listnewconfig) { if (conf_write(NULL)) { fprintf(stderr, "\n*** Error during writing of the configuration.\n\n"); exit(1); } } return 0; }
static int conf_cmdline(struct mip6_config *cfg, int argc, char **argv) { static struct option long_opts[] = { {"version", 0, 0, 'V'}, {"help", 0, 0, 'h'}, {"correspondent-node", 0, 0, 'C'}, {"home-agent", 0, 0, 'H'}, {"mobile-node", 0, 0, 'M'}, {"mobile-access-gateway", optional_argument, 0, 'm'}, {"local-mobility-anchor", optional_argument, 0, 'a'}, {"pmip-tunneling", optional_argument, 0, 'i'}, {"pmip-dyn-tunneling", optional_argument, 0, 'd'}, {"lma-address", optional_argument, 0, 'L'}, {"mag-ingress-address", optional_argument, 0, 'N'}, {"mag-egress-address", optional_argument, 0, 'E'}, {"show-config", 0, 0, 0}, {"radius-client-cfg-file", optional_argument, 0, 'R'}, {"radius-password", 0, 0, 'P'}, #ifdef ENABLE_VT {"vt-service", 1, 0, 0 }, #endif {0, 0, 0, 0} }; /* parse all other cmd line parameters than -c */ while (1) { int idx, c; c = getopt_long(argc, argv, "c:d:l:L:N:E:R:P:Vh?CMHmaip", long_opts, &idx); if (c == -1) break; switch (c) { case 0: #ifdef ENABLE_VT if (strcmp(long_opts[idx].name, "vt-service") == 0) { cfg->vt_service = optarg; break; } #endif if (idx == 5) conf_show(cfg); return -1; case 'V': conf_version(); return -1; case '?': case 'h': conf_usage(basename(argv[0])); return -1; case 'd': cfg->debug_level = atoi(optarg); break; case 'l': cfg->debug_log_file = optarg; break; case 'C': cfg->mip6_entity = MIP6_ENTITY_CN; break; case 'H': cfg->mip6_entity = MIP6_ENTITY_HA; break; case 'M': cfg->mip6_entity = MIP6_ENTITY_MN; break; case 'L': if (strchr(optarg, ':')) { if (inet_pton(AF_INET6, optarg, (char *) &cfg->LmaAddress) <= 0) { fprintf(stderr, "invalid address %s\n", optarg); exit(2); } } break; case 'N': if (strchr(optarg, ':')) { if (inet_pton(AF_INET6, optarg, (char *) &cfg->MagAddressIngress) <= 0) { fprintf(stderr, "invalid address %s\n", optarg); exit(2); } } break; case 'E': if (strchr(optarg, ':')) { if (inet_pton(AF_INET6, optarg, (char *) &cfg->MagAddressEgress) <= 0) { fprintf(stderr, "invalid address %s\n", optarg); exit(2); } } break; case 'm': cfg->mip6_entity = MIP6_ENTITY_MAG; break; case 'a': cfg->mip6_entity = MIP6_ENTITY_LMA; break; case 'i': cfg->TunnelingEnabled = 1; break; case 'p': cfg->DynamicTunnelingEnabled = 1; break; case 'R': cfg->RadiusClientConfigFile = optarg; break; case 'P': cfg->RadiusPassword = optarg; break; default: break; }; } return 0; }
struct obj_conf *conf_init( int argc, char **argv ) { struct obj_conf *conf = myalloc( sizeof( struct obj_conf ) ); int opt = 0; int i = 0; /* Defaults */ conf->mode = CONF_CONSOLE; conf->p2p_port = PORT_DHT_DEFAULT; conf->dns_port = PORT_DNS_DEFAULT; conf->verbosity = CONF_VERBOSE; conf->bootstrap_port = PORT_DHT_DEFAULT; conf->announce_port = PORT_WWW_USER; conf->cores = unix_cpus(); conf->bool_realm = FALSE; #ifdef POLARSSL conf->bool_encryption = FALSE; memset( conf->key, '\0', BUF_SIZE ); #endif memset( conf->null_id, '\0', SHA1_SIZE ); strncpy( conf->realm, CONF_REALM, BUF_OFF1 ); strncpy( conf->bootstrap_node, MULTICAST_DEFAULT, BUF_OFF1 ); rand_urandom( conf->node_id, SHA1_SIZE ); /* Arguments */ while( ( opt = getopt( argc, argv, "a:dhk:ln:p:P:qr:x:y:" ) ) != -1 ) { switch( opt ) { case 'a': conf->announce_port = str_safe_port( optarg ); break; case 'd': conf->mode = CONF_DAEMON; break; case 'h': conf_usage( argv[0] ); break; case 'k': #ifdef POLARSSL snprintf( conf->key, BUF_SIZE, "%s", optarg ); conf->bool_encryption = TRUE; #endif break; case 'l': snprintf( conf->bootstrap_node, BUF_SIZE, "%s", BOOTSTRAP_DEFAULT ); break; case 'n': sha1_hash( conf->node_id, optarg, strlen( optarg ) ); break; case 'p': conf->p2p_port = str_safe_port( optarg ); break; case 'P': conf->dns_port = str_safe_port( optarg ); break; case 'q': conf->verbosity = CONF_BEQUIET; break; case 'r': snprintf( conf->realm, BUF_SIZE, "%s", optarg ); conf->bool_realm = TRUE; break; case 'x': snprintf( conf->bootstrap_node, BUF_SIZE, "%s", optarg ); break; case 'y': conf->bootstrap_port = str_safe_port( optarg ); break; default: /* '?' */ conf_usage( argv[0] ); } } /* Get non-option values. */ for( i=optind; i<argc; i++ ) { hostname_put( argv[i], conf->node_id, conf->realm, conf->bool_realm ); } if( list_size( _main->hostname ) <= 0 ) { conf_usage( argv[0] ); } if( conf->p2p_port == 0 ) { fail( "Invalid P2P port number (-p)" ); } if( conf->dns_port == 0 ) { fail( "Invalid DNS port number (-P)" ); } if( conf->dns_port == conf->p2p_port ) { fail( "P2P port (-p) and DNS port (-P) must not be the same." ); } if( conf->bootstrap_port == 0 ) { fail( "Invalid bootstrap port number (-y)" ); } if( conf->announce_port == 0 ) { fail( "Invalid announce port number (-a)" ); } if( conf->cores < 1 || conf->cores > 128 ) { fail( "Invalid number of CPU cores" ); } return conf; }
int main(int ac, char **av) { const char *progname = av[0]; int opt; const char *name, *defconfig_file = NULL /* gcc uninit */; struct stat tmpstat; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) { input_mode = (enum input_mode)opt; switch (opt) { case defconfig: case savedefconfig: defconfig_file = optarg; break; case randconfig: { struct timeval now; unsigned int seed; /* * Use microseconds derived seed, * compensate for systems where it may be zero */ gettimeofday(&now, NULL); seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); srand(seed); break; } case oldaskconfig: case oldconfig: case allnoconfig: case allyesconfig: case allmodconfig: case alldefconfig: case listnewconfig: case oldnoconfig: break; case '?': conf_usage(progname); exit(1); break; } } if (ac == optind) { printf(_("%s: Kconfig file missing\n"), av[0]); conf_usage(progname); exit(1); } name = av[optind]; conf_parse(name); //zconfdump(stdout); switch (input_mode) { case defconfig: if (!defconfig_file) defconfig_file = conf_get_default_confname(); if (conf_read(defconfig_file)) { printf(_("***\n" "*** Can't find default configuration \"%s\"!\n" "***\n"), defconfig_file); exit(1); } break; case savedefconfig: case oldaskconfig: case oldconfig: case listnewconfig: case oldnoconfig: conf_read(NULL); break; case allnoconfig: case allyesconfig: case allmodconfig: case alldefconfig: case randconfig: name = getenv("KCONFIG_ALLCONFIG"); if (name && !stat(name, &tmpstat)) { conf_read_simple(name, S_DEF_USER); break; } switch (input_mode) { case allnoconfig: name = "allno.config"; break; case allyesconfig: name = "allyes.config"; break; case allmodconfig: name = "allmod.config"; break; case alldefconfig: name = "alldef.config"; break; case randconfig: name = "allrandom.config"; break; default: break; } if (!stat(name, &tmpstat)) conf_read_simple(name, S_DEF_USER); else if (!stat("all.config", &tmpstat)) conf_read_simple("all.config", S_DEF_USER); break; default: break; } valid_stdin = isatty(0) && isatty(1) && isatty(2); switch (input_mode) { case allnoconfig: conf_set_all_new_symbols(def_no); break; case allyesconfig: conf_set_all_new_symbols(def_yes); break; case allmodconfig: conf_set_all_new_symbols(def_mod); break; case alldefconfig: conf_set_all_new_symbols(def_default); break; case randconfig: conf_set_all_new_symbols(def_random); break; case defconfig: conf_set_all_new_symbols(def_default); break; case savedefconfig: break; case oldaskconfig: rootEntry = &rootmenu; conf(&rootmenu); input_mode = oldconfig; /* fall through */ case oldconfig: case listnewconfig: case oldnoconfig: /* Update until a loop caused no more changes */ do { conf_cnt = 0; check_conf(&rootmenu); } while (conf_cnt && (input_mode != listnewconfig && input_mode != oldnoconfig)); break; } if (input_mode == savedefconfig) { if (conf_write_defconfig(defconfig_file)) { fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"), defconfig_file); return 1; } } else if (input_mode != listnewconfig) { /* * build so we shall update autoconf. */ if (conf_write(NULL)) { fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n")); exit(1); } if (conf_write_autoconf()) { fprintf(stderr, _("\n*** Error during update of the configuration.\n\n")); return 1; } } return 0; }
/*************************************************************************** * Read the configuration from the command-line. * Called by 'main()' when starting up. ***************************************************************************/ void conf_command_line(struct Configuration *cfg, int argc, char *argv[]) { int i; struct ParsedIpAddress ipaddr; for (i=1; i<argc; i++) { /* * --name=value * --name:value * -- name value */ if (argv[i][0] == '-' && argv[i][1] == '-') { if (strcmp(argv[i], "--help") == 0) conf_help(); else { char name2[64]; char *name = argv[i] + 2; unsigned name_length; const char *value; value = strchr(&argv[i][2], '='); if (value == NULL) value = strchr(&argv[i][2], ':'); if (value == NULL) { value = argv[++i]; name_length = (unsigned)strlen(name); } else { name_length = (unsigned)(value - name); value++; } if (i >= argc) { fprintf(stderr, "%.*s: empty parameter\n", name_length, name); break; } if (name_length > sizeof(name2) - 1) { fprintf(stderr, "%.*s: name too long\n", name_length, name); name_length = sizeof(name2) - 1; } memcpy(name2, name, name_length); name2[name_length] = '\0'; conf_set_parameter(cfg, name2, value); } continue; } /* For for a single-dash parameter */ else if (argv[i][0] == '-') { const char *arg; switch (argv[i][1]) { case 'c': if (argv[i][2]) arg = argv[i]+2; else arg = argv[++i]; //conf_trackfile_add(cfg->tf, argv[i]); cfg_parse_file(cfg, argv[i]); break; case 'd': if (argv[i][2]) arg = argv[i]+2; else arg = argv[++i]; if (arg[0] < '0' || '9' < arg[0]) LOG_ERR(C_CONFIG, "expected numeric debug level after -d option\n"); else verbosity = atoi(arg); break; case 'i': if (argv[i][2]) arg = argv[i]+2; else arg = argv[++i]; conf_set_parameter(cfg, "adapter", arg); break; case 'h': case '?': conf_usage(); break; case 'v': verbosity++; break; default: LOG_ERR(C_CONFIG, "FAIL: unknown option: -%s\n", argv[i]); LOG_ERR(C_CONFIG, " [hint] try \"--help\"\n"); exit(1); } continue; } else if (ends_with(argv[i], ".zone")) cfg_add_zonefile(cfg, argv[i]); else if (ends_with(argv[i], ".conf")) { //conf_trackfile_add(cfg->tf, argv[i]); cfg_parse_file(cfg, argv[i]); } else if (parse_ip_address(argv[i], 0, 0, &ipaddr)) { ;//conf_set_parameter(conf, "adapter-ip", argv[i]); } else if (pixie_nic_exists(argv[i])) { //strcpy_s(conf->nic[0].ifname, sizeof(conf->nic[0].ifname), argv[i]); } else if (is_directory(argv[i]) && has_configuration(argv[i])) { //directory_to_zonefile_list(conf, argv[i]); } else { LOG_ERR(C_CONFIG, "%s: unknown command-line parameter\n", argv[i]); } } }