Commit a274a0c866 for frr

commit a274a0c86600892620224cbfc8139da71924ce48
Author: Carmine Scarpitta <cscarpit@cisco.com>
Date:   Tue Nov 10 16:26:02 2026 +0100

    zebra: Key SRv6 SID blocks by format and prefix

    A SID block is identified by its format and prefix. Include both in
    the block lookup key. Matching only the prefix can return a block
    initialized for a different format.

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

diff --git a/zebra/zebra_srv6.c b/zebra/zebra_srv6.c
index 4dfbb481f7..df9aecb28d 100644
--- a/zebra/zebra_srv6.c
+++ b/zebra/zebra_srv6.c
@@ -621,15 +621,15 @@ void delete_zebra_srv6_sid_block(void *val)
 	zebra_srv6_sid_block_free((struct zebra_srv6_sid_block *)val);
 }

-struct zebra_srv6_sid_block *
-zebra_srv6_sid_block_lookup(struct prefix_ipv6 *prefix)
+struct zebra_srv6_sid_block *zebra_srv6_sid_block_lookup(struct srv6_sid_format *format,
+							 struct prefix_ipv6 *prefix)
 {
 	struct zebra_srv6 *srv6 = zebra_srv6_get_default();
 	struct zebra_srv6_sid_block *block;
 	struct listnode *node;

 	for (ALL_LIST_ELEMENTS_RO(srv6->sid_blocks, node, block))
-		if (prefix_match(prefix, &block->prefix))
+		if (block->sid_format == format && prefix_match(prefix, &block->prefix))
 			return block;

 	return NULL;
@@ -679,7 +679,7 @@ void zebra_srv6_sid_locator_block_alloc(struct srv6_locator *locator)
 	apply_mask(&block_pfx_new);

 	/* Allocate the new parent block */
-	block_new = zebra_srv6_sid_block_lookup(&block_pfx_new);
+	block_new = zebra_srv6_sid_block_lookup(format, &block_pfx_new);
 	if (!block_new) {
 		block_new = zebra_srv6_sid_block_alloc(format, &block_pfx_new);
 		listnode_add(srv6->sid_blocks, block_new);
diff --git a/zebra/zebra_srv6.h b/zebra/zebra_srv6.h
index 4a7d108fa8..9a57e2cf89 100644
--- a/zebra/zebra_srv6.h
+++ b/zebra/zebra_srv6.h
@@ -324,8 +324,8 @@ zebra_srv6_sid_block_alloc(struct srv6_sid_format *format,
 			   struct prefix_ipv6 *prefix);
 extern void zebra_srv6_sid_block_free(struct zebra_srv6_sid_block *block);
 extern void delete_zebra_srv6_sid_block(void *val);
-extern struct zebra_srv6_sid_block *
-zebra_srv6_sid_block_lookup(struct prefix_ipv6 *prefix);
+extern struct zebra_srv6_sid_block *zebra_srv6_sid_block_lookup(struct srv6_sid_format *format,
+								struct prefix_ipv6 *prefix);
 void zebra_srv6_sid_locator_block_alloc(struct srv6_locator *locator);
 void zebra_srv6_sid_locator_block_release(struct srv6_locator *locator);