static int do_6rd(int argc, char **argv) { struct ip_tunnel_6rd ip6rd; int devname = 0; int cmd = 0; char medium[IFNAMSIZ]; inet_prefix prefix; memset(&ip6rd, 0, sizeof(ip6rd)); memset(&medium, 0, sizeof(medium)); while (argc > 0) { if (strcmp(*argv, "6rd-prefix") == 0) { NEXT_ARG(); if (get_prefix(&prefix, *argv, AF_INET6)) invarg("invalid 6rd_prefix\n", *argv); cmd = SIOCADD6RD; memcpy(&ip6rd.prefix, prefix.data, 16); ip6rd.prefixlen = prefix.bitlen; } else if (strcmp(*argv, "6rd-relay_prefix") == 0) { NEXT_ARG(); if (get_prefix(&prefix, *argv, AF_INET)) invarg("invalid 6rd-relay_prefix\n", *argv); cmd = SIOCADD6RD; memcpy(&ip6rd.relay_prefix, prefix.data, 4); ip6rd.relay_prefixlen = prefix.bitlen; } else if (strcmp(*argv, "6rd-reset") == 0) { cmd = SIOCDEL6RD; } else if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); strncpy(medium, *argv, IFNAMSIZ-1); devname++; } else { fprintf(stderr, "Invalid 6RD parameter \"%s\"\n", *argv); exit(-1); } argc--; argv++; } if (devname == 0) { fprintf(stderr, "Must specify device\n"); exit(-1); } return tnl_6rd_ioctl(cmd, medium, &ip6rd); }
static int do_6rd(int argc, char **argv) { struct ip_tunnel_6rd ip6rd = {}; int cmd = 0; const char *medium = NULL; inet_prefix prefix; while (argc > 0) { if (strcmp(*argv, "6rd-prefix") == 0) { NEXT_ARG(); if (get_prefix(&prefix, *argv, AF_INET6)) invarg("invalid 6rd_prefix\n", *argv); cmd = SIOCADD6RD; memcpy(&ip6rd.prefix, prefix.data, 16); ip6rd.prefixlen = prefix.bitlen; } else if (strcmp(*argv, "6rd-relay_prefix") == 0) { NEXT_ARG(); if (get_prefix(&prefix, *argv, AF_INET)) invarg("invalid 6rd-relay_prefix\n", *argv); cmd = SIOCADD6RD; memcpy(&ip6rd.relay_prefix, prefix.data, 4); ip6rd.relay_prefixlen = prefix.bitlen; } else if (strcmp(*argv, "6rd-reset") == 0) { cmd = SIOCDEL6RD; } else if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); if (check_ifname(*argv)) invarg("\"dev\" not a valid ifname", *argv); medium = *argv; } else { fprintf(stderr, "Invalid 6RD parameter \"%s\"\n", *argv); exit(-1); } argc--; argv++; } if (!medium) { fprintf(stderr, "Must specify device\n"); exit(-1); } return tnl_6rd_ioctl(cmd, medium, &ip6rd); }