bool bfd_multi_hop;
const char *bfd_source;
const char *bfd_profile;
+
+ const char *srv6_encap_behavior;
};
static int static_route_nb_run(struct vty *vty, struct static_route_args *args)
char xpath_label[XPATH_MAXLEN];
char xpath_segs[XPATH_MAXLEN];
char xpath_seg[XPATH_MAXLEN];
+ char xpath_srv6_encap_behavior[XPATH_MAXLEN];
char ab_xpath[XPATH_MAXLEN];
char buf_prefix[PREFIX_STRLEN];
char buf_src_prefix[PREFIX_STRLEN] = "::/0";
uint32_t table_id = 0;
const struct lyd_node *dnode;
const struct lyd_node *vrf_dnode;
+ const char *srv6_encap_behavior = "ietf-srv6-types:H.Encaps";
if (args->xpath_vrf) {
vrf_dnode = yang_dnode_get(vty->candidate_config->dnode,
NB_OP_MODIFY, nump);
segs_stack_id++;
}
+
+ strlcpy(xpath_srv6_encap_behavior, xpath_segs,
+ sizeof(xpath_srv6_encap_behavior));
+ strlcat(xpath_srv6_encap_behavior,
+ FRR_STATIC_ROUTE_NH_SRV6_ENCAP_BEHAVIOR_XPATH,
+ sizeof(xpath_srv6_encap_behavior));
+
+ if (args->srv6_encap_behavior) {
+ if (strmatch(args->srv6_encap_behavior, "H_Encaps")) {
+ srv6_encap_behavior = "ietf-srv6-types:H.Encaps";
+ } else if (strmatch(args->srv6_encap_behavior, "H_Encaps_Red")) {
+ srv6_encap_behavior = "ietf-srv6-types:H.Encaps.Red";
+ } else {
+ vty_out(vty, "%% Unsupported encap behavior: %s\n",
+ args->srv6_encap_behavior);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ nb_cli_enqueue_change(vty, xpath_srv6_encap_behavior, NB_OP_MODIFY,
+ srv6_encap_behavior);
} else {
strlcpy(xpath_segs, xpath_nexthop, sizeof(xpath_segs));
strlcat(xpath_segs, FRR_STATIC_ROUTE_NH_SRV6_SEGS_XPATH,
|onlink$onlink \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source A.B.C.D$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IP_STR
"Establish static routes\n"
BFD_PROFILE_STR
BFD_PROFILE_NAME_STR
"Steer this route over an SRv6 SID list\n"
- "SRv6 SID list\n")
+ "SRv6 SID list\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);
|onlink$onlink \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source A.B.C.D$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IP_STR
"Establish static routes\n"
BFD_PROFILE_STR
BFD_PROFILE_NAME_STR
"Steer this route over an SRv6 SID list\n"
- "SRv6 SID list\n")
+ "SRv6 SID list\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);
|nexthop-vrf NAME \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source A.B.C.D$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IP_STR
"Establish static routes\n"
BFD_PROFILE_STR
BFD_PROFILE_NAME_STR
"Steer this route over an SRv6 SID list\n"
- "SRv6 SID list\n")
+ "SRv6 SID list\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);
|nexthop-vrf NAME \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source A.B.C.D$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IP_STR
"Establish static routes\n"
BFD_PROFILE_STR
BFD_PROFILE_NAME_STR
"Steer this route over an SRv6 SID list\n"
- "SRv6 SID list\n")
+ "SRv6 SID list\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);
|onlink$onlink \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source X:X::X:X$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IPV6_STR
"Establish static routes\n"
BFD_INTEGRATION_MULTI_HOP_STR BFD_INTEGRATION_SOURCE_STR
BFD_INTEGRATION_SOURCEV4_STR BFD_PROFILE_STR
BFD_PROFILE_NAME_STR "Value of segs\n"
- "Segs (SIDs)\n")
+ "Segs (SIDs)\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);
|onlink$onlink \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source X:X::X:X$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IPV6_STR
"Establish static routes\n"
BFD_INTEGRATION_MULTI_HOP_STR BFD_INTEGRATION_SOURCE_STR
BFD_INTEGRATION_SOURCEV4_STR BFD_PROFILE_STR
BFD_PROFILE_NAME_STR "Value of segs\n"
- "Segs (SIDs)\n")
+ "Segs (SIDs)\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);
|nexthop-vrf NAME \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source X:X::X:X$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IPV6_STR
"Establish static routes\n"
BFD_INTEGRATION_MULTI_HOP_STR BFD_INTEGRATION_SOURCE_STR
BFD_INTEGRATION_SOURCEV4_STR BFD_PROFILE_STR
BFD_PROFILE_NAME_STR "Value of segs\n"
- "Segs (SIDs)\n")
+ "Segs (SIDs)\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
|nexthop-vrf NAME \
|color (1-4294967295) \
|bfd$bfd [{multi-hop$bfd_multi_hop|source X:X::X:X$bfd_source|profile BFDPROF$bfd_profile}] \
- |segments WORD \
+ |segments WORD [encap-behavior <H_Encaps|H_Encaps_Red>$encap_behavior] \
}]",
NO_STR IPV6_STR
"Establish static routes\n"
BFD_INTEGRATION_MULTI_HOP_STR BFD_INTEGRATION_SOURCE_STR
BFD_INTEGRATION_SOURCEV4_STR BFD_PROFILE_STR
BFD_PROFILE_NAME_STR "Value of segs\n"
- "Segs (SIDs)\n")
+ "Segs (SIDs)\n"
+ "Configure SRv6 encap mode\n"
+ "H.Encaps\n"
+ "H.Encaps.Red\n")
{
struct static_route_args args = {
.delete = !!no,
.bfd_source = bfd_source_str,
.bfd_profile = bfd_profile,
.segs = segments,
+ .srv6_encap_behavior = encap_behavior,
};
return static_route_nb_run(vty, &args);