static int do_show(int argc, char **argv) { struct ip_tunnel_parm p, p1; const char *basedev; if (parse_args(argc, argv, SIOCGETTUNNEL, &p) < 0) return -1; basedev = tnl_defname(&p); if (!basedev) { struct tnl_print_nlmsg_info info = { .p1 = &p, .p2 = &p1, .init = ip_tunnel_parm_initialize, .match = ip_tunnel_parm_match, .print = print_tunnel, }; return do_tunnels_list(&info); } if (tnl_get_ioctl(p.name[0] ? p.name : basedev, &p)) return -1; print_tunnel(&p); fputc('\n', stdout); return 0; }
static int do_show(int argc, char **argv) { struct ip_tunnel_parm p; const char *basedev; ll_init_map(&rth); if (parse_args(argc, argv, SIOCGETTUNNEL, &p) < 0) return -1; basedev = tnl_defname(&p); if (!basedev) return do_tunnels_list(&p); if (tnl_get_ioctl(p.name[0] ? p.name : basedev, &p)) return -1; print_tunnel(&p); printf("\n"); return 0; }
static int do_add(int cmd, int argc, char **argv) { struct ip_tunnel_parm p; const char *basedev; if (parse_args(argc, argv, cmd, &p) < 0) return -1; if (p.iph.ttl && p.iph.frag_off == 0) { fprintf(stderr, "ttl != 0 and nopmtudisc are incompatible\n"); return -1; } basedev = tnl_defname(&p); if (!basedev) { fprintf(stderr, "cannot determine tunnel mode (ipip, gre, vti or sit)\n"); return -1; } return tnl_add_ioctl(cmd, basedev, p.name, &p); }