iproute: Add support for ttl-propagation attribute

Add support for setting and displaying the ttl-propagation attribute
initially used by MPLS to control propagation of MPLS TTL to IPv4/IPv6
TTL/hop-limit on popping final label on a per-route basis.

Signed-off-by: Robert Shearman <rshearma@brocade.com>
Acked-by: David Ahern <dsa@cumulusnetworks.com>
This commit is contained in:
Robert Shearman 2017-04-11 09:37:20 +01:00 committed by Stephen Hemminger
parent 19beb1aa16
commit c44d18ea96
2 changed files with 31 additions and 1 deletions

View File

@ -77,6 +77,7 @@ static void usage(void)
fprintf(stderr, "NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]\n"); fprintf(stderr, "NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]\n");
fprintf(stderr, " [ table TABLE_ID ] [ proto RTPROTO ]\n"); fprintf(stderr, " [ table TABLE_ID ] [ proto RTPROTO ]\n");
fprintf(stderr, " [ scope SCOPE ] [ metric METRIC ]\n"); fprintf(stderr, " [ scope SCOPE ] [ metric METRIC ]\n");
fprintf(stderr, " [ ttl-propagate { enabled | disabled } ]\n");
fprintf(stderr, "INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...\n"); fprintf(stderr, "INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...\n");
fprintf(stderr, "NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ]\n"); fprintf(stderr, "NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ]\n");
fprintf(stderr, " [ dev STRING ] [ weight NUMBER ] NHFLAGS\n"); fprintf(stderr, " [ dev STRING ] [ weight NUMBER ] NHFLAGS\n");
@ -715,6 +716,13 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
fprintf(fp, "%u", pref); fprintf(fp, "%u", pref);
} }
} }
if (tb[RTA_TTL_PROPAGATE]) {
fprintf(fp, "ttl-propagate ");
if (rta_getattr_u8(tb[RTA_TTL_PROPAGATE]))
fprintf(fp, "enabled");
else
fprintf(fp, "disabled");
}
fprintf(fp, "\n"); fprintf(fp, "\n");
fflush(fp); fflush(fp);
return 0; return 0;
@ -1185,6 +1193,20 @@ static int iproute_modify(int cmd, unsigned int flags, int argc, char **argv)
if (rta->rta_len > RTA_LENGTH(0)) if (rta->rta_len > RTA_LENGTH(0))
addraw_l(&req.n, 1024, RTA_DATA(rta), RTA_PAYLOAD(rta)); addraw_l(&req.n, 1024, RTA_DATA(rta), RTA_PAYLOAD(rta));
} else if (strcmp(*argv, "ttl-propagate") == 0) {
__u8 ttl_prop;
NEXT_ARG();
if (matches(*argv, "enabled") == 0)
ttl_prop = 1;
else if (matches(*argv, "disabled") == 0)
ttl_prop = 0;
else
invarg("\"ttl-propagate\" value is invalid\n",
*argv);
addattr8(&req.n, sizeof(req), RTA_TTL_PROPAGATE,
ttl_prop);
} else { } else {
int type; int type;
inet_prefix dst; inet_prefix dst;

View File

@ -75,7 +75,9 @@ replace " } "
.B scope .B scope
.IR SCOPE " ] [ " .IR SCOPE " ] [ "
.B metric .B metric
.IR METRIC " ]" .IR METRIC " ] [ "
.B ttl-propagate
.RB "{ " enabled " | " disabled " } ]"
.ti -8 .ti -8
.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " [" .IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
@ -710,6 +712,12 @@ is a set of encapsulation attributes specific to the
the route will be deleted after the expires time. the route will be deleted after the expires time.
.B Only .B Only
support IPv6 at present. support IPv6 at present.
.TP
.BR ttl-propagate " { " enabled " | " disabled " } "
Control whether TTL should be propagated from any encap into the
un-encapsulated packet, overriding any global configuration. Only
supported for MPLS at present.
.RE .RE
.TP .TP