]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
seg6: add support for SRv6 Headend Reduced Encapsulation
authorPaolo Lungaroni <paolo.lungaroni@uniroma2.it>
Wed, 27 Jul 2022 18:59:15 +0000 (20:59 +0200)
committerDavid Ahern <dsahern@kernel.org>
Mon, 1 Aug 2022 15:15:07 +0000 (09:15 -0600)
This patch adds the support for the reduced version of the H.Encaps and
H.L2Encaps behaviors as defined in RFC 8986 [1].

H.Encaps.Red and H.L2Encaps.Red SRv6 behaviors are an optimization of the
H.Encaps and H.L2Encaps aiming to reduce the length of the SID List carried
in the pushed SRH. Specifically, the reduced version of the behaviors
removes the first SID contained in the SID List (i.e. SRv6 Policy) by
storing it into the IPv6 Destination Address. When SRv6 Policy is made of
only one SID, the reduced version of the behaviors omits the SRH at all and
pushes that SID directly into the IPv6 DA.

Some examples:
ip -6 route add 2001:db8::1 encap seg6 mode encap.red segs fcf0:1::e,fcf0:2::d6 dev eth0
ip -6 route add 2001:db8::2 encap seg6 mode l2encap.red segs fcf0:1::d2 dev eth0

Standard Output:
ip -6 route show 2001:db8::1
2001:db8::1  encap seg6 mode encap.red segs 2 [ fcf0:1::e fcf0:2::d6 ] dev eth0 metric 1024 pref medium

JSON Output:
ip -6 -j -p route show 2001:db8::1
[ {
        "dst": "2001:db8::1",
        "encap": "seg6",
        "mode": "encap.red",
        "segs": [ "fcf0:1::e","fcf0:2::d6" ],
        "dev": "eth0",
        "metric": 1024,
        "flags": [ ],
        "pref": "medium"
    } ]

[1] - https://datatracker.ietf.org/doc/html/rfc8986

Signed-off-by: Paolo Lungaroni <paolo.lungaroni@uniroma2.it>
Signed-off-by: David Ahern <dsahern@kernel.org>
ip/iproute.c
ip/iproute_lwtunnel.c
man/man8/ip-route.8.in

index 1447a5f78f492cd19c34d64811fa848f3ba6ecd2..a1cdf953bdab001e3962b12bc5d5e0cbd707a90c 100644 (file)
@@ -105,7 +105,7 @@ static void usage(void)
                "ENCAPTYPE := [ mpls | ip | ip6 | seg6 | seg6local | rpl | ioam6 ]\n"
                "ENCAPHDR := [ MPLSLABEL | SEG6HDR | SEG6LOCAL | IOAM6HDR ]\n"
                "SEG6HDR := [ mode SEGMODE ] segs ADDR1,ADDRi,ADDRn [hmac HMACKEYID] [cleanup]\n"
-               "SEGMODE := [ encap | inline ]\n"
+               "SEGMODE := [ encap | encap.red | inline | l2encap | l2encap.red ]\n"
                "SEG6LOCAL := action ACTION [ OPTIONS ] [ count ]\n"
                "ACTION := { End | End.X | End.T | End.DX2 | End.DX6 | End.DX4 |\n"
                "            End.DT6 | End.DT4 | End.DT46 | End.B6 | End.B6.Encaps |\n"
index f41922295f28027d2aa63f0f4b22c067b0638bf5..8ffca4f924caf21ebb7d0206ab05e1f672559c21 100644 (file)
@@ -135,6 +135,8 @@ static const char *seg6_mode_types[] = {
        [SEG6_IPTUN_MODE_INLINE]        = "inline",
        [SEG6_IPTUN_MODE_ENCAP]         = "encap",
        [SEG6_IPTUN_MODE_L2ENCAP]       = "l2encap",
+       [SEG6_IPTUN_MODE_ENCAP_RED]     = "encap.red",
+       [SEG6_IPTUN_MODE_L2ENCAP_RED]   = "l2encap.red",
 };
 
 static const char *format_seg6mode_type(int mode)
index 462ff269efc7f815c59adf8eae158f81f95f454f..7fad26972ceaca8a00349dac6bb3176cd3468737 100644 (file)
@@ -229,7 +229,7 @@ throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
 .IR ENCAP_SEG6 " := "
 .B seg6
 .BR mode " [ "
-.BR encap " | " inline " | " l2encap " ] "
+.BR encap " | " encap.red " | " inline " | " l2encap " | " l2encap.red " ] "
 .B segs
 .IR SEGMENTS " [ "
 .B hmac
@@ -807,10 +807,22 @@ is a set of encapsulation attributes specific to the
 - Encapsulate packet in an outer IPv6 header with SRH
 .sp
 
+.B mode encap.red
+- Encapsulate packet in an outer IPv6 header with SRH applying the
+reduced segment list. When there is only one segment and the HMAC is
+not present, the SRH is omitted.
+.sp
+
 .B mode l2encap
 - Encapsulate ingress L2 frame within an outer IPv6 header and SRH
 .sp
 
+.B mode l2encap.red
+- Encapsulate ingress L2 frame within an outer IPv6 header and SRH
+applying the reduced segment list. When there is only one segment
+and the HMAC is not present, the SRH is omitted.
+.sp
+
 .I SEGMENTS
 - List of comma-separated IPv6 addresses
 .sp