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>
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/
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/
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>
'(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\");
/* 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;
#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__ */
/*
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;
}
(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\");
#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;
}
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 "
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
*
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 */
/*