bgpd: add bgp link-state address-family configuration context

Add the bgp link-state configuration context cli:

> router bgp 65001
>  address-family link-state link-state
>   neighbor 192.0.2.2 activate
>  exit-address-family

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
Louis Scalbert 2023-02-09 14:11:49 +01:00
parent 3cf5ff2715
commit ae2f3bb5b4
5 changed files with 208 additions and 10 deletions

View File

@ -203,7 +203,22 @@ static enum node_type bgp_node_type(afi_t afi, safi_t safi)
case AFI_L2VPN:
return BGP_EVPN_NODE;
case AFI_LINKSTATE:
/* TODO */
switch (safi) {
case SAFI_LINKSTATE:
return BGP_LS_NODE;
case SAFI_LINKSTATE_VPN: /* Not yet supported */
case SAFI_UNICAST:
case SAFI_MULTICAST:
case SAFI_LABELED_UNICAST:
case SAFI_MPLS_VPN:
case SAFI_FLOWSPEC:
case SAFI_UNSPEC:
case SAFI_ENCAP:
case SAFI_EVPN:
case SAFI_MAX:
return BGP_IPV4_NODE;
}
break;
case AFI_UNSPEC:
case AFI_MAX:
// We should never be here but to clarify the switch statement..
@ -245,6 +260,11 @@ static const char *get_afi_safi_vty_str(afi_t afi, safi_t safi)
} else if (afi == AFI_L2VPN) {
if (safi == SAFI_EVPN)
return "L2VPN EVPN";
} else if (afi == AFI_LINKSTATE) {
if (safi == SAFI_LINKSTATE)
return "Link State";
if (safi == SAFI_LINKSTATE_VPN)
return "Link State VPN";
}
return "Unknown";
@ -287,6 +307,11 @@ static const char *get_afi_safi_json_str(afi_t afi, safi_t safi)
} else if (afi == AFI_L2VPN) {
if (safi == SAFI_EVPN)
return "l2VpnEvpn";
} else if (afi == AFI_LINKSTATE) {
if (safi == SAFI_LINKSTATE)
return "linkState";
if (safi == SAFI_LINKSTATE_VPN)
return "linkStateVPN";
}
return "Unknown";
@ -377,6 +402,9 @@ afi_t bgp_node_afi(struct vty *vty)
case BGP_EVPN_NODE:
afi = AFI_L2VPN;
break;
case BGP_LS_NODE:
afi = AFI_LINKSTATE;
break;
default:
afi = AFI_IP;
break;
@ -409,6 +437,9 @@ safi_t bgp_node_safi(struct vty *vty)
case BGP_FLOWSPECV6_NODE:
safi = SAFI_FLOWSPEC;
break;
case BGP_LS_NODE:
safi = SAFI_LINKSTATE;
break;
default:
safi = SAFI_UNICAST;
break;
@ -473,6 +504,10 @@ safi_t bgp_vty_safi_from_str(const char *safi_str)
safi = SAFI_LABELED_UNICAST;
else if (strmatch(safi_str, "flowspec"))
safi = SAFI_FLOWSPEC;
else if (strmatch(safi_str, "link-state"))
safi = SAFI_LINKSTATE;
else if (strmatch(safi_str, "link-state-vpn"))
safi = SAFI_LINKSTATE_VPN;
return safi;
}
@ -587,7 +622,24 @@ static const char *get_bgp_default_af_flag(afi_t afi, safi_t safi)
}
break;
case AFI_LINKSTATE:
/* TODO */
switch (safi) {
case SAFI_EVPN:
case SAFI_UNICAST:
case SAFI_MULTICAST:
case SAFI_MPLS_VPN:
case SAFI_ENCAP:
case SAFI_LABELED_UNICAST:
case SAFI_FLOWSPEC:
case SAFI_UNSPEC:
case SAFI_MAX:
case SAFI_LINKSTATE:
return "link-state";
case SAFI_LINKSTATE_VPN:
return "link-state-vpn";
default:
return "unknown-afi/safi";
}
break;
case AFI_UNSPEC:
case AFI_MAX:
return "unknown-afi/safi";
@ -10279,6 +10331,15 @@ DEFUN_NOSH (address_family_evpn,
return CMD_SUCCESS;
}
DEFUN_NOSH(address_family_linkstate, address_family_linkstate_cmd,
"address-family link-state link-state",
"Enter Address Family command mode\n" BGP_AF_STR BGP_AF_MODIFIER_STR)
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
vty->node = BGP_LS_NODE;
return CMD_SUCCESS;
}
DEFUN_NOSH (bgp_segment_routing_srv6,
bgp_segment_routing_srv6_cmd,
"segment-routing srv6",
@ -10419,7 +10480,8 @@ DEFUN_NOSH (exit_address_family,
|| vty->node == BGP_IPV6L_NODE || vty->node == BGP_VPNV6_NODE
|| vty->node == BGP_EVPN_NODE
|| vty->node == BGP_FLOWSPECV4_NODE
|| vty->node == BGP_FLOWSPECV6_NODE)
|| vty->node == BGP_FLOWSPECV6_NODE
|| vty->node == BGP_LS_NODE)
vty->node = BGP_NODE;
return CMD_SUCCESS;
}
@ -18362,6 +18424,11 @@ static void bgp_config_write_family(struct vty *vty, struct bgp *bgp, afi_t afi,
} else if (afi == AFI_L2VPN) {
if (safi == SAFI_EVPN)
vty_frame(vty, "l2vpn evpn");
} else if (afi == AFI_LINKSTATE) {
if (safi == SAFI_LINKSTATE)
vty_frame(vty, "link-state link-state");
else if (safi == SAFI_LINKSTATE_VPN)
vty_frame(vty, "link-state link-state-vpn");
}
vty_frame(vty, "\n");
@ -18905,6 +18972,11 @@ int bgp_config_write(struct vty *vty)
/* EVPN configuration. */
bgp_config_write_family(vty, bgp, AFI_L2VPN, SAFI_EVPN);
bgp_config_write_family(vty, bgp, AFI_LINKSTATE,
SAFI_LINKSTATE);
bgp_config_write_family(vty, bgp, AFI_LINKSTATE,
SAFI_LINKSTATE_VPN);
hook_call(bgp_inst_config_write, bgp, vty);
#ifdef ENABLE_BGP_VNC
@ -19029,6 +19101,13 @@ static struct cmd_node bgp_srv6_node = {
.prompt = "%s(config-router-srv6)# ",
};
static struct cmd_node bgp_ls_node = {
.name = "bgp link-state",
.node = BGP_LS_NODE,
.parent_node = BGP_NODE,
.prompt = "%s(config-router-af-ls)# ",
};
static void community_list_vty(void);
static void bgp_ac_peergroup(vector comps, struct cmd_token *token)
@ -19343,6 +19422,7 @@ void bgp_vty_init(void)
install_node(&bgp_flowspecv4_node);
install_node(&bgp_flowspecv6_node);
install_node(&bgp_srv6_node);
install_node(&bgp_ls_node);
/* Install default VTY commands to new nodes. */
install_default(BGP_NODE);
@ -19359,6 +19439,7 @@ void bgp_vty_init(void)
install_default(BGP_EVPN_NODE);
install_default(BGP_EVPN_VNI_NODE);
install_default(BGP_SRV6_NODE);
install_default(BGP_LS_NODE);
/* "global bgp inq-limit command */
install_element(CONFIG_NODE, &bgp_inq_limit_cmd);
@ -19490,6 +19571,13 @@ void bgp_vty_init(void)
install_element(BGP_IPV6L_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
install_element(BGP_IPV6L_NODE, &no_bgp_maxpaths_ibgp_cmd);
install_element(BGP_LS_NODE, &bgp_maxpaths_cmd);
install_element(BGP_LS_NODE, &no_bgp_maxpaths_cmd);
install_element(BGP_LS_NODE, &bgp_maxpaths_ibgp_cmd);
install_element(BGP_LS_NODE, &no_bgp_maxpaths_ibgp_cmd);
install_element(BGP_LS_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
/* "timers bgp" commands. */
install_element(BGP_NODE, &bgp_timers_cmd);
install_element(BGP_NODE, &no_bgp_timers_cmd);
@ -19712,6 +19800,7 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV4_NODE, &neighbor_activate_cmd);
install_element(BGP_FLOWSPECV6_NODE, &neighbor_activate_cmd);
install_element(BGP_EVPN_NODE, &neighbor_activate_cmd);
install_element(BGP_LS_NODE, &neighbor_activate_cmd);
/* "no neighbor activate" commands. */
install_element(BGP_NODE, &no_neighbor_activate_hidden_cmd);
@ -19726,6 +19815,7 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV4_NODE, &no_neighbor_activate_cmd);
install_element(BGP_FLOWSPECV6_NODE, &no_neighbor_activate_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_activate_cmd);
install_element(BGP_LS_NODE, &no_neighbor_activate_cmd);
/* "neighbor peer-group" set commands. */
install_element(BGP_NODE, &neighbor_set_peer_group_cmd);
@ -19740,6 +19830,8 @@ void bgp_vty_init(void)
&neighbor_set_peer_group_hidden_cmd);
install_element(BGP_FLOWSPECV6_NODE,
&neighbor_set_peer_group_hidden_cmd);
install_element(BGP_LS_NODE, &neighbor_set_peer_group_hidden_cmd);
/* "no neighbor peer-group unset" commands. */
install_element(BGP_NODE, &no_neighbor_set_peer_group_cmd);
@ -19754,6 +19846,7 @@ void bgp_vty_init(void)
&no_neighbor_set_peer_group_hidden_cmd);
install_element(BGP_FLOWSPECV6_NODE,
&no_neighbor_set_peer_group_hidden_cmd);
install_element(BGP_LS_NODE, &no_neighbor_set_peer_group_hidden_cmd);
/* "neighbor softreconfiguration inbound" commands.*/
install_element(BGP_NODE, &neighbor_soft_reconfiguration_hidden_cmd);
@ -19784,6 +19877,8 @@ void bgp_vty_init(void)
&no_neighbor_soft_reconfiguration_cmd);
install_element(BGP_EVPN_NODE, &neighbor_soft_reconfiguration_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_soft_reconfiguration_cmd);
install_element(BGP_LS_NODE, &neighbor_soft_reconfiguration_cmd);
install_element(BGP_LS_NODE, &no_neighbor_soft_reconfiguration_cmd);
/* "neighbor attribute-unchanged" commands. */
install_element(BGP_NODE, &neighbor_attr_unchanged_hidden_cmd);
@ -19804,9 +19899,10 @@ void bgp_vty_init(void)
install_element(BGP_VPNV4_NODE, &no_neighbor_attr_unchanged_cmd);
install_element(BGP_VPNV6_NODE, &neighbor_attr_unchanged_cmd);
install_element(BGP_VPNV6_NODE, &no_neighbor_attr_unchanged_cmd);
install_element(BGP_EVPN_NODE, &neighbor_attr_unchanged_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_attr_unchanged_cmd);
install_element(BGP_LS_NODE, &neighbor_attr_unchanged_cmd);
install_element(BGP_LS_NODE, &no_neighbor_attr_unchanged_cmd);
install_element(BGP_FLOWSPECV4_NODE, &neighbor_attr_unchanged_cmd);
install_element(BGP_FLOWSPECV4_NODE, &no_neighbor_attr_unchanged_cmd);
@ -19839,6 +19935,8 @@ void bgp_vty_init(void)
install_element(BGP_VPNV6_NODE, &no_neighbor_nexthop_self_cmd);
install_element(BGP_EVPN_NODE, &neighbor_nexthop_self_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_nexthop_self_cmd);
install_element(BGP_LS_NODE, &neighbor_nexthop_self_cmd);
install_element(BGP_LS_NODE, &no_neighbor_nexthop_self_cmd);
/* "neighbor next-hop-self force" commands. */
install_element(BGP_NODE, &neighbor_nexthop_self_force_hidden_cmd);
@ -19887,6 +19985,8 @@ void bgp_vty_init(void)
&no_neighbor_nexthop_self_all_hidden_cmd);
install_element(BGP_EVPN_NODE, &neighbor_nexthop_self_force_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_nexthop_self_force_cmd);
install_element(BGP_LS_NODE, &neighbor_nexthop_self_force_cmd);
install_element(BGP_LS_NODE, &no_neighbor_nexthop_self_force_cmd);
/* "neighbor as-override" commands. */
install_element(BGP_NODE, &neighbor_as_override_hidden_cmd);
@ -20019,6 +20119,18 @@ void bgp_vty_init(void)
&neighbor_remove_private_as_all_replace_as_cmd);
install_element(BGP_VPNV6_NODE,
&no_neighbor_remove_private_as_all_replace_as_cmd);
install_element(BGP_LS_NODE, &neighbor_remove_private_as_cmd);
install_element(BGP_LS_NODE, &no_neighbor_remove_private_as_cmd);
install_element(BGP_LS_NODE, &neighbor_remove_private_as_all_cmd);
install_element(BGP_LS_NODE, &no_neighbor_remove_private_as_all_cmd);
install_element(BGP_LS_NODE,
&neighbor_remove_private_as_replace_as_cmd);
install_element(BGP_LS_NODE,
&no_neighbor_remove_private_as_replace_as_cmd);
install_element(BGP_LS_NODE,
&neighbor_remove_private_as_all_replace_as_cmd);
install_element(BGP_LS_NODE,
&no_neighbor_remove_private_as_all_replace_as_cmd);
/* "neighbor send-community" commands.*/
install_element(BGP_NODE, &neighbor_send_community_hidden_cmd);
@ -20057,6 +20169,10 @@ void bgp_vty_init(void)
install_element(BGP_VPNV6_NODE, &neighbor_send_community_type_cmd);
install_element(BGP_VPNV6_NODE, &no_neighbor_send_community_cmd);
install_element(BGP_VPNV6_NODE, &no_neighbor_send_community_type_cmd);
install_element(BGP_LS_NODE, &neighbor_send_community_cmd);
install_element(BGP_LS_NODE, &neighbor_send_community_type_cmd);
install_element(BGP_LS_NODE, &no_neighbor_send_community_cmd);
install_element(BGP_LS_NODE, &no_neighbor_send_community_type_cmd);
/* "neighbor route-reflector" commands.*/
install_element(BGP_NODE, &neighbor_route_reflector_client_hidden_cmd);
@ -20094,6 +20210,8 @@ void bgp_vty_init(void)
&no_neighbor_route_reflector_client_cmd);
install_element(BGP_EVPN_NODE, &neighbor_route_reflector_client_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_route_reflector_client_cmd);
install_element(BGP_LS_NODE, &neighbor_route_reflector_client_cmd);
install_element(BGP_LS_NODE, &no_neighbor_route_reflector_client_cmd);
/* "neighbor route-server" commands.*/
install_element(BGP_NODE, &neighbor_route_server_client_hidden_cmd);
@ -20122,6 +20240,8 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV6_NODE, &neighbor_route_server_client_cmd);
install_element(BGP_FLOWSPECV6_NODE,
&no_neighbor_route_server_client_cmd);
install_element(BGP_LS_NODE, &neighbor_route_server_client_cmd);
install_element(BGP_LS_NODE, &no_neighbor_route_server_client_cmd);
/* "neighbor disable-addpath-rx" commands. */
install_element(BGP_IPV4_NODE, &neighbor_disable_addpath_rx_cmd);
@ -20283,6 +20403,8 @@ void bgp_vty_init(void)
install_element(BGP_IPV6M_NODE, &no_neighbor_capability_orf_prefix_cmd);
install_element(BGP_IPV6L_NODE, &neighbor_capability_orf_prefix_cmd);
install_element(BGP_IPV6L_NODE, &no_neighbor_capability_orf_prefix_cmd);
install_element(BGP_LS_NODE, &neighbor_capability_orf_prefix_cmd);
install_element(BGP_LS_NODE, &no_neighbor_capability_orf_prefix_cmd);
/* "neighbor capability dynamic" commands.*/
install_element(BGP_NODE, &neighbor_capability_dynamic_cmd);
@ -20419,6 +20541,8 @@ void bgp_vty_init(void)
install_element(BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd);
install_element(BGP_VPNV6_NODE, &neighbor_distribute_list_cmd);
install_element(BGP_VPNV6_NODE, &no_neighbor_distribute_list_cmd);
install_element(BGP_LS_NODE, &neighbor_distribute_list_cmd);
install_element(BGP_LS_NODE, &no_neighbor_distribute_list_cmd);
/* "neighbor prefix-list" commands. */
install_element(BGP_NODE, &neighbor_prefix_list_hidden_cmd);
@ -20443,6 +20567,7 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV4_NODE, &no_neighbor_prefix_list_cmd);
install_element(BGP_FLOWSPECV6_NODE, &neighbor_prefix_list_cmd);
install_element(BGP_FLOWSPECV6_NODE, &no_neighbor_prefix_list_cmd);
install_element(BGP_LS_NODE, &neighbor_prefix_list_cmd);
/* "neighbor filter-list" commands. */
install_element(BGP_NODE, &neighbor_filter_list_hidden_cmd);
@ -20467,6 +20592,8 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV4_NODE, &no_neighbor_filter_list_cmd);
install_element(BGP_FLOWSPECV6_NODE, &neighbor_filter_list_cmd);
install_element(BGP_FLOWSPECV6_NODE, &no_neighbor_filter_list_cmd);
install_element(BGP_LS_NODE, &neighbor_filter_list_cmd);
install_element(BGP_LS_NODE, &no_neighbor_filter_list_cmd);
/* "neighbor route-map" commands. */
install_element(BGP_NODE, &neighbor_route_map_hidden_cmd);
@ -20493,6 +20620,7 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV6_NODE, &no_neighbor_route_map_cmd);
install_element(BGP_EVPN_NODE, &neighbor_route_map_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_route_map_cmd);
install_element(BGP_LS_NODE, &neighbor_route_map_cmd);
/* "neighbor unsuppress-map" commands. */
install_element(BGP_NODE, &neighbor_unsuppress_map_hidden_cmd);
@ -20513,6 +20641,8 @@ void bgp_vty_init(void)
install_element(BGP_VPNV4_NODE, &no_neighbor_unsuppress_map_cmd);
install_element(BGP_VPNV6_NODE, &neighbor_unsuppress_map_cmd);
install_element(BGP_VPNV6_NODE, &no_neighbor_unsuppress_map_cmd);
install_element(BGP_LS_NODE, &neighbor_unsuppress_map_cmd);
install_element(BGP_LS_NODE, &no_neighbor_unsuppress_map_cmd);
/* "neighbor advertise-map" commands. */
install_element(BGP_NODE, &bgp_condadv_period_cmd);
@ -20632,6 +20762,15 @@ void bgp_vty_init(void)
install_element(BGP_VPNV6_NODE,
&neighbor_maximum_prefix_threshold_restart_cmd);
install_element(BGP_VPNV6_NODE, &no_neighbor_maximum_prefix_cmd);
install_element(BGP_LS_NODE, &neighbor_maximum_prefix_cmd);
install_element(BGP_LS_NODE, &neighbor_maximum_prefix_threshold_cmd);
install_element(BGP_LS_NODE, &neighbor_maximum_prefix_warning_cmd);
install_element(BGP_LS_NODE,
&neighbor_maximum_prefix_threshold_warning_cmd);
install_element(BGP_LS_NODE, &neighbor_maximum_prefix_restart_cmd);
install_element(BGP_LS_NODE,
&neighbor_maximum_prefix_threshold_restart_cmd);
install_element(BGP_LS_NODE, &no_neighbor_maximum_prefix_cmd);
/* "neighbor allowas-in" */
install_element(BGP_NODE, &neighbor_allowas_in_hidden_cmd);
@ -20654,6 +20793,8 @@ void bgp_vty_init(void)
install_element(BGP_VPNV6_NODE, &no_neighbor_allowas_in_cmd);
install_element(BGP_EVPN_NODE, &neighbor_allowas_in_cmd);
install_element(BGP_EVPN_NODE, &no_neighbor_allowas_in_cmd);
install_element(BGP_LS_NODE, &neighbor_allowas_in_cmd);
install_element(BGP_LS_NODE, &no_neighbor_allowas_in_cmd);
/* neighbor accept-own */
install_element(BGP_VPNV4_NODE, &neighbor_accept_own_cmd);
@ -20689,6 +20830,8 @@ void bgp_vty_init(void)
install_element(BGP_NODE, &address_family_evpn_cmd);
install_element(BGP_NODE, &address_family_linkstate_cmd);
/* "exit-address-family" command. */
install_element(BGP_IPV4_NODE, &exit_address_family_cmd);
install_element(BGP_IPV4M_NODE, &exit_address_family_cmd);
@ -20701,6 +20844,7 @@ void bgp_vty_init(void)
install_element(BGP_FLOWSPECV4_NODE, &exit_address_family_cmd);
install_element(BGP_FLOWSPECV6_NODE, &exit_address_family_cmd);
install_element(BGP_EVPN_NODE, &exit_address_family_cmd);
install_element(BGP_LS_NODE, &exit_address_family_cmd);
/* BGP retain all route-target */
install_element(BGP_VPNV4_NODE, &bgp_retain_route_target_cmd);

