From: David Ahern Date: Sun, 21 Jan 2018 17:37:01 +0000 (-0800) Subject: Merge branch 'master' into net-next X-Git-Tag: v4.16.0~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c75f69411bc8c3affe5d173afcf981d15f5da15;p=thirdparty%2Fiproute2.git Merge branch 'master' into net-next Conflicts: ip/link_gre.c ip/link_gre6.c Signed-off-by: David Ahern --- 8c75f69411bc8c3affe5d173afcf981d15f5da15 diff --cc ip/link_gre.c index 52c581d22,6254e8875..674603ba7 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@@ -518,102 -465,15 +506,37 @@@ static void gre_print_opt(struct link_u if (tb[IFLA_GRE_ERSPAN_INDEX]) { __u32 erspan_idx = rta_getattr_u32(tb[IFLA_GRE_ERSPAN_INDEX]); - print_uint(PRINT_ANY, - "erspan_index", "erspan_index %u ", erspan_idx); + print_uint(PRINT_ANY, "erspan_index", "erspan_index %u ", erspan_idx); + } + + if (tb[IFLA_GRE_ERSPAN_VER]) { + __u8 erspan_ver = rta_getattr_u8(tb[IFLA_GRE_ERSPAN_VER]); + + print_uint(PRINT_ANY, "erspan_ver", "erspan_ver %u ", erspan_ver); + } + + if (tb[IFLA_GRE_ERSPAN_DIR]) { + __u8 erspan_dir = rta_getattr_u8(tb[IFLA_GRE_ERSPAN_DIR]); + + if (erspan_dir == 0) + print_string(PRINT_ANY, "erspan_dir", + "erspan_dir ingress ", NULL); + else + print_string(PRINT_ANY, "erspan_dir", + "erspan_dir egress ", NULL); + } + + if (tb[IFLA_GRE_ERSPAN_HWID]) { + __u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]); + + print_hex(PRINT_ANY, "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid); } - if (tb[IFLA_GRE_ENCAP_TYPE] && - rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]) != TUNNEL_ENCAP_NONE) { - __u16 type = rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]); - __u16 flags = rta_getattr_u16(tb[IFLA_GRE_ENCAP_FLAGS]); - __u16 sport = rta_getattr_u16(tb[IFLA_GRE_ENCAP_SPORT]); - __u16 dport = rta_getattr_u16(tb[IFLA_GRE_ENCAP_DPORT]); - - - open_json_object("encap"); - print_string(PRINT_FP, NULL, "encap ", NULL); - - switch (type) { - case TUNNEL_ENCAP_FOU: - print_string(PRINT_ANY, "type", "%s ", "fou"); - break; - case TUNNEL_ENCAP_GUE: - print_string(PRINT_ANY, "type", "%s ", "gue"); - break; - default: - print_null(PRINT_ANY, "type", "%s ", "unknown"); - break; - } - - if (is_json_context()) { - print_uint(PRINT_JSON, - "sport", - NULL, - sport ? ntohs(sport) : 0); - print_uint(PRINT_JSON, "dport", NULL, ntohs(dport)); - - print_bool(PRINT_JSON, - "csum", - NULL, - flags & TUNNEL_ENCAP_FLAG_CSUM); - - print_bool(PRINT_JSON, - "csum6", - NULL, - flags & TUNNEL_ENCAP_FLAG_CSUM6); - - print_bool(PRINT_JSON, - "remcsum", - NULL, - flags & TUNNEL_ENCAP_FLAG_REMCSUM); - - close_json_object(); - } else { - if (sport == 0) - fputs("encap-sport auto ", f); - else - fprintf(f, "encap-sport %u", ntohs(sport)); - - fprintf(f, "encap-dport %u ", ntohs(dport)); - - if (flags & TUNNEL_ENCAP_FLAG_CSUM) - fputs("encap-csum ", f); - else - fputs("noencap-csum ", f); - - if (flags & TUNNEL_ENCAP_FLAG_CSUM6) - fputs("encap-csum6 ", f); - else - fputs("noencap-csum6 ", f); - - if (flags & TUNNEL_ENCAP_FLAG_REMCSUM) - fputs("encap-remcsum ", f); - else - fputs("noencap-remcsum ", f); - } - } + tnl_print_encap(tb, + IFLA_GRE_ENCAP_TYPE, + IFLA_GRE_ENCAP_FLAGS, + IFLA_GRE_ENCAP_SPORT, + IFLA_GRE_ENCAP_DPORT); } static void gre_print_help(struct link_util *lu, int argc, char **argv, diff --cc ip/link_gre6.c index bc33026c3,29ca3d137..a0eeb5a63 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@@ -587,91 -513,16 +568,80 @@@ static void gre_print_opt(struct link_u if (tb[IFLA_GRE_ERSPAN_INDEX]) { __u32 erspan_idx = rta_getattr_u32(tb[IFLA_GRE_ERSPAN_INDEX]); + print_uint(PRINT_ANY, "erspan_index", "erspan_index %u ", erspan_idx); + } + + if (tb[IFLA_GRE_ERSPAN_VER]) { + __u8 erspan_ver = rta_getattr_u8(tb[IFLA_GRE_ERSPAN_VER]); + + print_uint(PRINT_ANY, "erspan_ver", "erspan_ver %u ", erspan_ver); + } + + if (tb[IFLA_GRE_ERSPAN_DIR]) { + __u8 erspan_dir = rta_getattr_u8(tb[IFLA_GRE_ERSPAN_DIR]); + + if (erspan_dir == 0) + print_string(PRINT_ANY, "erspan_dir", + "erspan_dir ingress ", NULL); + else + print_string(PRINT_ANY, "erspan_dir", + "erspan_dir egress ", NULL); + } - print_uint(PRINT_ANY, - "erspan_index", "erspan_index %u ", erspan_idx); + if (tb[IFLA_GRE_ERSPAN_HWID]) { + __u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]); + + print_hex(PRINT_ANY, "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid); + } + + if (tb[IFLA_GRE_ENCAP_TYPE] && + rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]) != TUNNEL_ENCAP_NONE) { + __u16 type = rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]); + __u16 flags = rta_getattr_u16(tb[IFLA_GRE_ENCAP_FLAGS]); + __u16 sport = rta_getattr_u16(tb[IFLA_GRE_ENCAP_SPORT]); + __u16 dport = rta_getattr_u16(tb[IFLA_GRE_ENCAP_DPORT]); + + open_json_object("encap"); + + print_string(PRINT_FP, NULL, "encap ", NULL); + switch (type) { + case TUNNEL_ENCAP_FOU: + print_string(PRINT_ANY, "type", "%s ", "fou"); + break; + case TUNNEL_ENCAP_GUE: + print_string(PRINT_ANY, "type", "%s ", "gue"); + break; + default: + print_null(PRINT_ANY, "type", "unknown ", NULL); + break; + } + + if (is_json_context()) { + print_uint(PRINT_JSON, + "sport", + NULL, + sport ? ntohs(sport) : 0); + print_uint(PRINT_JSON, "dport", NULL, ntohs(dport)); + print_bool(PRINT_JSON, "csum", NULL, + flags & TUNNEL_ENCAP_FLAG_CSUM); + print_bool(PRINT_JSON, "csum6", NULL, + flags & TUNNEL_ENCAP_FLAG_CSUM6); + print_bool(PRINT_JSON, "remcsum", NULL, + flags & TUNNEL_ENCAP_FLAG_REMCSUM); + close_json_object(); + } else { + if (sport == 0) + fputs("encap-sport auto ", f); + else + fprintf(f, "encap-sport %u", ntohs(sport)); - - fprintf(f, "encap-dport %u ", ntohs(dport)); - - if (flags & TUNNEL_ENCAP_FLAG_CSUM) - fputs("encap-csum ", f); - else - fputs("noencap-csum ", f); - - if (flags & TUNNEL_ENCAP_FLAG_CSUM6) - fputs("encap-csum6 ", f); - else - fputs("noencap-csum6 ", f); - - if (flags & TUNNEL_ENCAP_FLAG_REMCSUM) - fputs("encap-remcsum ", f); - else - fputs("noencap-remcsum ", f); + } } + + tnl_print_encap(tb, + IFLA_GRE_ENCAP_TYPE, + IFLA_GRE_ENCAP_FLAGS, + IFLA_GRE_ENCAP_SPORT, + IFLA_GRE_ENCAP_DPORT); } static void gre_print_help(struct link_util *lu, int argc, char **argv,