static void print_tunnel(struct ip6_tnl_parm *p) { char remote[64]; char local[64]; inet_ntop(AF_INET6, &p->raddr, remote, sizeof(remote)); inet_ntop(AF_INET6, &p->laddr, local, sizeof(local)); printf("%s: %s/ipv6 remote %s local %s", p->name, tnl_strproto(p->proto), remote, local); if (p->link) { char *n = tnl_ioctl_get_ifname(p->link); if (n) printf(" dev %s", n); } if (p->flags & IP6_TNL_F_IGN_ENCAP_LIMIT) printf(" encaplimit none"); else printf(" encaplimit %u", p->encap_limit); printf(" hoplimit %u", p->hop_limit); if (p->flags & IP6_TNL_F_USE_ORIG_TCLASS) printf(" tc inherit"); else { __u32 val = ntohl(p->flowinfo & IP6_FLOWINFO_TCLASS); printf(" tc 0x%02x", (__u8)(val >> 20)); } if (p->flags & IP6_TNL_F_USE_ORIG_FLOWLABEL) printf(" fl inherit"); else printf(" fl 0x%05x", ntohl(p->flowinfo & IP6_FLOWINFO_FLOWLABEL)); printf(" (flowinfo 0x%08x)", ntohl(p->flowinfo)); if (p->flags & IP6_TNL_F_RCV_DSCP_COPY) printf(" dscp inherit"); }
static void print_tunnel(struct ip_tunnel_parm *p) { char s1[1024]; char s2[1024]; char s3[64]; char s4[64]; inet_ntop(AF_INET, &p->i_key, s3, sizeof(s3)); inet_ntop(AF_INET, &p->o_key, s4, sizeof(s4)); /* Do not use format_host() for local addr, * symbolic name will not be useful. */ printf("%s: %s/ip remote %s local %s ", p->name, tnl_strproto(p->iph.protocol), p->iph.daddr ? format_host(AF_INET, 4, &p->iph.daddr, s1, sizeof(s1)) : "any", p->iph.saddr ? rt_addr_n2a(AF_INET, 4, &p->iph.saddr, s2, sizeof(s2)) : "any"); if (p->link) { char *n = tnl_ioctl_get_ifname(p->link); if (n) printf(" dev %s ", n); } if (p->iph.ttl) printf(" ttl %d ", p->iph.ttl); else printf(" ttl inherit "); if (p->iph.tos) { SPRINT_BUF(b1); printf(" tos"); if (p->iph.tos&1) printf(" inherit"); if (p->iph.tos&~1) printf("%c%s ", p->iph.tos&1 ? '/' : ' ', rtnl_dsfield_n2a(p->iph.tos&~1, b1, sizeof(b1))); } if (!(p->iph.frag_off&htons(IP_DF))) printf(" nopmtudisc"); if ((p->i_flags&GRE_KEY) && (p->o_flags&GRE_KEY) && p->o_key == p->i_key) printf(" key %s", s3); else if ((p->i_flags|p->o_flags)&GRE_KEY) { if (p->i_flags&GRE_KEY) printf(" ikey %s ", s3); if (p->o_flags&GRE_KEY) printf(" okey %s ", s4); } if (p->i_flags&GRE_SEQ) printf("%s Drop packets out of sequence.\n", _SL_); if (p->i_flags&GRE_CSUM) printf("%s Checksum in received packet is required.", _SL_); if (p->o_flags&GRE_SEQ) printf("%s Sequence packets on output.", _SL_); if (p->o_flags&GRE_CSUM) printf("%s Checksum output packets.", _SL_); }
static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { char s1[1024]; char s2[64]; const char *local = "any"; const char *remote = "any"; unsigned iflags = 0; unsigned oflags = 0; if (!tb) return; if (tb[IFLA_GRE_REMOTE]) { unsigned addr = *(__u32 *)RTA_DATA(tb[IFLA_GRE_REMOTE]); if (addr) remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); } fprintf(f, "remote %s ", remote); if (tb[IFLA_GRE_LOCAL]) { unsigned addr = *(__u32 *)RTA_DATA(tb[IFLA_GRE_LOCAL]); if (addr) local = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); } fprintf(f, "local %s ", local); if (tb[IFLA_GRE_LINK] && *(__u32 *)RTA_DATA(tb[IFLA_GRE_LINK])) { unsigned link = *(__u32 *)RTA_DATA(tb[IFLA_GRE_LINK]); char *n = tnl_ioctl_get_ifname(link); if (n) fprintf(f, "dev %s ", n); else fprintf(f, "dev %u ", link); } if (tb[IFLA_GRE_TTL] && *(__u8 *)RTA_DATA(tb[IFLA_GRE_TTL])) fprintf(f, "ttl %d ", *(__u8 *)RTA_DATA(tb[IFLA_GRE_TTL])); else fprintf(f, "ttl inherit "); if (tb[IFLA_GRE_TOS] && *(__u8 *)RTA_DATA(tb[IFLA_GRE_TOS])) { int tos = *(__u8 *)RTA_DATA(tb[IFLA_GRE_TOS]); fputs("tos ", f); if (tos == 1) fputs("inherit ", f); else fprintf(f, "0x%x ", tos); } if (tb[IFLA_GRE_PMTUDISC] && !*(__u8 *)RTA_DATA(tb[IFLA_GRE_PMTUDISC])) fputs("nopmtudisc ", f); if (tb[IFLA_GRE_IFLAGS]) iflags = *(__u16 *)RTA_DATA(tb[IFLA_GRE_IFLAGS]); if (tb[IFLA_GRE_OFLAGS]) oflags = *(__u16 *)RTA_DATA(tb[IFLA_GRE_OFLAGS]); if (iflags & GRE_KEY && tb[IFLA_GRE_IKEY] && *(__u32 *)RTA_DATA(tb[IFLA_GRE_IKEY])) { inet_ntop(AF_INET, RTA_DATA(tb[IFLA_GRE_IKEY]), s2, sizeof(s2)); fprintf(f, "ikey %s ", s2); } if (oflags & GRE_KEY && tb[IFLA_GRE_OKEY] && *(__u32 *)RTA_DATA(tb[IFLA_GRE_OKEY])) { inet_ntop(AF_INET, RTA_DATA(tb[IFLA_GRE_OKEY]), s2, sizeof(s2)); fprintf(f, "ikey %s ", s2); } if (iflags & GRE_SEQ) fputs("iseq ", f); if (oflags & GRE_SEQ) fputs("oseq ", f); if (iflags & GRE_CSUM) fputs("icsum ", f); if (oflags & GRE_CSUM) fputs("ocsum ", f); }
static void print_tunnel(struct ip_tunnel_parm *p) { char s1[1024]; char s2[1024]; char s3[64]; char s4[64]; inet_ntop(AF_INET, &p->i_key, s3, sizeof(s3)); inet_ntop(AF_INET, &p->o_key, s4, sizeof(s4)); /* Do not use format_host() for local addr, * symbolic name will not be useful. */ printf("%s: %s/ip remote %s local %s ", p->name, tnl_strproto(p->iph.protocol), p->iph.daddr ? format_host(AF_INET, 4, &p->iph.daddr, s1, sizeof(s1)) : "any", p->iph.saddr ? rt_addr_n2a(AF_INET, 4, &p->iph.saddr, s2, sizeof(s2)) : "any"); if (p->i_flags & SIT_ISATAP) { struct ip_tunnel_prl prl[16]; int i; memset(prl, 0, sizeof(prl)); prl[0].datalen = sizeof(prl) - sizeof(prl[0]); prl[0].addr = htonl(INADDR_ANY); if (!tnl_prl_ioctl(SIOCGETPRL, p->name, prl)) for (i = 1; i < sizeof(prl) / sizeof(prl[0]); i++) { if (prl[i].addr != htonl(INADDR_ANY)) { printf(" %s %s ", (prl[i].flags & PRL_DEFAULT) ? "pdr" : "pr", format_host(AF_INET, 4, &prl[i].addr, s1, sizeof(s1))); } } } if (p->link) { char *n = tnl_ioctl_get_ifname(p->link); if (n) printf(" dev %s ", n); } if (p->iph.ttl) printf(" ttl %d ", p->iph.ttl); else printf(" ttl inherit "); if (p->iph.tos) { SPRINT_BUF(b1); printf(" tos"); if (p->iph.tos&1) printf(" inherit"); if (p->iph.tos&~1) printf("%c%s ", p->iph.tos&1 ? '/' : ' ', rtnl_dsfield_n2a(p->iph.tos&~1, b1, sizeof(b1))); } if (!(p->iph.frag_off&htons(IP_DF))) printf(" nopmtudisc"); if ((p->i_flags&GRE_KEY) && (p->o_flags&GRE_KEY) && p->o_key == p->i_key) printf(" key %s", s3); else if ((p->i_flags|p->o_flags)&GRE_KEY) { if (p->i_flags&GRE_KEY) printf(" ikey %s ", s3); if (p->o_flags&GRE_KEY) printf(" okey %s ", s4); } if (p->i_flags&GRE_SEQ) printf("%s Drop packets out of sequence.\n", _SL_); if (p->i_flags&GRE_CSUM) printf("%s Checksum in received packet is required.", _SL_); if (p->o_flags&GRE_SEQ) printf("%s Sequence packets on output.", _SL_); if (p->o_flags&GRE_CSUM) printf("%s Checksum output packets.", _SL_); }