static void parse_arguments()

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]);
}