Exemplo n.º 1
0
static error_t parse_opt(int key, char *arg, struct argp_state *state)
{
	struct args *args = state->input;
	long l;

	switch (key) {
	case 's':
		l = arg_to_long(state, arg);
		if (l <= 0)
			argp_error(state,
				"NUM must be greater than zero");
		args->start_at = l - 1;
		break;

	case 'e':
		l = arg_to_long(state, arg);
		if (l <= 0)
			argp_error(state,
				"NUM must be greater than zero");
		args->end_at = l - 1;
		break;

	case 'p':
		args->show_progress = !!arg_to_long(state, arg);
		break;

	case ARGP_KEY_INIT:
		args->dev_path = NULL;
		break;

	case ARGP_KEY_ARG:
		if (args->dev_path)
			argp_error(state,
				"Wrong number of arguments; only one is allowed");
		args->dev_path = arg;
		break;

	case ARGP_KEY_END:
		if (!args->dev_path)
			argp_error(state,
				"The disk path was not specified");
		if (args->start_at > args->end_at)
			argp_error(state,
				"Option --start-at must be less or equal to option --end-at");
		break;

	default:
		return ARGP_ERR_UNKNOWN;
	}
	return 0;
}
Exemplo n.º 2
0
static error_t parse_opt(int key, char *arg, struct argp_state *state)
{
	struct args *args = state->input;

	switch (key) {
	case 's':
		args->stack = arg;
		if (strcmp(arg, "ip") && strcmp(arg, "xia"))
			argp_error(state,
				"Stack must be either 'ip', or 'xia'");
		break;

	case 'r':
		args->add_rules = 1;
		assert(!arg);
		break;

	case 'e':
		args->ebtables = arg;
		break;

	case 't':
		args->sleep = arg_to_long(state, arg);
		if (args->sleep < 1)
			argp_error(state, "Sleep period must be >= 1");
		break;

	case 'p':
		args->parents = 1;
		assert(!arg);
		break;

	case 'd':
		args->daemon = 1;
		assert(!arg);
		break;

	case 'f':
		args->file = arg;
		break;

	case ARGP_KEY_INIT:
		break;

	case ARGP_KEY_ARG:
		if (!if_nametoindex(arg))
			argp_error(state, "Invalid interface `%s'", arg);
		make_space(args);
		args->ifs[args->count++] = arg;
		break;

	case ARGP_KEY_END:
		if (args->add_rules && args->count < 1)
			argp_error(state, "There must be at least one "
				"inteface to add");
		break;

	default:
		return ARGP_ERR_UNKNOWN;
	}
	return 0;
}
Exemplo n.º 3
0
static error_t parse_opt(int key, char *arg, struct argp_state *state)
{
	struct args *args = state->input;

	switch (key) {
	case 'p':
		args->prefix_filename = arg;
		break;

	case 'x':
		args->prefix_limit = arg_to_long(state, arg);
		if (args->prefix_limit < 1)
			argp_error(state, "Prefix limit must be >= 1");
		break;

	case 'z': {
		char *end;
		args->s = strtod(arg, &end);
		if (!*arg || *end)
			argp_error(state, "'%s' is not a float", arg);
		if (args->s < 0 || args->s == NAN || args->s == INFINITY)
			argp_error(state,"Zipf must be >= 0");
		break;
	}

	case 's':
		args->stack = arg;
		if (strcmp(arg, "ip") && strcmp(arg, "xia"))
			argp_error(state,
				"Stack must be either 'ip', or 'xia'");
		break;

	case 'i':
		args->ifname = arg;
		break;

	case 'm':
		args->dst_mac_len = lladdr_pton(arg, args->dst_mac,
			sizeof(args->dst_mac));
		if (args->dst_mac_len < 1)
			argp_error(state,
				"'%s' is not a valid Ethernet address", arg);
		break;

	case 't':
		args->dst_addr_type = arg;
		if (strcmp(arg, "ip") && strcmp(arg, "fb0") &&
			strcmp(arg, "fb1") && strcmp(arg, "fb2") &&
			strcmp(arg, "fb3") && strcmp(arg, "via"))
			argp_error(state, "'%s' is not a valid type", arg);
		break;

	case 'l':
		args->packet_len = arg_to_long(state, arg);
		if (args->packet_len < 1)
			argp_error(state, "Packet lenght must be >= 1");
		break;

	case 'n':
		args->nnodes = arg_to_long(state, arg);
		if (args->nnodes < 2)
			argp_error(state, "Number of nodes must be >= 2");
		break;

	case 'd':
		args->node_id = arg_to_long(state, arg);
		if (args->node_id < 1)
			argp_error(state, "Node ID must be >= 1");
		break;

	case 'r':
		args->run = arg_to_long(state, arg);
		if (args->run < 1)
			argp_error(state,"Run must be >= 1");
		break;

	case 'v':
		args->interactive = 1;
		break;

	default:
		return ARGP_ERR_UNKNOWN;
	}
	return 0;
}