Merge pull request #6904 from chiragshah6/yang_nb6

lib, bgpd: Convert global configurations to transactional cli
This commit is contained in:
Santosh P K 2020-10-05 21:53:39 +05:30 committed by GitHub
commit 002bac8b5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 42595 additions and 848 deletions

View File

@ -60,6 +60,8 @@
#include "bgpd/bgp_keepalives.h"
#include "bgpd/bgp_network.h"
#include "bgpd/bgp_errors.h"
#include "lib/routing_nb.h"
#include "bgpd/bgp_nb.h"
#ifdef ENABLE_BGP_VNC
#include "bgpd/rfapi/rfapi_backend.h"
@ -370,9 +372,11 @@ static void bgp_vrf_terminate(void)
}
static const struct frr_yang_module_info *const bgpd_yang_modules[] = {
&frr_bgp_info,
&frr_filter_info,
&frr_interface_info,
&frr_route_map_info,
&frr_routing_info,
&frr_vrf_info,
};
@ -497,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

@ -2581,7 +2581,7 @@ void vpn_leak_postchange_all(void)
* also VRF Y should unimport its routes from VRF X table.
* This will ensure VPN table is cleaned up appropriately.
*/
int bgp_vpn_leak_unimport(struct bgp *from_bgp, struct vty *vty)
void bgp_vpn_leak_unimport(struct bgp *from_bgp)
{
struct bgp *to_bgp;
const char *tmp_name;
@ -2593,7 +2593,7 @@ int bgp_vpn_leak_unimport(struct bgp *from_bgp, struct vty *vty)
int debug;
if (from_bgp->inst_type != BGP_INSTANCE_TYPE_VRF)
return 0;
return;
debug = (BGP_DEBUG(vpn, VPN_LEAK_TO_VRF) |
BGP_DEBUG(vpn, VPN_LEAK_FROM_VRF));
@ -2662,7 +2662,7 @@ int bgp_vpn_leak_unimport(struct bgp *from_bgp, struct vty *vty)
}
}
}
return 0;
return;
}
/* When a router bgp is configured, there could be a bgp vrf

View File

@ -266,7 +266,7 @@ extern vrf_id_t get_first_vrf_for_redirect_with_rt(struct ecommunity *eckey);
extern void vpn_leak_postchange_all(void);
extern void vpn_handle_router_id_update(struct bgp *bgp, bool withdraw,
bool is_config);
extern int bgp_vpn_leak_unimport(struct bgp *from_bgp, struct vty *vty);
extern void bgp_vpn_leak_unimport(struct bgp *from_bgp);
extern void bgp_vpn_leak_export(struct bgp *from_bgp);
#endif /* _QUAGGA_BGP_MPLSVPN_H */

7524
bgpd/bgp_nb.c Normal file

File diff suppressed because it is too large Load Diff

3441
bgpd/bgp_nb.h Normal file

File diff suppressed because it is too large Load Diff

30489
bgpd/bgp_nb_config.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -180,5 +180,12 @@ int bgp_vty_find_and_parse_bgp(struct vty *vty, struct cmd_token **argv,
extern int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi,
safi_t safi, bool show_failed,
bool show_established, bool use_json);
extern int bgp_clear_star_soft_in(const char *name, char *errmsg,
size_t errmsg_len);
extern int bgp_clear_star_soft_out(const char *name, char *errmsg,
size_t errmsg_len);
int bgp_wpkt_quanta_config_vty(struct bgp *bgp, uint32_t quanta, bool set);
int bgp_rpkt_quanta_config_vty(struct bgp *bgp, uint32_t quanta, bool set);
#endif /* _QUAGGA_BGP_VTY_H */

View File

@ -397,10 +397,6 @@ int bgp_cluster_id_set(struct bgp *bgp, struct in_addr *cluster_id)
struct peer *peer;
struct listnode *node, *nnode;
if (bgp_config_check(bgp, BGP_CONFIG_CLUSTER_ID)
&& IPV4_ADDR_SAME(&bgp->cluster_id, cluster_id))
return 0;
IPV4_ADDR_COPY(&bgp->cluster_id, cluster_id);
bgp_config_set(bgp, BGP_CONFIG_CLUSTER_ID);
@ -473,14 +469,14 @@ void bgp_timers_unset(struct bgp *bgp)
}
/* BGP confederation configuration. */
int bgp_confederation_id_set(struct bgp *bgp, as_t as)
void bgp_confederation_id_set(struct bgp *bgp, as_t as)
{
struct peer *peer;
struct listnode *node, *nnode;
int already_confed;
if (as == 0)
return BGP_ERR_INVALID_AS;
return;
/* Remember - were we doing confederation before? */
already_confed = bgp_config_check(bgp, BGP_CONFIG_CONFEDERATION);
@ -528,7 +524,7 @@ int bgp_confederation_id_set(struct bgp *bgp, as_t as)
}
}
}
return 0;
return;
}
int bgp_confederation_id_unset(struct bgp *bgp)

