Break out the broom for some cleanup work 61/19861/2
authorDave Barach <dave@barachs.net>
Tue, 28 May 2019 20:31:05 +0000 (16:31 -0400)
committerDamjan Marion <dmarion@me.com>
Wed, 29 May 2019 07:51:19 +0000 (07:51 +0000)
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>
MAINTAINERS
extras/emacs/plugin-h-skel.el
extras/emacs/plugin-main-skel.el
extras/emacs/plugin-periodic-skel.el
src/vlib/node.c
src/vlib/node_funcs.h

index b58d537..d934297 100644 (file)
@@ -14,15 +14,13 @@ Descriptions of section entries:
 Build System
 M:     Damjan Marion <damarion@cisco.com>
 F:     Makefile
-F:     src/*.ac
-F:     src/*.am
-F:     src/*.mk
-F:     src/m4/
+F:     src/CMakeLists.txt
+F:     src/cmake/
 
 Build System Internal
 M:     Dave Barach <dave@barachs.net>
 F:     build-root/Makefile
-F:     build-data/*
+F:     build-data/
 
 Doxygen
 M:     Chris Luke <chrisy@flirble.org>
@@ -42,12 +40,12 @@ Infrastructure Library
 M:     Dave Barach <dave@barachs.net>
 F:     src/vppinfra/
 
-VLIB Library
+Vector Library
 M:     Dave Barach <dave@barachs.net>
 M:     Damjan Marion <damarion@cisco.com>
 F:     src/vlib/
 
-VLIB API Libraries
+Binary API Libraries
 M:     Dave Barach <dave@barachs.net>
 F:     src/vlibapi/
 F:     src/vlibmemory/
@@ -126,7 +124,6 @@ M:  John Lo <loj@cisco.com>
 F:     src/vnet/vxlan/
 
 VNET VXLAN-GPE
-M:     Keith Burns <alagalah@gmail.com>
 M:     Hongjun Ni <hongjun.ni@intel.com>
 F:     src/vnet/vxlan-gpe/
 
@@ -144,50 +141,48 @@ F:        src/plugins/tlsmbedtls
 Plugin - ACL
 M:     Andrew Yourtchenko <ayourtch@gmail.com>
 F:     src/plugins/acl/
-F:     src/plugins/acl.am
 
 Plugin - flowprobe
 M:     Ole Troan <otroan@employees.org>
 F:     src/plugins/flowprobe/
-F:     src/plugins/flowprobe.am
 
 Plugin - GTPU
 M:     Hongjun Ni <hongjun.ni@intel.com>
 F:     src/plugins/gtpu/
-F:     src/plugins/gtpu.am
 
 Plugin - PPPoE
 M:     Hongjun Ni <hongjun.ni@intel.com>
 F:     src/plugins/pppoe/
-F:     src/plugins/pppoe.am
 
 Plugin - IPv6 Segment Routing Dynamic Proxy
 M:     Francois Clad <fclad@cisco.com>
 F:     src/plugins/srv6-ad/
-F:     src/plugins/srv6_ad.am
 
 Plugin - IPv6 Segment Routing Masquerading Proxy
 M:     Francois Clad <fclad@cisco.com>
 F:     src/plugins/srv6-am/
-F:     src/plugins/srv6_am.am
 
 Plugin - IPv6 Segment Routing Static Proxy
 M:     Francois Clad <fclad@cisco.com>
 F:     src/plugins/srv6-as/
-F:     src/plugins/srv6_as.am
 
 Plugin - Load Balancer
 M:      Pierre Pfister <ppfister@cisco.com>
 M:      Hongjun Ni <hongjun.ni@intel.com>
 F:      src/plugins/lb/
-F:      src/plugins/lb.am
 
 Plugin - NSH
 M:      Hongjun Ni <hongjun.ni@intel.com>
-M:      Keith Burns <alagalah@gmail.com>
 M:      Vengada <venggovi@cisco.com>
 F:      src/plugins/nsh/
-F:      src/plugins/nsh.am
+
+Plugin - Time-based MAC filter
+M:     Dave Barach <dave@barachs.net>
+F:      src/plugins/mactime/
+
+Plugin - Network Delay Simulator
+M:     Dave Barach <dave@barachs.net>
+F:      src/plugins/nsim/
 
 Test Infrastructure
 M:     Klement Sekera <ksekera@cisco.com>
index b3fa646..2165510 100644 (file)
@@ -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__ */
 
 /*
index 31b258e..873f72d 100644 (file)
@@ -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;
 }
 
index ff1d94e..6f5675e 100644 (file)
@@ -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 "
index 49c7a40..44a3a3e 100644 (file)
@@ -757,6 +757,34 @@ done:
   return error;
 }
 
+u32
+vlib_process_create (vlib_main_t * vm, char *name,
+                    vlib_node_function_t * f, u32 log2_n_stack_bytes)
+{
+  vlib_node_registration_t r;
+  vlib_node_t *n;
+
+  memset (&r, 0, sizeof (r));
+
+  r.name = (char *) format (0, "%s", name, 0);
+  r.function = f;
+  r.process_log2_n_stack_bytes = log2_n_stack_bytes;
+  r.type = VLIB_NODE_TYPE_PROCESS;
+
+  vlib_worker_thread_barrier_sync (vm);
+
+  vlib_register_node (vm, &r);
+  vec_free (r.name);
+
+  vlib_worker_thread_node_runtime_update ();
+  vlib_worker_thread_barrier_release (vm);
+
+  n = vlib_get_node (vm, r.index);
+  vlib_start_process (vm, n->runtime_index);
+
+  return (r.index);
+}
+
 /*
  * fd.io coding-style-patch-verification: ON
  *
index bf11a0e..c9ff93d 100644 (file)
@@ -1186,6 +1186,16 @@ vlib_node_increment_counter (vlib_main_t * vm, u32 node_index,
   em->counters[node_counter_base_index + counter_index] += increment;
 }
 
+/** @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
+ */
+u32 vlib_process_create (vlib_main_t * vm, char *name,
+                        vlib_node_function_t * f, u32 log2_n_stack_bytes);
+
 #endif /* included_vlib_node_funcs_h */
 
 /*