bgpd: register nb routing hook

On bgpd bootstrap register routing hook which ensures
only single bgp named instance created per vrf routing
hierarchy.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
This commit is contained in:
Chirag Shah 2020-08-16 17:59:13 -07:00
parent ff8a8a7ac1
commit 374069da83
3 changed files with 25 additions and 0 deletions

View File

@ -501,6 +501,10 @@ int main(int argc, char **argv)
/* Initializations. */
bgp_vrf_init();
hook_register(routing_conf_event,
routing_control_plane_protocols_name_validate);
/* BGP related initialization. */
bgp_init((unsigned short)instance);

View File

@ -3407,6 +3407,13 @@ int routing_control_plane_protocols_control_plane_protocol_bgp_peer_groups_peer_
int routing_control_plane_protocols_control_plane_protocol_bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_flowspec_soft_reconfiguration_modify(
struct nb_cb_modify_args *args);
/*
* Callback registered with routing_nb lib to validate only
* one instance of bgp instance is allowed
*/
int routing_control_plane_protocols_name_validate(
struct nb_cb_create_args *args);
/* Optional 'cli_show' callbacks. */
void cli_show_router_bgp(struct vty *vty, struct lyd_node *dnode,
bool show_defaults);

View File

@ -44,6 +44,20 @@ FRR_CFG_DEFAULT_ULONG(BGP_KEEPALIVE,
{ .val_ulong = 60 },
)
int routing_control_plane_protocols_name_validate(
struct nb_cb_create_args *args)
{
const char *name;
name = yang_dnode_get_string(args->dnode, "./name");
if (!strmatch(name, "bgp")) {
snprintf(args->errmsg, args->errmsg_len,
"per vrf only one bgp instance is supported.");
return NB_ERR_VALIDATION;
}
return NB_OK;
}
/*
* XPath:
* /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global