diff --git a/include/utils.h b/include/utils.h index 915c82e9..6080b962 100644 --- a/include/utils.h +++ b/include/utils.h @@ -74,6 +74,9 @@ struct ipx_addr { #ifndef AF_MPLS # define AF_MPLS 28 #endif +#ifndef IPPROTO_MPLS +#define IPPROTO_MPLS 137 +#endif __u32 get_addr32(const char *name); int get_addr_1(inet_prefix *dst, const char *arg, int family); diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c index 2f74d9b7..cf3a9ef4 100644 --- a/ip/link_iptnl.c +++ b/ip/link_iptnl.c @@ -16,6 +16,7 @@ #include #include +#include #include #include #include "rt_names.h" @@ -47,9 +48,8 @@ static void print_usage(FILE *f, int sit) type ); if (sit) { - fprintf(f, - " [ mode { ip6ip | ipip | any } ]\n" - " [ isatap ]\n"); + fprintf(f, " [ mode { ip6ip | ipip | mplsip | any } ]\n"); + fprintf(f, " [ isatap ]\n"); } fprintf(f, " [ external ]\n"); fprintf(f, " [ fwmark MARK ]\n"); @@ -243,6 +243,9 @@ get_failed: strcmp(*argv, "ipip") == 0 || strcmp(*argv, "ip4ip4") == 0) proto = IPPROTO_IPIP; + else if (strcmp(*argv, "mpls/ipv4") == 0 || + strcmp(*argv, "mplsip") == 0) + proto = IPPROTO_MPLS; else if (strcmp(*argv, "any/ipv4") == 0 || strcmp(*argv, "any") == 0) proto = 0; diff --git a/ip/tunnel.c b/ip/tunnel.c index 7956d71a..d359eb95 100644 --- a/ip/tunnel.c +++ b/ip/tunnel.c @@ -54,6 +54,9 @@ const char *tnl_strproto(__u8 proto) case IPPROTO_ESP: strcpy(buf, "esp"); break; + case IPPROTO_MPLS: + strcpy(buf, "mpls"); + break; case 0: strcpy(buf, "any"); break; diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in index 3cc2f5dc..994b539e 100644 --- a/man/man8/ip-link.8.in +++ b/man/man8/ip-link.8.in @@ -662,7 +662,7 @@ the following additional arguments are supported: ] [ .I " [no]encap-remcsum " ] [ -.I " mode " { ip6ip | ipip | any } " +.I " mode " { ip6ip | ipip | mplsip | any } " ] .in +8 @@ -700,10 +700,11 @@ encapsulation. applicable for Generic UDP Encapsulation. .sp -.BI mode " { ip6ip | ipip | any } " +.BI mode " { ip6ip | ipip | mplsip | any } " - specifies mode in which device should run. "ip6ip" indicates -IPv6-Over-IPv4, "ipip" indicates "IPv4-Over-IPv4", "any" indicates either -IPv6 or IPv4 Over IPv4. Only supported for SIT where the default is "ip6ip". +IPv6-Over-IPv4, "ipip" indicates "IPv4-Over-IPv4", "mplsip" indicates +MPLS-Over-IPv4, "any" indicates IPv6, IPv4 or MPLS Over IPv4. Only +supported for SIT where the default is "ip6ip". .in -8