Commit f02c182edd for frr

commit f02c182eddee0ba76aa9cdd534a7a27472931e32
Author: Carmine Scarpitta <cscarpit@cisco.com>
Date:   Thu Sep 3 11:54:37 2026 +0200

    isisd: Advertise zero function length for uN SIDs

    According to RFC 9800 Section 5.3, a uN SID (End with NEXT-CSID)
    has a zero-length function field (FL = 0).

    RFC 9800 Section 5.3 states:

        The SID 2001:db8:b1:10:: bound to the End behavior with the
        NEXT-CSID flavor is instantiated from a GIB with:
        ...
        FL = 0
        ...

    Currently, the SID structure helper initializes uN SIDs with a
    function length equal to locator->function_bits_length, which is
    nonzero (typically 16). This is not compliant with RFC 9800.

    Fix the issue by setting func_len to zero for uN SIDs.

    Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>

diff --git a/isisd/isis_srv6.c b/isisd/isis_srv6.c
index 6434dc1816..b968c16c40 100644
--- a/isisd/isis_srv6.c
+++ b/isisd/isis_srv6.c
@@ -33,6 +33,41 @@ static void isis_srv6_sid_structure_init(struct isis_srv6_sid_structure *structu
 	structure->loc_node_len = locator->node_bits_length;
 	structure->func_len = locator->function_bits_length;
 	structure->arg_len = locator->argument_bits_length;
+
+	switch (behavior) {
+	/*
+	 * uN (End with NEXT-CSID) variants use no Function field (FL=0).
+	 * See RFC 9800, Section 5.3.
+	 */
+	case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
+	case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
+	case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
+		structure->func_len = 0;
+		break;
+
+	case SRV6_ENDPOINT_BEHAVIOR_RESERVED:
+	case SRV6_ENDPOINT_BEHAVIOR_END:
+	case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
+	case SRV6_ENDPOINT_BEHAVIOR_END_X:
+	case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
+	case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS:
+	case SRV6_ENDPOINT_BEHAVIOR_END_DT6:
+	case SRV6_ENDPOINT_BEHAVIOR_END_DT4:
+	case SRV6_ENDPOINT_BEHAVIOR_END_DT46:
+	case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED:
+	case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
+	case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
+	case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
+	case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
+	case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
+	case SRV6_ENDPOINT_BEHAVIOR_END_DT6_USID:
+	case SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID:
+	case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID:
+	case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID:
+	case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID:
+	case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
+		break;
+	}
 }

 /**