/* ---------- */
const char *mgmt_be_client_names[MGMTD_BE_CLIENT_ID_MAX + 1] = {
+ [MGMTD_BE_CLIENT_ID_ZEBRA] = "zebra",
#ifdef HAVE_STATICD
[MGMTD_BE_CLIENT_ID_STATICD] = "staticd",
#endif
#endif
};
-static const char *const *be_client_oper_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {};
+static const char *const zebra_oper_xpaths[] = {
+ "/frr-interface:lib/interface",
+ "/frr-vrf:lib/vrf/frr-zebra:zebra",
+ "/frr-zebra:zebra",
+ NULL,
+};
+
+static const char *const *be_client_oper_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
+ [MGMTD_BE_CLIENT_ID_ZEBRA] = zebra_oper_xpaths,
+};
/*
* We would like to have a better ADT than one with O(n) comparisons
#ifdef HAVE_STATICD
MGMTD_BE_CLIENT_ID_STATICD,
#endif
+ MGMTD_BE_CLIENT_ID_ZEBRA,
MGMTD_BE_CLIENT_ID_MAX
};
#define MGMTD_BE_CLIENT_ID_MIN 0
* NOTE: Always set .ignore_cbs true for to avoid validating
* backend configuration northbound callbacks during loading.
*/
+ &(struct frr_yang_module_info){ .name = "frr-zebra",
+ .ignore_cbs = true },
+ /*
+ * TO support LYD_LYB parsing we have to include all the modules that
+ * backend clients include.
+ */
+ &(struct frr_yang_module_info){ .name = "frr-affinity-map",
+ .ignore_cbs = true },
+ &(struct frr_yang_module_info){ .name = "frr-zebra-route-map",
+ .ignore_cbs = true },
#ifdef HAVE_STATICD
&frr_staticd_info,
#endif
"lib/filter_cli.c": "VTYSH_ACL",
"lib/if.c": "VTYSH_INTERFACE",
"lib/keychain.c": "VTYSH_KEYS",
- "lib/mgmt_be_client.c": "VTYSH_STATICD",
+ "lib/mgmt_be_client.c": "VTYSH_STATICD|VTYSH_ZEBRA",
"lib/mgmt_fe_client.c": "VTYSH_MGMTD",
"lib/lib_vty.c": "VTYSH_ALL",
"lib/log_vty.c": "VTYSH_ALL",
#include <zebra.h>
#include "command.h"
#include "debug.h"
+#include "mgmt_be_client.h"
#include "zebra/debug_clippy.c"
install_element(CONFIG_NODE, &no_debug_zebra_pbr_cmd);
install_element(CONFIG_NODE, &debug_zebra_mlag_cmd);
install_element(CONFIG_NODE, &debug_zebra_evpn_mh_cmd);
+
+ /* Init mgmtd backend client debug commands. */
+ mgmt_be_client_lib_vty_init();
}
#include "affinitymap.h"
#include "routemap.h"
#include "routing_nb.h"
+#include "mgmt_be_client.h"
#include "zebra/zebra_router.h"
#include "zebra/zebra_errors.h"
/* Pacify zclient.o in libfrr, which expects this variable. */
struct event_loop *master;
+struct mgmt_be_client *mgmt_be_client;
+
/* Route retain mode flag. */
int retain_mode = 0;
zlog_notice("Terminating on signal");
+ mgmt_be_client_destroy(mgmt_be_client);
+
atomic_store_explicit(&zrouter.in_shutdown, true,
memory_order_relaxed);
zebra_ns_init();
router_id_cmd_init();
zebra_vty_init();
+ mgmt_be_client = mgmt_be_client_create("zebra", NULL, 0,
+ zrouter.master);
access_list_init();
prefix_list_init();
safi_t safi;
zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
+ if (!zvrf)
+ return NULL;
if (args->list_entry == NULL) {
afi = AFI_IP;
uint32_t table_id = 0;
zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
+ if (!zvrf)
+ return NULL;
yang_afi_safi_identity2value(args->keys->key[0], &afi, &safi);
table_id = yang_str2uint32(args->keys->key[1]);