aboutsummaryrefslogtreecommitdiffstats
path: root/extras/emacs
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-05-28 16:31:05 -0400
committerDamjan Marion <dmarion@me.com>2019-05-29 07:51:19 +0000
commit11965c7b47670da7d02eb2c543be52008c66848e (patch)
treea744cc380bf8d91f8aa235b7bbe31f5e5110e600 /extras/emacs
parent4d376f67a6e259e747dbbd4551578657663840f7 (diff)
Break out the broom for some cleanup work
Maintain the MAINTAINERS file. Removed src/plugins/*.am listings. Added a couple of plugins. Add vlib_process_create (vlib_main_t *vm, char *name, vlib_node_function_t *f, u32 log2_n_stack_bytes); /** @brief Create a vlib process * @param vm &vlib_global_main * @param f the process node function * @param log2_n_stack_bytes size of the process stack, defaults to 16K * @return newly-create node index * @warning call only on the main thread. Barrier sync required. */ This function makes it easy to spin up periodic processes when features are enabled for the first time. That coding pattern is highly recommended. Update the emacs-lisp plugin generator to use vlib_process_create, instead of generating static periodic process nodes. Change-Id: Icda33e93b9034779d3a3e228cd1110af14b058a5 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'extras/emacs')
-rw-r--r--extras/emacs/plugin-h-skel.el6
-rw-r--r--extras/emacs/plugin-main-skel.el8
-rw-r--r--extras/emacs/plugin-periodic-skel.el30
3 files changed, 27 insertions, 17 deletions
diff --git a/extras/emacs/plugin-h-skel.el b/extras/emacs/plugin-h-skel.el
index b3fa6460bd2..21655109588 100644
--- a/extras/emacs/plugin-h-skel.el
+++ b/extras/emacs/plugin-h-skel.el
@@ -24,7 +24,7 @@ nil
'(setq capital-oh-en "ON")
"
/*
- * " plugin-name ".h - skeleton vpp engine plug-in header file
+ * " plugin-name ".h - skeleton vpp engine plug-in header file
*
* Copyright (c) <current-year> <your-organization>
* Licensed under the Apache License, Version 2.0 (the \"License\");
@@ -55,6 +55,8 @@ typedef struct {
/* on/off switch for the periodic function */
u8 periodic_timer_enabled;
+ /* Node index, non-zero if the periodic process has been created */
+ u32 periodic_node_index;
/* convenience */
vlib_main_t * vlib_main;
@@ -72,6 +74,8 @@ extern vlib_node_registration_t " plugin-name "_periodic_node;
#define " PLUGIN-NAME "_EVENT2 2
#define " PLUGIN-NAME "_EVENT_PERIODIC_ENABLE_DISABLE 3
+void " plugin-name "_create_periodic_process (" plugin-name "_main_t *);
+
#endif /* __included_" plugin-name "_h__ */
/*
diff --git a/extras/emacs/plugin-main-skel.el b/extras/emacs/plugin-main-skel.el
index 31b258eb11f..873f72da39d 100644
--- a/extras/emacs/plugin-main-skel.el
+++ b/extras/emacs/plugin-main-skel.el
@@ -100,14 +100,16 @@ int " plugin-name "_enable_disable (" plugin-name "_main_t * " main-p ", u32 sw_
if (sw->type != VNET_SW_INTERFACE_TYPE_HARDWARE)
return VNET_API_ERROR_INVALID_SW_IF_INDEX;
+ " plugin-name "_create_periodic_process (" main-p ");
+
vnet_feature_enable_disable (\"device-input\", \"" plugin-name "\",
sw_if_index, enable_disable, 0, 0);
/* Send an event to enable/disable the periodic scanner process */
- vlib_process_signal_event (" main-p "->vlib_main, " plugin-name"_periodic_node.index,
- " PLUGIN-NAME"_EVENT_PERIODIC_ENABLE_DISABLE,
+ vlib_process_signal_event (" main-p "->vlib_main,
+ " main-p"->periodic_node_index,
+ " PLUGIN-NAME"_EVENT_PERIODIC_ENABLE_DISABLE,
(uword)enable_disable);
-
return rv;
}
diff --git a/extras/emacs/plugin-periodic-skel.el b/extras/emacs/plugin-periodic-skel.el
index ff1d94e02b4..6f5675eb799 100644
--- a/extras/emacs/plugin-periodic-skel.el
+++ b/extras/emacs/plugin-periodic-skel.el
@@ -22,8 +22,9 @@ nil
(setq plugin-name (read-string "Plugin name: ")))
'(setq PLUGIN-NAME (upcase plugin-name))
'(setq capital-oh-en "ON")
+'(setq main-p (concat (substring plugin-name 0 1) "mp"))
"/*
- * " plugin-name "_periodic.c - skeleton plug-in periodic function
+ * " plugin-name "_periodic.c - skeleton plug-in periodic function
*
* Copyright (c) <current-year> <your-organization>
* Licensed under the Apache License, Version 2.0 (the \"License\");
@@ -43,22 +44,22 @@ nil
#include <vppinfra/error.h>
#include <" plugin-name "/" plugin-name ".h>
-static void
+static void
handle_event1 (" plugin-name "_main_t *pm, f64 now, uword event_data)
{
clib_warning (\"received " PLUGIN-NAME "_EVENT1\");
}
-
-static void
+
+static void
handle_event2 (" plugin-name "_main_t *pm, f64 now, uword event_data)
{
clib_warning (\"received " PLUGIN-NAME "_EVENT2\");
}
-
+
static void
handle_periodic_enable_disable (" plugin-name"_main_t *pm, f64 now, uword event_data)
{
- clib_warning (\"Periodic timeouts now %s\",
+ clib_warning (\"Periodic timeouts now %s\",
event_data ? \"enabled\" : \"disabled\");
pm->periodic_timer_enabled = event_data;
}
@@ -120,14 +121,17 @@ static uword
return 0; /* or not */
}
-/* *INDENT-OFF* */
-VLIB_REGISTER_NODE ("plugin-name"_periodic_node) =
+void " plugin-name "_create_periodic_process (" plugin-name "_main_t *" main-p")
{
- .function = " plugin-name "_periodic_process,
- .type = VLIB_NODE_TYPE_PROCESS,
- .name = \"" plugin-name "-periodic-process\",
-};
-/* *INDENT-ON* */
+ /* Already created the process node? */
+ if (" main-p "->periodic_node_index > 0)
+ return;
+
+ /* No, create it now and make a note of the node index */
+ " main-p "->periodic_node_index = vlib_process_create (" main-p "->vlib_main,
+ \"" plugin-name "-periodic-process\",
+ " plugin-name "_periodic_process, 16 /* log2_n_stack_bytes */);
+}
/*
* fd.io coding-style-patch-verification: " capital-oh-en "