summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/mgmt_be_client.c2
-rw-r--r--lib/mgmt_be_client.h2
-rw-r--r--mgmtd/mgmt_be_adapter.c6
-rw-r--r--mgmtd/mgmt_main.c2
-rw-r--r--mgmtd/mgmt_vty.c2
-rw-r--r--mgmtd/subdir.am6
-rw-r--r--staticd/static_main.c55
-rw-r--r--staticd/static_routes.c24
-rw-r--r--staticd/static_routes.h27
-rw-r--r--staticd/static_vty.c12
10 files changed, 95 insertions, 43 deletions
diff --git a/lib/mgmt_be_client.c b/lib/mgmt_be_client.c
index d86f3d336a..1e98c6123d 100644
--- a/lib/mgmt_be_client.c
+++ b/lib/mgmt_be_client.c
@@ -146,11 +146,9 @@ static bool mgmt_debug_be_client;
static struct mgmt_be_client_ctx mgmt_be_client_ctx = {0};
const char *mgmt_be_client_names[MGMTD_BE_CLIENT_ID_MAX + 1] = {
-#if 0
#ifdef HAVE_STATICD
[MGMTD_BE_CLIENT_ID_STATICD] = "staticd",
#endif
-#endif
[MGMTD_BE_CLIENT_ID_MAX] = "Unknown/Invalid",
};
diff --git a/lib/mgmt_be_client.h b/lib/mgmt_be_client.h
index 75b4ddf017..bf875f5a45 100644
--- a/lib/mgmt_be_client.h
+++ b/lib/mgmt_be_client.h
@@ -25,11 +25,9 @@ extern "C" {
enum mgmt_be_client_id {
MGMTD_BE_CLIENT_ID_MIN = 0,
MGMTD_BE_CLIENT_ID_INIT = -1,
-#if 0 /* example */
#ifdef HAVE_STATICD
MGMTD_BE_CLIENT_ID_STATICD,
#endif
-#endif
MGMTD_BE_CLIENT_ID_MAX
};
diff --git a/mgmtd/mgmt_be_adapter.c b/mgmtd/mgmt_be_adapter.c
index b47ed3afe1..8ad4064298 100644
--- a/mgmtd/mgmt_be_adapter.c
+++ b/mgmtd/mgmt_be_adapter.c
@@ -78,31 +78,25 @@ static const struct mgmt_be_xpath_map_reg xpath_static_map_reg[] = {
{.xpath_regexp = "/frr-vrf:lib/*",
.be_clients =
(enum mgmt_be_client_id[]){
-#if 0
#if HAVE_STATICD
MGMTD_BE_CLIENT_ID_STATICD,
#endif
-#endif
MGMTD_BE_CLIENT_ID_MAX}},
{.xpath_regexp = "/frr-interface:lib/*",
.be_clients =
(enum mgmt_be_client_id[]){
-#if 0
#if HAVE_STATICD
MGMTD_BE_CLIENT_ID_STATICD,
#endif
-#endif
MGMTD_BE_CLIENT_ID_MAX}},
{.xpath_regexp =
"/frr-routing:routing/control-plane-protocols/control-plane-protocol[type='frr-staticd:staticd'][name='staticd'][vrf='default']/frr-staticd:staticd/*",
.be_clients =
(enum mgmt_be_client_id[]){
-#if 0
#if HAVE_STATICD
MGMTD_BE_CLIENT_ID_STATICD,
#endif
-#endif
MGMTD_BE_CLIENT_ID_MAX}},
};
diff --git a/mgmtd/mgmt_main.c b/mgmtd/mgmt_main.c
index 017263ca88..7d176059f5 100644
--- a/mgmtd/mgmt_main.c
+++ b/mgmtd/mgmt_main.c
@@ -201,12 +201,10 @@ static const struct frr_yang_module_info *const mgmt_yang_modules[] = {
* NOTE: Always set .ignore_cbs true for to avoid validating
* backend northbound callbacks during loading.
*/
-#if 0
#ifdef HAVE_STATICD
&(struct frr_yang_module_info){.name = "frr-staticd",
.ignore_cbs = true},
#endif
-#endif
};
FRR_DAEMON_INFO(mgmtd, MGMTD, .vty_port = MGMTD_VTY_PORT,
diff --git a/mgmtd/mgmt_vty.c b/mgmtd/mgmt_vty.c
index 0ac4ebc9e6..79fa54a791 100644
--- a/mgmtd/mgmt_vty.c
+++ b/mgmtd/mgmt_vty.c
@@ -447,12 +447,10 @@ void mgmt_vty_init(void)
* backend components that are moved to new MGMTD infra
* here one by one.
*/
-#if 0
#if HAVE_STATICD
extern void static_vty_init(void);
static_vty_init();
#endif
-#endif
install_node(&debug_node);
diff --git a/mgmtd/subdir.am b/mgmtd/subdir.am
index d56fd93450..a93f8f9441 100644
--- a/mgmtd/subdir.am
+++ b/mgmtd/subdir.am
@@ -60,3 +60,9 @@ mgmtd_mgmtd_SOURCES = \
mgmtd_mgmtd_CFLAGS = $(AM_CFLAGS) -I ./
mgmtd_mgmtd_LDADD = mgmtd/libmgmtd.a lib/libfrr.la $(LIBCAP) $(LIBM) $(LIBYANG_LIBS) $(UST_LIBS)
mgmtd_mgmtd_LDADD += mgmtd/libmgmt_be_nb.la
+
+if STATICD
+$(mgmtd_mgmtd_OBJECTS): yang/frr-staticd.yang.c
+CLEANFILES += yang/frr-staticd.yang.c
+nodist_mgmtd_libmgmt_be_nb_la_SOURCES += staticd/static_vty.c
+endif
diff --git a/staticd/static_main.c b/staticd/static_main.c
index 0d0de7e8d3..d429162196 100644
--- a/staticd/static_main.c
+++ b/staticd/static_main.c
@@ -27,6 +27,8 @@
#include "static_debug.h"
#include "static_nb.h"
+#include "mgmt_be_client.h"
+
char backup_config_file[256];
bool mpls_enabled;
@@ -51,6 +53,8 @@ struct option longopts[] = { { 0 } };
/* Master of threads. */
struct thread_master *master;
+uintptr_t mgmt_lib_hndl;
+
static struct frr_daemon_info staticd_di;
/* SIGHUP handler. */
static void sighup(void)
@@ -67,6 +71,8 @@ static void sigint(void)
/* Disable BFD events to avoid wasting processing. */
bfd_protocol_integration_set_shutdown(true);
+ mgmt_be_client_lib_destroy(mgmt_lib_hndl);
+
static_vrf_terminate();
static_zebra_stop();
@@ -100,6 +106,51 @@ struct frr_signal_t static_signals[] = {
},
};
+static void static_mgmt_be_client_connect(uintptr_t lib_hndl,
+ uintptr_t usr_data, bool connected)
+{
+ (void)usr_data;
+
+ assert(lib_hndl == mgmt_lib_hndl);
+
+ zlog_debug("Got %s %s MGMTD Backend Client Server",
+ connected ? "connected" : "disconnected",
+ connected ? "to" : "from");
+
+ if (connected)
+ (void)mgmt_be_subscribe_yang_data(mgmt_lib_hndl, NULL, 0);
+}
+
+#if 0
+static void
+static_mgmt_txn_notify(uintptr_t lib_hndl, uintptr_t usr_data,
+ struct mgmt_be_client_txn_ctx *txn_ctx,
+ bool destroyed)
+{
+ zlog_debug("Got Txn %s Notify from MGMTD server",
+ destroyed ? "DESTROY" : "CREATE");
+
+ if (!destroyed) {
+ /*
+ * TODO: Allocate and install a private scratchpad for this
+ * transaction if required
+ */
+ } else {
+ /*
+ * TODO: Uninstall and deallocate the private scratchpad for
+ * this transaction if installed earlier.
+ */
+ }
+}
+#endif
+
+static struct mgmt_be_client_params mgmt_params = {
+ .name = "staticd",
+ .conn_retry_intvl_sec = 3,
+ .client_connect_notify = static_mgmt_be_client_connect,
+ .txn_notify = NULL, /* static_mgmt_txn_notify */
+};
+
static const struct frr_yang_module_info *const staticd_yang_modules[] = {
&frr_filter_info,
&frr_interface_info,
@@ -150,6 +201,10 @@ int main(int argc, char **argv, char **envp)
static_zebra_init();
static_vty_init();
+ /* Initialize MGMT backend functionalities */
+ mgmt_lib_hndl = mgmt_be_client_lib_init(&mgmt_params, master);
+ assert(mgmt_lib_hndl);
+
hook_register(routing_conf_event,
routing_control_plane_protocols_name_validate);
diff --git a/staticd/static_routes.c b/staticd/static_routes.c
index 3399686a90..1fbbf7e99d 100644
--- a/staticd/static_routes.c
+++ b/staticd/static_routes.c
@@ -757,30 +757,6 @@ void static_ifindex_update(struct interface *ifp, bool up)
static_ifindex_update_af(ifp, up, AFI_IP6, SAFI_MULTICAST);
}
-void static_get_nh_type(enum static_nh_type stype, char *type, size_t size)
-{
- switch (stype) {
- case STATIC_IFNAME:
- strlcpy(type, "ifindex", size);
- break;
- case STATIC_IPV4_GATEWAY:
- strlcpy(type, "ip4", size);
- break;
- case STATIC_IPV4_GATEWAY_IFNAME:
- strlcpy(type, "ip4-ifindex", size);
- break;
- case STATIC_BLACKHOLE:
- strlcpy(type, "blackhole", size);
- break;
- case STATIC_IPV6_GATEWAY:
- strlcpy(type, "ip6", size);
- break;
- case STATIC_IPV6_GATEWAY_IFNAME:
- strlcpy(type, "ip6-ifindex", size);
- break;
- };
-}
-
struct stable_info *static_get_stable_info(struct route_node *rn)
{
struct route_table *table;
diff --git a/staticd/static_routes.h b/staticd/static_routes.h
index eb7953db2c..4fd7a1342f 100644
--- a/staticd/static_routes.h
+++ b/staticd/static_routes.h
@@ -159,6 +159,31 @@ static_route_info_from_rnode(struct route_node *rn)
return (struct static_route_info *)(rn->info);
}
+static inline void static_get_nh_type(enum static_nh_type stype, char *type,
+ size_t size)
+{
+ switch (stype) {
+ case STATIC_IFNAME:
+ strlcpy(type, "ifindex", size);
+ break;
+ case STATIC_IPV4_GATEWAY:
+ strlcpy(type, "ip4", size);
+ break;
+ case STATIC_IPV4_GATEWAY_IFNAME:
+ strlcpy(type, "ip4-ifindex", size);
+ break;
+ case STATIC_BLACKHOLE:
+ strlcpy(type, "blackhole", size);
+ break;
+ case STATIC_IPV6_GATEWAY:
+ strlcpy(type, "ip6", size);
+ break;
+ case STATIC_IPV6_GATEWAY_IFNAME:
+ strlcpy(type, "ip6-ifindex", size);
+ break;
+ };
+}
+
extern bool mpls_enabled;
extern uint32_t zebra_ecmp_count;
@@ -192,8 +217,6 @@ extern struct static_path *static_add_path(struct route_node *rn,
uint32_t table_id, uint8_t distance);
extern void static_del_path(struct static_path *pn);
-extern void static_get_nh_type(enum static_nh_type stype, char *type,
- size_t size);
extern bool static_add_nexthop_validate(const char *nh_vrf_name,
enum static_nh_type type,
struct ipaddr *ipaddr);
diff --git a/staticd/static_vty.c b/staticd/static_vty.c
index d87ca16c61..bfffbe6a60 100644
--- a/staticd/static_vty.c
+++ b/staticd/static_vty.c
@@ -1452,15 +1452,18 @@ DEFPY_YANG(debug_staticd, debug_staticd_cmd,
"Debug route\n"
"Debug bfd\n")
{
+#ifndef INCLUDE_MGMTD_CMDDEFS_ONLY
/* If no specific category, change all */
if (strmatch(argv[argc - 1]->text, "static"))
static_debug_set(vty->node, !no, true, true, true);
else
static_debug_set(vty->node, !no, !!events, !!route, !!bfd);
+#endif /* ifndef INCLUDE_MGMTD_CMDDEFS_ONLY */
return CMD_SUCCESS;
}
+#ifndef INCLUDE_MGMTD_CMDDEFS_ONLY
DEFPY(staticd_show_bfd_routes, staticd_show_bfd_routes_cmd,
"show bfd static route [json]$isjson",
SHOW_STR
@@ -1496,9 +1499,15 @@ static struct cmd_node debug_node = {
.config_write = static_config_write_debug,
};
+#endif /* ifndef INCLUDE_MGMTD_CMDDEFS_ONLY */
+
void static_vty_init(void)
{
+#ifndef INCLUDE_MGMTD_CMDDEFS_ONLY
install_node(&debug_node);
+ install_element(ENABLE_NODE, &show_debugging_static_cmd);
+ install_element(ENABLE_NODE, &staticd_show_bfd_routes_cmd);
+#endif /* ifndef INCLUDE_MGMTD_CMDDEFS_ONLY */
install_element(CONFIG_NODE, &ip_mroute_dist_cmd);
@@ -1516,9 +1525,6 @@ void static_vty_init(void)
install_element(CONFIG_NODE, &ipv6_route_cmd);
install_element(VRF_NODE, &ipv6_route_vrf_cmd);
- install_element(ENABLE_NODE, &show_debugging_static_cmd);
install_element(ENABLE_NODE, &debug_staticd_cmd);
install_element(CONFIG_NODE, &debug_staticd_cmd);
-
- install_element(ENABLE_NODE, &staticd_show_bfd_routes_cmd);
}