View File

@ -2040,6 +2040,10 @@ void peer_as_change(struct peer *peer, as_t as, int as_specified,
PEER_FLAG_REFLECTOR_CLIENT);
UNSET_FLAG(peer->af_flags[AFI_L2VPN][SAFI_EVPN],
PEER_FLAG_REFLECTOR_CLIENT);
UNSET_FLAG(peer->af_flags[AFI_LINKSTATE][SAFI_LINKSTATE],
PEER_FLAG_REFLECTOR_CLIENT);
UNSET_FLAG(peer->af_flags[AFI_LINKSTATE][SAFI_LINKSTATE_VPN],
PEER_FLAG_REFLECTOR_CLIENT);
}
}
@ -4384,7 +4388,9 @@ bool peer_active(struct peer *peer)
|| peer->afc[AFI_IP6][SAFI_MPLS_VPN]
|| peer->afc[AFI_IP6][SAFI_ENCAP]
|| peer->afc[AFI_IP6][SAFI_FLOWSPEC]
|| peer->afc[AFI_L2VPN][SAFI_EVPN])
|| peer->afc[AFI_L2VPN][SAFI_EVPN]
|| peer->afc[AFI_LINKSTATE][SAFI_LINKSTATE]
|| peer->afc[AFI_LINKSTATE][SAFI_LINKSTATE_VPN])
return true;
return false;
}
@ -4404,7 +4410,9 @@ bool peer_active_nego(struct peer *peer)
|| peer->afc_nego[AFI_IP6][SAFI_MPLS_VPN]
|| peer->afc_nego[AFI_IP6][SAFI_ENCAP]
|| peer->afc_nego[AFI_IP6][SAFI_FLOWSPEC]
|| peer->afc_nego[AFI_L2VPN][SAFI_EVPN])
|| peer->afc_nego[AFI_L2VPN][SAFI_EVPN]
|| peer->afc_nego[AFI_LINKSTATE][SAFI_LINKSTATE]
|| peer->afc_nego[AFI_LINKSTATE][SAFI_LINKSTATE_VPN])
return true;
return false;
}

