Skip to content

Commit

Permalink
Merge pull request #17964 from cscarpitta/fix/fix-srv6-sid-manager
Browse files Browse the repository at this point in the history
Fix SRv6 SID Manager
  • Loading branch information
ton31337 authored Feb 2, 2025
2 parents 43a0445 + 339c49b commit 91ebab3
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 3 deletions.
35 changes: 35 additions & 0 deletions tests/topotests/static_srv6_sids/expected_srv6_sids.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,39 @@
{
"fcbb:bbbb:1::/48": [
{
"prefix": "fcbb:bbbb:1::/48",
"prefixLen": 48,
"protocol": "static",
"vrfId": 0,
"vrfName": "default",
"selected": true,
"destSelected": true,
"distance": 1,
"metric": 0,
"installed": true,
"table": 254,
"internalStatus": 16,
"internalFlags": 9,
"internalNextHopNum": 1,
"internalNextHopActiveNum": 1,
"nexthops": [
{
"flags": 3,
"fib": true,
"directlyConnected": true,
"interfaceName": "sr0",
"active": true,
"weight": 1,
"seg6local": {
"action": "End"
},
"seg6localContext": {

}
}
]
}
],
"fcbb:bbbb:1:fe10::/64": [
{
"prefix": "fcbb:bbbb:1:fe10::/64",
Expand Down
1 change: 1 addition & 0 deletions tests/topotests/static_srv6_sids/r1/frr.conf
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ segment-routing
!
!
static-sids
sid fcbb:bbbb:1::/48 locator MAIN behavior uN
sid fcbb:bbbb:1:fe10::/64 locator MAIN behavior uDT4 vrf Vrf10
sid fcbb:bbbb:1:fe20::/64 locator MAIN behavior uDT6 vrf Vrf20
sid fcbb:bbbb:1:fe30::/64 locator MAIN behavior uDT46 vrf Vrf30
Expand Down
23 changes: 20 additions & 3 deletions zebra/zebra_srv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -1547,9 +1547,26 @@ static int get_srv6_sid_explicit(struct zebra_srv6_sid **sid,
}

if (ctx->behavior == ZEBRA_SEG6_LOCAL_ACTION_END) {
zlog_err("%s: invalid SM request arguments: explicit SID allocation not allowed for End/uN behavior",
__func__);
return -1;
zctx = zebra_srv6_sid_ctx_alloc();
zctx->ctx = *ctx;

*sid = zebra_srv6_sid_alloc(zctx, sid_value, locator, block, sid_func,
SRV6_SID_ALLOC_MODE_EXPLICIT);
if (!(*sid)) {
flog_err(EC_ZEBRA_SM_CANNOT_ASSIGN_SID,
"%s: failed to create SRv6 SID %s (%pI6)", __func__,
srv6_sid_ctx2str(buf, sizeof(buf), ctx), sid_value);
return -1;
}
(*sid)->ctx = zctx;
zctx->sid = *sid;
listnode_add(srv6->sids, zctx);

if (IS_ZEBRA_DEBUG_SRV6)
zlog_debug("%s: allocated explicit SRv6 SID %pI6 for context %s", __func__,
&(*sid)->value, srv6_sid_ctx2str(buf, sizeof(buf), ctx));

return 1;
}

/* Allocate an explicit SID function for the SID */
Expand Down

0 comments on commit 91ebab3

Please sign in to comment.