]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib, sharpd, vtysh: When reading a file in for config send start/end indicators
authorDonald Sharp <sharpd@nvidia.com>
Fri, 30 Oct 2020 18:10:55 +0000 (14:10 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Thu, 19 Nov 2020 14:52:11 +0000 (09:52 -0500)
When reading a file in for configuration, send start and end indicators
to interested parties.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
lib/command.h
lib/lib_vty.c
sharpd/sharp_main.c
vtysh/vtysh_config.c

index bb007b08683af952007481eaa1c04da5df104a4c..e529239f650d5c3c854c35fd56eaeeb2edda052c 100644 (file)
@@ -530,7 +530,9 @@ extern int cmd_execute_command(vector, struct vty *,
                               const struct cmd_element **, int);
 extern int cmd_execute_command_strict(vector, struct vty *,
                                      const struct cmd_element **);
-extern void cmd_init(int);
+extern void cmd_init(int terminal);
+extern void cmd_init_config_callbacks(void (*start_config)(void),
+                                     void (*end_config)(void));
 extern void cmd_terminate(void);
 extern void cmd_exit(struct vty *vty);
 extern int cmd_list_cmds(struct vty *vty, int do_permute);
index 9c927ca4af99cae02c2091771516731656df9a58..7a8f85b2c9081ec00c4fb39c938dc93bc17436bf 100644 (file)
@@ -212,6 +212,41 @@ DEFUN (frr_version,
        return CMD_SUCCESS;
 }
 
+static struct call_back {
+       void (*start_config)(void);
+       void (*end_config)(void);
+} callback;
+
+DEFUN_HIDDEN (start_config,
+             start_config_cmd,
+             "start_configuration",
+             "The Beginning of Configuration\n")
+{
+       if (callback.start_config)
+               (*callback.start_config)();
+
+       return CMD_SUCCESS;
+}
+
+DEFUN_HIDDEN (end_config,
+             end_config_cmd,
+             "end_configuration",
+             "The End of Configuration\n")
+{
+       if (callback.end_config)
+               (*callback.end_config)();
+
+       return CMD_SUCCESS;
+}
+
+void cmd_init_config_callbacks(void (*start_config)(void),
+                              void (*end_config)(void))
+{
+       callback.start_config = start_config;
+       callback.end_config = end_config;
+}
+
+
 static void defaults_autocomplete(vector comps, struct cmd_token *token)
 {
        const char **p;
@@ -234,6 +269,9 @@ void lib_cmd_init(void)
 
        install_element(VIEW_NODE, &show_memory_cmd);
        install_element(VIEW_NODE, &show_modules_cmd);
+
+       install_element(CONFIG_NODE, &start_config_cmd);
+       install_element(CONFIG_NODE, &end_config_cmd);
 }
 
 /* Stats querying from users */
index 4cd92c7f3d72688f9f87d169a8587e71446cab3c..fe7f9851f9015d4e40df28083edd3bef46d271c9 100644 (file)
@@ -139,6 +139,16 @@ static void sharp_global_init(void)
        sg.nhs = list_new();
 }
 
+static void sharp_start_configuration(void)
+{
+       zlog_debug("Configuration has started to be read");
+}
+
+static void sharp_end_configuration(void)
+{
+       zlog_debug("Configuration has finished being read");
+}
+
 int main(int argc, char **argv, char **envp)
 {
        frr_preinit(&sharpd_di, argc, argv);
@@ -163,6 +173,8 @@ int main(int argc, char **argv, char **envp)
 
        master = frr_init();
 
+       cmd_init_config_callbacks(sharp_start_configuration,
+                                 sharp_end_configuration);
        sharp_global_init();
 
        sharp_nhgroup_init();
index 4b6c648d2fa46b9076e05856a3ac7b61dd24e823..7dcf0198882200b44142f346d55e0f51ec121809 100644 (file)
@@ -526,9 +526,13 @@ static int vtysh_read_file(FILE *confp)
        vtysh_execute_no_pager("enable");
        vtysh_execute_no_pager("configure terminal");
 
+       vtysh_execute_no_pager("start_configuration");
+
        /* Execute configuration file. */
        ret = vtysh_config_from_file(vty, confp);
 
+       vtysh_execute_no_pager("end_configuration");
+
        vtysh_execute_no_pager("end");
        vtysh_execute_no_pager("disable");