View File

@ -81,6 +81,8 @@ enum bgp_af_index {
BGP_AF_IPV6_LBL_UNICAST,
BGP_AF_IPV4_FLOWSPEC,
BGP_AF_IPV6_FLOWSPEC,
BGP_AF_LINKSTATE,
BGP_AF_LINKSTATE_VPN,
BGP_AF_MAX
};
@ -2552,7 +2554,23 @@ static inline int afindex(afi_t afi, safi_t safi)
}
break;
case AFI_LINKSTATE:
/* TODO */
switch (safi) {
case SAFI_LINKSTATE:
return BGP_AF_LINKSTATE;
case SAFI_LINKSTATE_VPN:
return BGP_AF_LINKSTATE_VPN;
case SAFI_EVPN:
case SAFI_UNICAST:
case SAFI_MULTICAST:
case SAFI_LABELED_UNICAST:
case SAFI_MPLS_VPN:
case SAFI_ENCAP:
case SAFI_FLOWSPEC:
case SAFI_UNSPEC:
case SAFI_MAX:
return BGP_AF_MAX;
}
break;
case AFI_UNSPEC:
case AFI_MAX:
return BGP_AF_MAX;
@ -2578,7 +2596,9 @@ static inline int peer_afi_active_nego(const struct peer *peer, afi_t afi)
|| peer->afc_nego[afi][SAFI_MPLS_VPN]
|| peer->afc_nego[afi][SAFI_ENCAP]
|| peer->afc_nego[afi][SAFI_FLOWSPEC]
|| peer->afc_nego[afi][SAFI_EVPN])
|| peer->afc_nego[afi][SAFI_EVPN]
|| peer->afc_nego[afi][SAFI_LINKSTATE]
|| peer->afc_nego[afi][SAFI_LINKSTATE_VPN])
return 1;
return 0;
}
@ -2598,7 +2618,9 @@ static inline int peer_group_af_configured(struct peer_group *group)
|| peer->afc[AFI_IP6][SAFI_MPLS_VPN]
|| peer->afc[AFI_IP6][SAFI_ENCAP]
|| peer->afc[AFI_IP6][SAFI_FLOWSPEC]
|| peer->afc[AFI_L2VPN][SAFI_EVPN])
|| peer->afc[AFI_L2VPN][SAFI_EVPN]
|| peer->afc[AFI_LINKSTATE][SAFI_LINKSTATE]
|| peer->afc[AFI_LINKSTATE][SAFI_LINKSTATE_VPN])
return 1;
return 0;
}

