On 4/18/19 6:19 AM, Kristian Evensen wrote:
> @@ -77,6 +84,38 @@ static int fou_parse_opt(int argc, char **argv, struct
> nlmsghdr *n,
> gue_set = true;
> } else if (!matches(*argv, "-6")) {
> family = AF_INET6;
> + } else if (!matches(*argv, "local")) {
> + NEXT_ARG();
> +
> + local = *argv;
> + } else if (!matches(*argv, "peer")) {
> + NEXT_ARG();
> +
> + peer = *argv;
> + } else if (!matches(*argv, "peer_port")) {
> + NEXT_ARG();
> +
> + if (get_be16(&peer_port, *argv, 0) || peer_port == 0)
> + invarg("invalid peer port", *argv);
> + } else if (!matches(*argv, "dev")) {
> + const char *ifname;
> +
> + NEXT_ARG();
> +
> + ifname = *argv;
> +
> + if (check_ifname(ifname)) {
> + fprintf(stderr, "fou: invalid device name\n");
> + exit(EXIT_FAILURE);
> + }
> +
> + ll_init_map(&rth);
Missed this in v1: you definitely do not want to call ll_init_map here.
It does a full kink dump which can be expensive on large scale setups.
ll_name_to_index alone should be fine.
> + index = ll_name_to_index(ifname);
> +
> + if (!index) {
> + fprintf(stderr, "fou: unknown device name\n");
> + exit(EXIT_FAILURE);
> + }
> } else {
> fprintf(stderr
> , "fou: unknown command \"%s\"?\n", *argv);