From d130011f96a79c4da794875d333d390b11217436 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 16 Mar 2023 06:29:56 +0100 Subject: [PATCH] mech: common convenience library, currently only XML debug fns Signed-off-by: Joachim Wiberg --- src/mech/Makefile.am | 1 + src/mech/common.am | 5 ++- src/mech/configure.ac | 1 + src/mech/include/common.h | 17 +++++++++ src/mech/src/Makefile.am | 2 +- src/mech/src/common/Makefile.am | 6 +++ src/mech/src/common/common-debug.c | 61 ++++++++++++++++++++++++++++++ 7 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/mech/include/common.h create mode 100644 src/mech/src/common/Makefile.am create mode 100644 src/mech/src/common/common-debug.c diff --git a/src/mech/Makefile.am b/src/mech/Makefile.am index f9285803..76288b01 100644 --- a/src/mech/Makefile.am +++ b/src/mech/Makefile.am @@ -3,6 +3,7 @@ include $(top_srcdir)/common.am SUBDIRS = src yang DISTCLEANFILES = *~ *.d ACLOCAL_AMFLAGS = -I m4 +noinst_HEADERS += include/common.h sysconf_DATA = clixon.xml EXTRA_DIST = NOTICE diff --git a/src/mech/common.am b/src/mech/common.am index 5e998bad..e0f7bc4d 100644 --- a/src/mech/common.am +++ b/src/mech/common.am @@ -1,5 +1,5 @@ CFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter -CPPFLAGS = -I $(top_srcdir)/include/ +CPPFLAGS = -I$(top_srcdir)/include/ clixonlibdir = $(libdir)/clixon backenddir = $(clixonlibdir)/backend @@ -9,6 +9,7 @@ yangdir = $(datarootdir)/clixon backend_LTLIBRARIES = cli_LTLIBRARIES = +noinst_HEADERS = clispec_DATA = yang_DATA = @@ -16,6 +17,6 @@ cli_libadd = -lclixon -lclixon_cli cli_ldflags = -module -avoid-version -shared backend_cflags = $(CFLAGS) $(augeas_CFLAGS) -backend_libadd = $(augeas_LIBS) -lclixon -lclixon_backend +backend_libadd = $(augeas_LIBS) -lclixon -lclixon_backend ../common/common.la backend_ldflags = -module -avoid-version -shared diff --git a/src/mech/configure.ac b/src/mech/configure.ac index 2a6d213f..57472068 100644 --- a/src/mech/configure.ac +++ b/src/mech/configure.ac @@ -10,6 +10,7 @@ AC_CONFIG_FILES([ clixon.xml Makefile src/Makefile + src/common/Makefile src/core/Makefile src/ietf-system/Makefile yang/Makefile diff --git a/src/mech/include/common.h b/src/mech/include/common.h new file mode 100644 index 00000000..c90a742c --- /dev/null +++ b/src/mech/include/common.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +#ifndef MECH_COMMON_H_ +#define MECH_COMMON_H_ + +#include +#include +#include +#include + +/* debug.c */ +void show_xml_node (char *tag, cxobj *node); +void show_xml_node_vec (char *tag, cxobj **node_vec, size_t len); + +void show_transaction (char *tag, transaction_data td, bool show_data); + +#endif /* MECH_COMMON_H_ */ diff --git a/src/mech/src/Makefile.am b/src/mech/src/Makefile.am index 821ea79c..f3e137e2 100644 --- a/src/mech/src/Makefile.am +++ b/src/mech/src/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/common.am -SUBDIRS = core ietf-system +SUBDIRS = common core ietf-system install-exec-hook: find $(DESTDIR)$(clixonlibdir) -name '*.la' -delete diff --git a/src/mech/src/common/Makefile.am b/src/mech/src/common/Makefile.am new file mode 100644 index 00000000..04de5621 --- /dev/null +++ b/src/mech/src/common/Makefile.am @@ -0,0 +1,6 @@ +include $(top_srcdir)/common.am + +noinst_LTLIBRARIES = common.la +common_la_LDFLAGS = $(cli_ldflags) +common_la_LIBADD = $(cli_libadd) +common_la_SOURCES = common-debug.c diff --git a/src/mech/src/common/common-debug.c b/src/mech/src/common/common-debug.c new file mode 100644 index 00000000..59e1ed48 --- /dev/null +++ b/src/mech/src/common/common-debug.c @@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +#include +#include "common.h" + +#define MAX_INDENT 128 + + +static char* indent_str(size_t indent) +{ + static char str[MAX_INDENT + 1]; + + for (size_t i = 0; i < indent; i++) + str[i] = ' '; + str[indent] = '\0'; + + return str; +} + +static void show_indented_xml_node(char *tag, cxobj *node, size_t indent) +{ + cxobj *child = NULL; + + if (!xml_body_get(node)) + clicon_log(LOG_DEBUG, "%s: %s%s", tag, indent_str(indent), xml_name(node)); + else + clicon_log(LOG_DEBUG, "%s: %s%s = %s", tag, indent_str(indent), xml_name(node), xml_body(node)); + + while ((child = xml_child_each(node, child, CX_ELMNT))) + show_indented_xml_node(tag, child, indent + 2); +} + +void show_xml_node(char *tag, cxobj *node) +{ + show_indented_xml_node(tag, node, 4); +} + +void show_xml_node_vec(char *tag, cxobj **node_vec, size_t len) +{ + for (size_t i = 0; i < len; i++) + show_indented_xml_node(tag, node_vec[i], 4); +} + +void show_transaction(char *tag, transaction_data td, bool show_data) +{ + clicon_log(LOG_DEBUG, "%s: transaction ID = %lu", tag, transaction_id(td)); + if (show_data) { + clicon_log(LOG_DEBUG, "%s: transaction source:", tag); + show_xml_node(tag, transaction_src(td)); + clicon_log(LOG_DEBUG, "%s: transaction target:", tag); + show_xml_node(tag, transaction_target(td)); + clicon_log(LOG_DEBUG, "%s: transaction deleted:", tag); + show_xml_node_vec(tag, transaction_dvec(td), transaction_dlen(td)); + clicon_log(LOG_DEBUG, "%s: transaction added:", tag); + show_xml_node_vec(tag, transaction_avec(td), transaction_alen(td)); + clicon_log(LOG_DEBUG, "%s: transaction changed source:", tag); + show_xml_node_vec(tag, transaction_scvec(td), transaction_clen(td)); + clicon_log(LOG_DEBUG, "%s: transaction changed target:", tag); + show_xml_node_vec(tag, transaction_tcvec(td), transaction_clen(td)); + } +}