]> git.proxmox.com Git - mirror_frr.git/blobdiff - staticd/static_main.c
mgmtd: Enroll Staticd as a backend client for MGMTD
[mirror_frr.git] / staticd / static_main.c
index 0d0de7e8d317b34423f68266d815966d2624c9b4..d429162196c5c79579fec113473cb611764b6b7a 100644 (file)
@@ -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);