View File

@ -391,8 +391,9 @@ struct bgp {
*t_maxmed_onstartup; /* non-null when max-med onstartup is on */
uint8_t maxmed_onstartup_over; /* Flag to make it effective only once */
uint8_t v_maxmed_admin; /* 1/0 if max-med administrative is on/off */
#define BGP_MAXMED_ADMIN_UNCONFIGURED 0 /* Off by default */
bool v_maxmed_admin; /* true/false if max-med administrative is on/off
*/
#define BGP_MAXMED_ADMIN_UNCONFIGURED false /* Off by default */
uint32_t maxmed_admin_value; /* Max-med value when administrative in on
*/
#define BGP_MAXMED_VALUE_DEFAULT 4294967294 /* Maximum by default */
@ -1827,7 +1828,7 @@ extern void bgp_router_id_static_set(struct bgp *, struct in_addr);
extern int bgp_cluster_id_set(struct bgp *, struct in_addr *);
extern int bgp_cluster_id_unset(struct bgp *);
extern int bgp_confederation_id_set(struct bgp *, as_t);
extern void bgp_confederation_id_set(struct bgp *, as_t);
extern int bgp_confederation_id_unset(struct bgp *);
extern bool bgp_confederation_peers_check(struct bgp *, as_t);

View File

@ -102,6 +102,8 @@ bgpd_libbgp_a_SOURCES = \
bgpd/bgp_vty.c \
bgpd/bgp_zebra.c \
bgpd/bgpd.c \
bgpd/bgp_nb.c \
bgpd/bgp_nb_config.c \
# end
if ENABLE_BGP_VNC
@ -175,6 +177,7 @@ noinst_HEADERS += \
bgpd/bgp_vty.h \
bgpd/bgp_zebra.h \
bgpd/bgpd.h \
bgpd/bgp_nb.h \
\
bgpd/rfapi/bgp_rfapi_cfg.h \
bgpd/rfapi/rfapi_import.h \
@ -231,3 +234,16 @@ clippy_scan += \
bgpd/bgp_rpki.c \
bgpd/bgp_vty.c \
# end
nodist_bgpd_bgpd_SOURCES = \
yang/frr-bgp-types.yang.c \
yang/frr-bgp.yang.c \
yang/frr-bgp-common-structure.yang.c \
yang/frr-bgp-common.yang.c \
yang/frr-bgp-common-multiprotocol.yang.c \
yang/frr-bgp-neighbor.yang.c \
yang/frr-bgp-peer-group.yang.c \
yang/frr-bgp-bmp.yang.c \
yang/frr-bgp-rpki.yang.c \
yang/frr-deviations-bgp-datacenter.yang.c \
# end

View File

@ -546,7 +546,7 @@ struct nb_node {
* from working properly on shared libraries. For those compilers, use a fixed
* size array to work around the problem.
*/
#define YANG_MODULE_MAX_NODES 1024
#define YANG_MODULE_MAX_NODES 1400
struct frr_yang_module_info {
/* YANG module name. */

View File

@ -123,6 +123,7 @@ nodist_lib_libfrr_la_SOURCES = \
yang/frr-nexthop.yang.c \
yang/ietf/ietf-routing-types.yang.c \
yang/ietf/ietf-interfaces.yang.c \
yang/ietf/ietf-bgp-types.yang.c \
yang/frr-module-translator.yang.c \
yang/frr-nexthop.yang.c \
# end

View File

@ -30,6 +30,8 @@
#include "bgpd/bgp_vty.h"
#include "bgpd/bgp_zebra.h"
#include "bgpd/bgp_network.h"
#include "lib/routing_nb.h"
#include "bgpd/bgp_nb.h"
#ifdef ENABLE_BGP_VNC
#include "bgpd/rfapi/rfapi_backend.h"
@ -932,7 +934,7 @@ static struct test *test_new(const char *desc, bool use_ibgp,
test->vty = vty_new();
test->vty->type = VTY_TERM;
test->vty->node = CONFIG_NODE;
vty_config_enter(test->vty, true, false);
test_initialize(test);
@ -1378,6 +1380,15 @@ static void test_peer_attr(struct test *test, struct test_peer_attr *pa)
test_process(test, pa, p, g->conf, true, false);
}
static const struct frr_yang_module_info *const bgpd_yang_modules[] = {
&frr_bgp_info,
&frr_filter_info,
&frr_interface_info,
&frr_route_map_info,
&frr_routing_info,
&frr_vrf_info,
};
static void bgp_startup(void)
{
cmd_init(1);
@ -1387,7 +1398,7 @@ static void bgp_startup(void)
master = thread_master_create(NULL);
yang_init(true);
nb_init(master, NULL, 0, false);
nb_init(master, bgpd_yang_modules, array_size(bgpd_yang_modules), false);
bgp_master_init(master, BGP_SOCKET_SNDBUF_SIZE);
bgp_option_set(BGP_OPT_NO_LISTEN);
vrf_init(NULL, NULL, NULL, NULL, NULL);

View File

@ -168,6 +168,19 @@ tests_bgpd_test_peer_attr_CFLAGS = $(TESTS_CFLAGS)
tests_bgpd_test_peer_attr_CPPFLAGS = $(TESTS_CPPFLAGS)
tests_bgpd_test_peer_attr_LDADD = $(BGP_TEST_LDADD)
tests_bgpd_test_peer_attr_SOURCES = tests/bgpd/test_peer_attr.c
nodist_tests_bgpd_test_peer_attr_SOURCES = \
yang/frr-bgp-types.yang.c \
yang/frr-bgp.yang.c \
yang/frr-bgp-common-structure.yang.c \
yang/frr-bgp-common.yang.c \
yang/frr-bgp-common-multiprotocol.yang.c \
yang/frr-bgp-neighbor.yang.c \
yang/frr-bgp-peer-group.yang.c \
yang/frr-bgp-bmp.yang.c \
yang/frr-bgp-rpki.yang.c \
yang/frr-deviations-bgp-datacenter.yang.c \
# end
tests_isisd_test_fuzz_isis_tlv_CFLAGS = $(TESTS_CFLAGS) -I$(top_builddir)/tests/isisd
tests_isisd_test_fuzz_isis_tlv_CPPFLAGS = $(TESTS_CPPFLAGS) -I$(top_builddir)/tests/isisd

View File

@ -195,7 +195,7 @@ submodule frr-bgp-common {
leaf external-compare-router-id {
type boolean;
default "true";
default "false";
description
"When comparing similar routes received from external BGP
peers, use the router-id as a criterion to select the

View File

@ -90,10 +90,10 @@ module frr-bgp {
"BGP protocol augmentation of ietf-routing module
control-plane-protocol.";
}
presence "Enables configuration of BGP";
description
"Top-level configuration for the BGP router.";
container global {
presence "Enables global configuration of BGP";
description
"Global configuration for the BGP router.";
leaf local-as {

View File

@ -30,6 +30,7 @@ dist_yangmodels_DATA += yang/frr-route-types.yang
dist_yangmodels_DATA += yang/frr-routing.yang
dist_yangmodels_DATA += yang/ietf/ietf-routing-types.yang
dist_yangmodels_DATA += yang/ietf/ietf-interfaces.yang
dist_yangmodels_DATA += yang/ietf/ietf-bgp-types.yang
if BFDD
dist_yangmodels_DATA += yang/frr-bfdd.yang
@ -68,3 +69,16 @@ dist_yangmodels_DATA += yang/frr-igmp.yang
dist_yangmodels_DATA += yang/frr-pim.yang
dist_yangmodels_DATA += yang/frr-pim-rp.yang
endif
if BGPD
dist_yangmodels_DATA += yang/frr-bgp-common-structure.yang
dist_yangmodels_DATA += yang/frr-bgp-common.yang
dist_yangmodels_DATA += yang/frr-bgp-common-multiprotocol.yang
dist_yangmodels_DATA += yang/frr-bgp-neighbor.yang
dist_yangmodels_DATA += yang/frr-bgp-peer-group.yang
dist_yangmodels_DATA += yang/frr-deviations-bgp-datacenter.yang
dist_yangmodels_DATA += yang/frr-bgp-rpki.yang
dist_yangmodels_DATA += yang/frr-bgp-bmp.yang
dist_yangmodels_DATA += yang/frr-bgp-types.yang
dist_yangmodels_DATA += yang/frr-bgp.yang
endif