in main.c [20:96]
static void parse_arguments(int argc, char **argv, struct netconsd_params *p)
{
int i;
char *tmp;
static const char *optstr = "hw:l:b:a:u:g:";
static const struct option optlong[] = {
{
.name = "help",
.has_arg = no_argument,
.val = 'h',
},
{
.name = NULL,
},
};
while (1) {
i = getopt_long(argc, argv, optstr, optlong, NULL);
switch (i) {
case 'w':
p->nr_workers = atoi(optarg);
break;
case 'l':
p->nr_listeners = atoi(optarg);
break;
case 'b':
p->mmsg_batch = atoi(optarg);
break;
case 'a':
if (!inet_pton(AF_INET6, optarg, &p->listen_addr.sin6_addr))
fatal("invalid listen address\n");
debug("listening for address %s\n", optarg);
break;
case 'u':
p->listen_addr.sin6_port = htons(atoi(optarg));
break;
case 'g':
tmp = index(optarg, '/');
if (!tmp)
fatal("'-g' expects 'INTERVAL/AGE' in ms\n");
p->gc_int_ms = atoi(optarg);
p->gc_age_ms = atoi(tmp + 1);
if (p->gc_age_ms < p->gc_int_ms)
fatal("GC age must be >= GC interval\n");
break;
case -1:
goto done;
case 'h':
printf("Usage: %s [-w workers] [-l listeners] "
"[-b mmsg_batch] [-a udp_listen_addr] [-u udp_listen_port] "
"[-g '${interval}/${age}'] [output module path] "
"[another output module path...]\n", argv[0]);
exit(0);
default:
exit(1);
}
}
done:
/*
* Register output modules
*/
if (optind == argc)
warn("You passed no output modules, which is sort of silly\n");
if (argc - optind > MAXOUTS)
fatal("Too many output mods: %d>%d\n", argc - optind, MAXOUTS);
for (i = optind; i < argc; i++)
if (register_output_module(argv[i], p->nr_workers))
fatal("Can't register '%s'\n", argv[i]);
}