From 27fa9ac4dbae5e9797528e8e261455d8087db0ce Mon Sep 17 00:00:00 2001 From: Philippe Guibert Date: Mon, 7 Apr 2025 12:35:31 +0200 Subject: [PATCH] lib, staticd, isisd: add B6.Encaps codepoint extensions Add codepoint extensions for END.B6.Encaps instruction. Signed-off-by: Philippe Guibert --- isisd/isis_zebra.c | 16 ++++++++++++++++ lib/srv6.h | 12 ++++++++++++ staticd/static_vty.c | 12 ++++++++++++ staticd/static_zebra.c | 16 ++++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index cb729501cc..9d483c9368 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -1007,6 +1007,10 @@ void isis_zebra_srv6_sid_install(struct isis_area *area, case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: default: zlog_err( "ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u", @@ -1072,6 +1076,10 @@ void isis_zebra_srv6_sid_uninstall(struct isis_area *area, case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: default: zlog_err( "ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u", @@ -1145,6 +1153,10 @@ void isis_zebra_srv6_adj_sid_install(struct srv6_adjacency *sra) case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: default: zlog_err( "ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u", @@ -1199,6 +1211,10 @@ void isis_zebra_srv6_adj_sid_uninstall(struct srv6_adjacency *sra) case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: default: zlog_err( "ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u", diff --git a/lib/srv6.h b/lib/srv6.h index 467f02a3c9..bd80253b55 100644 --- a/lib/srv6.h +++ b/lib/srv6.h @@ -179,9 +179,11 @@ enum srv6_endpoint_behavior_codepoint { SRV6_ENDPOINT_BEHAVIOR_END_PSP = 0x0002, SRV6_ENDPOINT_BEHAVIOR_END_X = 0x0005, SRV6_ENDPOINT_BEHAVIOR_END_X_PSP = 0x0006, + SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS = 0x000E, SRV6_ENDPOINT_BEHAVIOR_END_DT6 = 0x0012, SRV6_ENDPOINT_BEHAVIOR_END_DT4 = 0x0013, SRV6_ENDPOINT_BEHAVIOR_END_DT46 = 0x0014, + SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED = 0x001B, SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD = 0x001D, SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD = 0x0021, SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID = 0x002B, @@ -193,6 +195,8 @@ enum srv6_endpoint_behavior_codepoint { SRV6_ENDPOINT_BEHAVIOR_END_DT6_USID = 0x003E, SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID = 0x003F, SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID = 0x0040, + SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID = 0x005D, + SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID = 0x005E, SRV6_ENDPOINT_BEHAVIOR_OPAQUE = 0xFFFF, }; @@ -215,6 +219,8 @@ srv6_endpoint_behavior_codepoint2str(enum srv6_endpoint_behavior_codepoint behav return "End.X"; case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP: return "End.X PSP"; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + return "End.B6.Encaps"; case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: return "End.X PSP/USD"; case SRV6_ENDPOINT_BEHAVIOR_END_DT6: @@ -223,6 +229,8 @@ srv6_endpoint_behavior_codepoint2str(enum srv6_endpoint_behavior_codepoint behav return "End.DT4"; case SRV6_ENDPOINT_BEHAVIOR_END_DT46: return "End.DT46"; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + return "End.B6.Encaps.Red"; case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID: return "uN"; case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP: @@ -241,6 +249,10 @@ srv6_endpoint_behavior_codepoint2str(enum srv6_endpoint_behavior_codepoint behav return "uDT4"; case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID: return "uDT46"; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + return "uB6.Encaps"; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: + return "uB6.Encaps.Red"; case SRV6_ENDPOINT_BEHAVIOR_OPAQUE: return "Opaque"; } diff --git a/staticd/static_vty.c b/staticd/static_vty.c index ffa90d5352..6fc4f067d9 100644 --- a/staticd/static_vty.c +++ b/staticd/static_vty.c @@ -1752,6 +1752,9 @@ static void srv6_sid_cli_show(struct vty *vty, const struct lyd_node *sid, bool case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP: vty_out(vty, " behavior End.X PSP"); break; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + vty_out(vty, " behavior End.B6.Encaps"); + break; case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: vty_out(vty, " behavior End.X PSP/USD"); break; @@ -1764,6 +1767,9 @@ static void srv6_sid_cli_show(struct vty *vty, const struct lyd_node *sid, bool case SRV6_ENDPOINT_BEHAVIOR_END_DT46: vty_out(vty, " behavior End.DT46"); break; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + vty_out(vty, " behavior End.B6.Encaps.Red"); + break; case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID: vty_out(vty, " behavior uN"); break; @@ -1791,6 +1797,12 @@ static void srv6_sid_cli_show(struct vty *vty, const struct lyd_node *sid, bool case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID: vty_out(vty, " behavior uDT46"); break; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + vty_out(vty, " behavior uB6.Encaps"); + break; + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: + vty_out(vty, " behavior uB6.Encaps.Red"); + break; case SRV6_ENDPOINT_BEHAVIOR_RESERVED: case SRV6_ENDPOINT_BEHAVIOR_OPAQUE: vty_out(vty, " behavior unknown"); diff --git a/staticd/static_zebra.c b/staticd/static_zebra.c index 714f4b89ea..f02fe1e95c 100644 --- a/staticd/static_zebra.c +++ b/staticd/static_zebra.c @@ -730,6 +730,10 @@ void static_zebra_srv6_sid_install(struct static_srv6_sid *sid) case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP: case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: case SRV6_ENDPOINT_BEHAVIOR_OPAQUE: case SRV6_ENDPOINT_BEHAVIOR_RESERVED: zlog_warn("unsupported behavior: %u", sid->behavior); @@ -853,6 +857,10 @@ void static_zebra_srv6_sid_uninstall(struct static_srv6_sid *sid) case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_OPAQUE: case SRV6_ENDPOINT_BEHAVIOR_RESERVED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: zlog_warn("unsupported behavior: %u", sid->behavior); break; } @@ -999,6 +1007,10 @@ extern void static_zebra_request_srv6_sid(struct static_srv6_sid *sid) case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_OPAQUE: case SRV6_ENDPOINT_BEHAVIOR_RESERVED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: zlog_warn("unsupported behavior: %u", sid->behavior); return; } @@ -1087,6 +1099,10 @@ extern void static_zebra_release_srv6_sid(struct static_srv6_sid *sid) case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD: case SRV6_ENDPOINT_BEHAVIOR_OPAQUE: case SRV6_ENDPOINT_BEHAVIOR_RESERVED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_NEXT_CSID: + case SRV6_ENDPOINT_BEHAVIOR_END_B6_ENCAPS_RED_NEXT_CSID: zlog_warn("unsupported behavior: %u", sid->behavior); return; } -- 2.39.5