Skip to content

Commit 503e244

Browse files
committed
isisd, lib: add some codepoints usually shared with other vendors
Some codepoints can not be read by interoperating with CISCO. This is because PSP/USP flavor are used by default, and the display of the isis output has to be adapted. Signed-off-by: Philippe Guibert <[email protected]>
1 parent 92b8e14 commit 503e244

File tree

4 files changed

+122
-1
lines changed

4 files changed

+122
-1
lines changed

isisd/isis_zebra.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -998,6 +998,14 @@ void isis_zebra_srv6_sid_install(struct isis_area *area,
998998
case SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID:
999999
case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID:
10001000
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
1001+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
1002+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
1003+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
1004+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
1005+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
1006+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
1007+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
1008+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
10011009
default:
10021010
zlog_err(
10031011
"ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u",
@@ -1055,6 +1063,14 @@ void isis_zebra_srv6_sid_uninstall(struct isis_area *area,
10551063
case SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID:
10561064
case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID:
10571065
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
1066+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
1067+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
1068+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
1069+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
1070+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
1071+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
1072+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
1073+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
10581074
default:
10591075
zlog_err(
10601076
"ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u",
@@ -1120,6 +1136,14 @@ void isis_zebra_srv6_adj_sid_install(struct srv6_adjacency *sra)
11201136
case SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID:
11211137
case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID:
11221138
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
1139+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
1140+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
1141+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
1142+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
1143+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
1144+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
1145+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
1146+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
11231147
default:
11241148
zlog_err(
11251149
"ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u",
@@ -1166,6 +1190,14 @@ void isis_zebra_srv6_adj_sid_uninstall(struct srv6_adjacency *sra)
11661190
case SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID:
11671191
case SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID:
11681192
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
1193+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
1194+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
1195+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
1196+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
1197+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
1198+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
1199+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
1200+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
11691201
default:
11701202
zlog_err(
11711203
"ISIS-SRv6 (%s): unsupported SRv6 endpoint behavior %u",

lib/srv6.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,12 +176,20 @@ struct srv6_locator_chunk {
176176
enum srv6_endpoint_behavior_codepoint {
177177
SRV6_ENDPOINT_BEHAVIOR_RESERVED = 0x0000,
178178
SRV6_ENDPOINT_BEHAVIOR_END = 0x0001,
179+
SRV6_ENDPOINT_BEHAVIOR_END_PSP = 0x0002,
179180
SRV6_ENDPOINT_BEHAVIOR_END_X = 0x0005,
181+
SRV6_ENDPOINT_BEHAVIOR_END_X_PSP = 0x0006,
180182
SRV6_ENDPOINT_BEHAVIOR_END_DT6 = 0x0012,
181183
SRV6_ENDPOINT_BEHAVIOR_END_DT4 = 0x0013,
182184
SRV6_ENDPOINT_BEHAVIOR_END_DT46 = 0x0014,
185+
SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD = 0x001D,
186+
SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD = 0x0021,
183187
SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID = 0x002B,
184-
SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID = 0x002C,
188+
SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID = 0x0034,
189+
SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP = 0x002C,
190+
SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD = 0x0030,
191+
SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP = 0x0035,
192+
SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD = 0x0039,
185193
SRV6_ENDPOINT_BEHAVIOR_END_DT6_USID = 0x003E,
186194
SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID = 0x003F,
187195
SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID = 0x0040,
@@ -199,8 +207,16 @@ srv6_endpoint_behavior_codepoint2str(enum srv6_endpoint_behavior_codepoint behav
199207
return "Reserved";
200208
case SRV6_ENDPOINT_BEHAVIOR_END:
201209
return "End";
210+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
211+
return "End PSP";
212+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
213+
return "End PSP/USD";
202214
case SRV6_ENDPOINT_BEHAVIOR_END_X:
203215
return "End.X";
216+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
217+
return "End.X PSP";
218+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
219+
return "End.X PSP/USD";
204220
case SRV6_ENDPOINT_BEHAVIOR_END_DT6:
205221
return "End.DT6";
206222
case SRV6_ENDPOINT_BEHAVIOR_END_DT4:
@@ -209,8 +225,16 @@ srv6_endpoint_behavior_codepoint2str(enum srv6_endpoint_behavior_codepoint behav
209225
return "End.DT46";
210226
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
211227
return "uN";
228+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
229+
return "uN PSP";
230+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
231+
return "uN PSP/USD";
212232
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
213233
return "uA";
234+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
235+
return "uA PSP";
236+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
237+
return "uA PSP/USD";
214238
case SRV6_ENDPOINT_BEHAVIOR_END_DT6_USID:
215239
return "uDT6";
216240
case SRV6_ENDPOINT_BEHAVIOR_END_DT4_USID:

staticd/static_vty.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,9 +1696,21 @@ static void srv6_sid_cli_show(struct vty *vty, const struct lyd_node *sid, bool
16961696
case SRV6_ENDPOINT_BEHAVIOR_END:
16971697
vty_out(vty, " behavior End");
16981698
break;
1699+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
1700+
vty_out(vty, " behavior End PSP");
1701+
break;
1702+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
1703+
vty_out(vty, " behavior End PSP/USD");
1704+
break;
16991705
case SRV6_ENDPOINT_BEHAVIOR_END_X:
17001706
vty_out(vty, " behavior End.X");
17011707
break;
1708+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
1709+
vty_out(vty, " behavior End.X PSP");
1710+
break;
1711+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
1712+
vty_out(vty, " behavior End.X PSP/USD");
1713+
break;
17021714
case SRV6_ENDPOINT_BEHAVIOR_END_DT6:
17031715
vty_out(vty, " behavior End.DT6");
17041716
break;
@@ -1711,9 +1723,21 @@ static void srv6_sid_cli_show(struct vty *vty, const struct lyd_node *sid, bool
17111723
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
17121724
vty_out(vty, " behavior uN");
17131725
break;
1726+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
1727+
vty_out(vty, " behavior uN PSP");
1728+
break;
1729+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
1730+
vty_out(vty, " behavior uN PSP/USD");
1731+
break;
17141732
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
17151733
vty_out(vty, " behavior uA");
17161734
break;
1735+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
1736+
vty_out(vty, " behavior uA PSP");
1737+
break;
1738+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
1739+
vty_out(vty, " behavior uA PSP/USD");
1740+
break;
17171741
case SRV6_ENDPOINT_BEHAVIOR_END_DT6_USID:
17181742
vty_out(vty, " behavior uDT6");
17191743
break;

staticd/static_zebra.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,9 +628,20 @@ void static_zebra_srv6_sid_install(struct static_srv6_sid *sid)
628628
}
629629

630630
switch (sid->behavior) {
631+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
632+
action = ZEBRA_SEG6_LOCAL_ACTION_END;
633+
SET_SRV6_FLV_OP(ctx.flv.flv_ops, ZEBRA_SEG6_LOCAL_FLV_OP_PSP);
634+
break;
631635
case SRV6_ENDPOINT_BEHAVIOR_END:
632636
action = ZEBRA_SEG6_LOCAL_ACTION_END;
633637
break;
638+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
639+
action = ZEBRA_SEG6_LOCAL_ACTION_END;
640+
SET_SRV6_FLV_OP(ctx.flv.flv_ops, ZEBRA_SEG6_LOCAL_FLV_OP_NEXT_CSID);
641+
SET_SRV6_FLV_OP(ctx.flv.flv_ops, ZEBRA_SEG6_LOCAL_FLV_OP_PSP);
642+
ctx.flv.lcblock_len = sid->locator->block_bits_length;
643+
ctx.flv.lcnode_func_len = sid->locator->node_bits_length;
644+
break;
634645
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
635646
action = ZEBRA_SEG6_LOCAL_ACTION_END;
636647
SET_SRV6_FLV_OP(ctx.flv.flv_ops, ZEBRA_SEG6_LOCAL_FLV_OP_NEXT_CSID);
@@ -688,8 +699,14 @@ void static_zebra_srv6_sid_install(struct static_srv6_sid *sid)
688699
return;
689700
}
690701
break;
702+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
703+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
691704
case SRV6_ENDPOINT_BEHAVIOR_END_X:
705+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
706+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
692707
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
708+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
709+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
693710
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
694711
case SRV6_ENDPOINT_BEHAVIOR_RESERVED:
695712
zlog_warn("unsupported behavior: %u", sid->behavior);
@@ -738,7 +755,9 @@ void static_zebra_srv6_sid_uninstall(struct static_srv6_sid *sid)
738755

739756
switch (sid->behavior) {
740757
case SRV6_ENDPOINT_BEHAVIOR_END:
758+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
741759
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
760+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
742761
break;
743762
case SRV6_ENDPOINT_BEHAVIOR_END_DT6:
744763
case SRV6_ENDPOINT_BEHAVIOR_END_DT6_USID:
@@ -785,8 +804,14 @@ void static_zebra_srv6_sid_uninstall(struct static_srv6_sid *sid)
785804
return;
786805
}
787806
break;
807+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
808+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
788809
case SRV6_ENDPOINT_BEHAVIOR_END_X:
810+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
811+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
789812
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
813+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
814+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
790815
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
791816
case SRV6_ENDPOINT_BEHAVIOR_RESERVED:
792817
zlog_warn("unsupported behavior: %u", sid->behavior);
@@ -826,7 +851,9 @@ extern void static_zebra_request_srv6_sid(struct static_srv6_sid *sid)
826851
/* convert `srv6_endpoint_behavior_codepoint` to `seg6local_action_t` */
827852
switch (sid->behavior) {
828853
case SRV6_ENDPOINT_BEHAVIOR_END:
854+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
829855
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
856+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
830857
ctx.behavior = ZEBRA_SEG6_LOCAL_ACTION_END;
831858
break;
832859
case SRV6_ENDPOINT_BEHAVIOR_END_DT6:
@@ -868,8 +895,14 @@ extern void static_zebra_request_srv6_sid(struct static_srv6_sid *sid)
868895
}
869896

870897
break;
898+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
899+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
871900
case SRV6_ENDPOINT_BEHAVIOR_END_X:
901+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
902+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
872903
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
904+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
905+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
873906
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
874907
case SRV6_ENDPOINT_BEHAVIOR_RESERVED:
875908
zlog_warn("unsupported behavior: %u", sid->behavior);
@@ -894,7 +927,9 @@ extern void static_zebra_release_srv6_sid(struct static_srv6_sid *sid)
894927
/* convert `srv6_endpoint_behavior_codepoint` to `seg6local_action_t` */
895928
switch (sid->behavior) {
896929
case SRV6_ENDPOINT_BEHAVIOR_END:
930+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
897931
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
932+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
898933
ctx.behavior = ZEBRA_SEG6_LOCAL_ACTION_END;
899934
break;
900935
case SRV6_ENDPOINT_BEHAVIOR_END_DT6:
@@ -936,8 +971,14 @@ extern void static_zebra_release_srv6_sid(struct static_srv6_sid *sid)
936971
}
937972

938973
break;
974+
case SRV6_ENDPOINT_BEHAVIOR_END_PSP_USD:
975+
case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP_USD:
939976
case SRV6_ENDPOINT_BEHAVIOR_END_X:
977+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP:
978+
case SRV6_ENDPOINT_BEHAVIOR_END_X_PSP_USD:
940979
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID:
980+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP:
981+
case SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID_PSP_USD:
941982
case SRV6_ENDPOINT_BEHAVIOR_OPAQUE:
942983
case SRV6_ENDPOINT_BEHAVIOR_RESERVED:
943984
zlog_warn("unsupported behavior: %u", sid->behavior);

0 commit comments

Comments
 (0)