int do_iptunnel(int argc, char **argv) { int i; for (i = 0; i < argc - 1; i++) { if (strcmp(argv[i], "mode") == 0) { if (tunnel_mode_is_ipv6(argv[i + 1])) preferred_family = AF_INET6; break; } } switch (preferred_family) { case AF_UNSPEC: preferred_family = AF_INET; break; case AF_INET: break; /* * This is silly enough but we have no easy way to make it * protocol-independent because of unarranged structure between * IPv4 and IPv6. */ case AF_INET6: return do_ip6tunnel(argc, argv); default: fprintf(stderr, "Unsupported protocol family: %d\n", preferred_family); exit(-1); } if (argc > 0) { if (matches(*argv, "add") == 0) return do_add(SIOCADDTUNNEL, argc - 1, argv + 1); if (matches(*argv, "change") == 0) return do_add(SIOCCHGTUNNEL, argc - 1, argv + 1); if (matches(*argv, "delete") == 0) return do_del(argc - 1, argv + 1); if (matches(*argv, "show") == 0 || matches(*argv, "lst") == 0 || matches(*argv, "list") == 0) return do_show(argc - 1, argv + 1); if (matches(*argv, "prl") == 0) return do_prl(argc - 1, argv + 1); if (matches(*argv, "6rd") == 0) return do_6rd(argc - 1, argv + 1); if (matches(*argv, "help") == 0) usage(); } else return do_show(0, NULL); fprintf(stderr, "Command \"%s\" is unknown, try \"ip tunnel help\"\n", *argv); exit(-1); }
int do_iptunnel(int argc, char **argv) { switch (preferred_family) { case AF_UNSPEC: preferred_family = AF_INET; break; case AF_INET: break; #ifndef NO_IPV6 /* * This is silly enough but we have no easy way to make it * protocol-independent because of unarranged structure between * IPv4 and IPv6. */ case AF_INET6: return do_ip6tunnel(argc, argv); #endif default: fprintf(stderr, "Unsupported family:%d\n", preferred_family); exit(-1); } if (argc > 0) { if (matches(*argv, "add") == 0) return do_add(SIOCADDTUNNEL, argc-1, argv+1); if (matches(*argv, "change") == 0) return do_add(SIOCCHGTUNNEL, argc-1, argv+1); if (matches(*argv, "del") == 0) return do_del(argc-1, argv+1); if (matches(*argv, "show") == 0 || matches(*argv, "lst") == 0 || matches(*argv, "list") == 0) return do_show(argc-1, argv+1); #ifndef NO_IPV6 if (matches(*argv, "6rd") == 0) return do_6rd(argc-1, argv+1); #endif if (matches(*argv, "help") == 0) usage(); } else return do_show(0, NULL); fprintf(stderr, "Command \"%s\" is unknown, try \"ip tunnel help\".\n", *argv); exit(-1); }