static int do_show(int argc, char **argv) { int err; struct ip_tunnel_parm p; ll_init_map(&rth); if (parse_args(argc, argv, SIOCGETTUNNEL, &p) < 0) return -1; switch (p.iph.protocol) { case IPPROTO_IPIP: if (p.i_flags & VTI_ISVTI) err = tnl_get_ioctl(p.name[0] ? p.name : "ip_vti0", &p); else err = tnl_get_ioctl(p.name[0] ? p.name : "tunl0", &p); break; case IPPROTO_GRE: err = tnl_get_ioctl(p.name[0] ? p.name : "gre0", &p); break; case IPPROTO_IPV6: err = tnl_get_ioctl(p.name[0] ? p.name : "sit0", &p); break; default: do_tunnels_list(&p); return 0; } if (err) return -1; print_tunnel(&p); printf("\n"); return 0; }
/* Return value becomes exitcode. It's okay to not return at all */ static int do_show(char **argv) { int err; struct ip_tunnel_parm p; parse_args(argv, SIOCGETTUNNEL, &p); switch (p.iph.protocol) { case IPPROTO_IPIP: err = do_get_ioctl(p.name[0] ? p.name : "tunl0", &p); break; case IPPROTO_GRE: err = do_get_ioctl(p.name[0] ? p.name : "gre0", &p); break; case IPPROTO_IPV6: err = do_get_ioctl(p.name[0] ? p.name : "sit0", &p); break; default: do_tunnels_list(&p); return 0; } if (err) return -1; print_tunnel(&p); bb_putchar('\n'); return 0; }
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_show(int argc, char **argv) { struct ip6_tnl_parm p; ip6_tnl_parm_init(&p, 0); if (parse_args(argc, argv, &p) < 0) return -1; if (!p.name[0] || show_stats) do_tunnels_list(&p); else { if (tnl_get_ioctl(p.name, &p)) return -1; print_tunnel(&p); printf("\n"); } return 0; }
static int do_show(int argc, char **argv) { struct ip6_tnl_parm p; ll_init_map(&rth); ip6_tnl_parm_init(&p, 0); p.proto = 0; /* default to any */ if (parse_args(argc, argv, SIOCGETTUNNEL, &p) < 0) return -1; if (!p.name[0] || show_stats) do_tunnels_list(&p); else { if (tnl_get_ioctl(p.name, &p)) return -1; print_tunnel(&p); printf("\n"); } return 0; }