From: Chirag Shah Date: Mon, 17 Aug 2020 00:59:13 +0000 (-0700) Subject: bgpd: register nb routing hook X-Git-Tag: base_7.6~459^2~6 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=374069da83f5f00f53156e1886372391c3f00b3f;p=mirror%2Ffrr.git 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 --- diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c index 18f597f539..d0a32ee408 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c @@ -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); diff --git a/bgpd/bgp_nb.h b/bgpd/bgp_nb.h index 2bed6bcfe6..ad7561b8ce 100644 --- a/bgpd/bgp_nb.h +++ b/bgpd/bgp_nb.h @@ -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); diff --git a/bgpd/bgp_nb_config.c b/bgpd/bgp_nb_config.c index e3bb7ec295..8d94e3f972 100644 --- a/bgpd/bgp_nb_config.c +++ b/bgpd/bgp_nb_config.c @@ -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