summaryrefslogtreecommitdiffstats
path: root/staticd/static_debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'staticd/static_debug.c')
-rw-r--r--staticd/static_debug.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/staticd/static_debug.c b/staticd/static_debug.c
new file mode 100644
index 0000000..a65752c
--- /dev/null
+++ b/staticd/static_debug.c
@@ -0,0 +1,123 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Staticd debug related functions
+ * Copyright (C) 2019 Volta Networks Inc.
+ * Mark Stapp
+ */
+
+#include <zebra.h>
+
+#include "lib/command.h"
+#include "lib/debug.h"
+#include "lib/bfd.h"
+
+#include "static_debug.h"
+
+/*
+ * Debug infra: a debug struct for each category, and a corresponding
+ * string.
+ */
+
+/* clang-format off */
+struct debug static_dbg_events = {0, "Staticd events"};
+struct debug static_dbg_route = {0, "Staticd route"};
+struct debug static_dbg_bfd = {0, "Staticd bfd"};
+
+struct debug *static_debug_arr[] = {
+ &static_dbg_events,
+ &static_dbg_route,
+ &static_dbg_bfd
+};
+
+const char *static_debugs_conflines[] = {
+ "debug static events",
+ "debug static route",
+ "debug static bfd"
+};
+/* clang-format on */
+
+
+/*
+ * Set or unset all staticd debugs
+ *
+ * flags
+ * The flags to set
+ *
+ * set
+ * Whether to set or unset the specified flags
+ */
+static void static_debug_set_all(uint32_t flags, bool set)
+{
+ for (unsigned int i = 0; i < array_size(static_debug_arr); i++) {
+ DEBUG_FLAGS_SET(static_debug_arr[i], flags, set);
+
+ /* if all modes have been turned off, don't preserve options */
+ if (!DEBUG_MODE_CHECK(static_debug_arr[i], DEBUG_MODE_ALL))
+ DEBUG_CLEAR(static_debug_arr[i]);
+ }
+}
+
+static int static_debug_config_write_helper(struct vty *vty, bool config)
+{
+ uint32_t mode = DEBUG_MODE_ALL;
+
+ if (config)
+ mode = DEBUG_MODE_CONF;
+
+ for (unsigned int i = 0; i < array_size(static_debug_arr); i++)
+ if (DEBUG_MODE_CHECK(static_debug_arr[i], mode))
+ vty_out(vty, "%s\n", static_debugs_conflines[i]);
+
+ return 0;
+}
+
+int static_config_write_debug(struct vty *vty)
+{
+ return static_debug_config_write_helper(vty, true);
+}
+
+int static_debug_status_write(struct vty *vty)
+{
+ return static_debug_config_write_helper(vty, false);
+}
+
+/*
+ * Set debugging status.
+ *
+ * vtynode
+ * vty->node
+ *
+ * onoff
+ * Whether to turn the specified debugs on or off
+ *
+ * events
+ * Debug general internal events
+ *
+ */
+void static_debug_set(int vtynode, bool onoff, bool events, bool route,
+ bool bfd)
+{
+ uint32_t mode = DEBUG_NODE2MODE(vtynode);
+
+ if (events)
+ DEBUG_MODE_SET(&static_dbg_events, mode, onoff);
+ if (route)
+ DEBUG_MODE_SET(&static_dbg_route, mode, onoff);
+ if (bfd) {
+ DEBUG_MODE_SET(&static_dbg_bfd, mode, onoff);
+ bfd_protocol_integration_set_debug(onoff);
+ }
+}
+
+/*
+ * Debug lib initialization
+ */
+
+struct debug_callbacks static_dbg_cbs = {
+ .debug_set_all = static_debug_set_all
+};
+
+void static_debug_init(void)
+{
+ debug_init(&static_dbg_cbs);
+}