View File

@ -174,6 +174,7 @@ enum node_type {
BMP_NODE, /* BMP config under router bgp */
ISIS_SRV6_NODE, /* ISIS SRv6 node */
ISIS_SRV6_NODE_MSD_NODE, /* ISIS SRv6 Node MSDs node */
BGP_LS_NODE, /* BGP-LS configuration node */
NODE_TYPE_MAX, /* maximum */
};
/* clang-format on */

View File

@ -1447,6 +1447,13 @@ static struct cmd_node bgp_ipv6l_node = {
.no_xpath = true,
};
static struct cmd_node bgp_ls_node = {
.name = "bgp link-state",
.node = BGP_LS_NODE,
.parent_node = BGP_NODE,
.prompt = "%s(config-router-af-ls)# ",
};
#ifdef ENABLE_BGP_VNC
static struct cmd_node bgp_vnc_defaults_node = {
.name = "bgp vnc defaults",
@ -1758,6 +1765,14 @@ DEFUNSH(VTYSH_BGPD, address_family_flowspecv6, address_family_flowspecv6_cmd,
return CMD_SUCCESS;
}
DEFUNSH(VTYSH_BGPD, address_family_linkstate, address_family_linkstate_cmd,
"address-family link-state link-state",
"Enter Address Family command mode\n" BGP_AF_STR BGP_AF_MODIFIER_STR)
{
vty->node = BGP_LS_NODE;
return CMD_SUCCESS;
}
DEFUNSH(VTYSH_BGPD, address_family_ipv4_multicast,
address_family_ipv4_multicast_cmd, "address-family ipv4 multicast",
"Enter Address Family command mode\n"
@ -2420,7 +2435,8 @@ DEFUNSH(VTYSH_BGPD, exit_address_family, exit_address_family_cmd,
|| vty->node == BGP_IPV6L_NODE || vty->node == BGP_IPV6M_NODE
|| vty->node == BGP_EVPN_NODE
|| vty->node == BGP_FLOWSPECV4_NODE
|| vty->node == BGP_FLOWSPECV6_NODE)
|| vty->node == BGP_FLOWSPECV6_NODE
|| vty->node == BGP_LS_NODE)
vty->node = BGP_NODE;
return CMD_SUCCESS;
}
@ -4671,6 +4687,13 @@ void vtysh_init_vty(void)
install_element(BGP_EVPN_VNI_NODE, &vtysh_end_all_cmd);
install_element(BGP_EVPN_VNI_NODE, &exit_vni_cmd);
install_node(&bgp_ls_node);
install_element(BGP_NODE, &address_family_linkstate_cmd);
install_element(BGP_LS_NODE, &vtysh_exit_bgpd_cmd);
install_element(BGP_LS_NODE, &vtysh_quit_bgpd_cmd);
install_element(BGP_LS_NODE, &vtysh_end_all_cmd);
install_element(BGP_LS_NODE, &exit_address_family_cmd);
install_node(&rpki_node);
install_element(CONFIG_NODE, &rpki_cmd);
install_element(RPKI_NODE, &rpki_exit_cmd);