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;
+ }
}
/**