# define AOK 0
#endif
+/* Enable test dataplane provider */
+/*#define DPLANE_TEST_PROVIDER 1 */
+
/* Default value for max queued incoming updates */
const uint32_t DPLANE_DEFAULT_MAX_QUEUED = 200;
-
/* Default value for new work per cycle */
const uint32_t DPLANE_DEFAULT_NEW_WORK = 100;
*/
int dplane_provider_work_ready(void)
{
- thread_add_event(zdplane_info.dg_master,
- dplane_thread_loop, NULL, 0,
- &zdplane_info.dg_t_update);
+ /* Note that during zebra startup, we may be offered work before
+ * the dataplane pthread (and thread-master) are ready. We want to
+ * enqueue the work, but the event-scheduling machinery may not be
+ * available.
+ */
+ if (zdplane_info.dg_run) {
+ thread_add_event(zdplane_info.dg_master,
+ dplane_thread_loop, NULL, 0,
+ &zdplane_info.dg_t_update);
+ }
return AOK;
}
return 0;
}
+#if DPLANE_TEST_PROVIDER
+
/*
* Test dataplane provider plugin
*/
return 0;
}
+#endif /* DPLANE_TEST_PROVIDER */
/*
* Register default kernel provider
zlog_err("Unable to register kernel dplane provider: %d",
ret);
- /* TODO -- make the test provider optional... */
+#if DPLANE_TEST_PROVIDER
+ /* Optional test provider ... */
ret = dplane_provider_register("Test",
DPLANE_PRIO_PRE_KERNEL,
DPLANE_PROV_FLAGS_DEFAULT,
if (ret != AOK)
zlog_err("Unable to register test dplane provider: %d",
ret);
+#endif /* DPLANE_TEST_PROVIDER */
}
/* Indicates zebra shutdown/exit is in progress. Some operations may be
/* Register default kernel 'provider' during init */
dplane_provider_init();
+}
+/*
+ * Start the dataplane pthread. This step needs to be run later than the
+ * 'init' step, in case zebra has fork-ed.
+ */
+void zebra_dplane_start(void)
+{
/* Start dataplane pthread */
- zdplane_info.dg_run = true;
-
struct frr_pthread_attr pattr = {
.start = frr_pthread_attr_default.start,
.stop = frr_pthread_attr_default.stop
zdplane_info.dg_master = zdplane_info.dg_pthread->master;
+ zdplane_info.dg_run = true;
+
/* Enqueue an initial event for the dataplane pthread */
thread_add_event(zdplane_info.dg_master, dplane_thread_loop, NULL, 0,
&zdplane_info.dg_t_update);