diff options
author | Paolo Abeni <pabeni@redhat.com> | 2015-12-18 10:50:37 +0100 |
---|---|---|
committer | Stephen Hemminger <shemming@brocade.com> | 2015-12-18 11:40:32 -0800 |
commit | 926b39e1feffdacff52fe8b7eafe0ba3b8c9ff59 (patch) | |
tree | ea91c4c679252e75c6c25e30ddfdb37931237dd6 | |
parent | e79c327edddba0f1f70528ab4cf8ce37227054a6 (diff) | |
download | android_external_iproute2-926b39e1feffdacff52fe8b7eafe0ba3b8c9ff59.tar.gz android_external_iproute2-926b39e1feffdacff52fe8b7eafe0ba3b8c9ff59.tar.bz2 android_external_iproute2-926b39e1feffdacff52fe8b7eafe0ba3b8c9ff59.zip |
gre: add support for collect metadata flag
This patch add support for IFLA_GRE_COLLECT_METADATA via the
'external' keyword to the gre link.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-rw-r--r-- | ip/link_gre.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/ip/link_gre.c b/ip/link_gre.c index 58f416c..c85741f 100644 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@ -74,6 +74,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv, __u16 encapflags = 0; __u16 encapsport = 0; __u16 encapdport = 0; + __u8 metadata = 0; if (!(n->nlmsg_flags & NLM_F_CREATE)) { memset(&req, 0, sizeof(req)); @@ -148,6 +149,9 @@ get_failed: encapsport = rta_getattr_u16(greinfo[IFLA_GRE_ENCAP_SPORT]); if (greinfo[IFLA_GRE_ENCAP_DPORT]) encapdport = rta_getattr_u16(greinfo[IFLA_GRE_ENCAP_DPORT]); + + if (greinfo[IFLA_GRE_COLLECT_METADATA]) + metadata = 1; } while (argc > 0) { @@ -291,6 +295,8 @@ get_failed: encapflags |= TUNNEL_ENCAP_FLAG_REMCSUM; } else if (strcmp(*argv, "noencap-remcsum") == 0) { encapflags |= ~TUNNEL_ENCAP_FLAG_REMCSUM; + } else if (strcmp(*argv, "external") == 0) { + metadata = 1; } else usage(); argc--; argv++; @@ -325,6 +331,8 @@ get_failed: addattr16(n, 1024, IFLA_GRE_ENCAP_FLAGS, encapflags); addattr16(n, 1024, IFLA_GRE_ENCAP_SPORT, htons(encapsport)); addattr16(n, 1024, IFLA_GRE_ENCAP_DPORT, htons(encapdport)); + if (metadata) + addattr_l(n, 1024, IFLA_GRE_COLLECT_METADATA, NULL, 0); return 0; } @@ -413,6 +421,9 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (oflags & GRE_CSUM) fputs("ocsum ", f); + if (tb[IFLA_GRE_COLLECT_METADATA]) + fputs("external ", f); + if (tb[IFLA_GRE_ENCAP_TYPE] && *(__u16 *)RTA_DATA(tb[IFLA_GRE_ENCAP_TYPE]) != TUNNEL_ENCAP_NONE) { __u16 type = rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]); |