From 5e26c82787519183ba6615d6a969d72fd77e7a43 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Fri, 1 Dec 2023 15:55:22 +0100 Subject: [PATCH] buildroot: bump to latest kkit branch for ugprades of sysrepo et al Signed-off-by: Joachim Wiberg --- buildroot | 2 +- ...as-copy-from-only-in-rpc-copy-config.patch | 27 +++ .../netopeer2-server-foreground.patch | 79 -------- ...dd-support-for-running-in-foregroun.patch} | 33 ++-- ...all_modules-to-use-ly_ctx_load_modu.patch} | 25 +-- ...loading-etc-sysrepo-factory-default.patch} | 10 +- ...allow-custom-start-data-for-internal.patch | 186 ------------------ ...-add-support-for-Cfactory-d-running.patch} | 24 +-- 8 files changed, 78 insertions(+), 308 deletions(-) create mode 100644 patches/netopeer2/0001-Allow-factory-as-copy-from-only-in-rpc-copy-config.patch delete mode 100644 patches/netopeer2/netopeer2-server-foreground.patch rename patches/sysrepo/{0001-sysrepo-plugind-foreground.patch => 0001-sysrepo-plugind-add-support-for-running-in-foregroun.patch} (71%) rename patches/sysrepo/{0002-sr_install_module_support_include_and_searchpath.patch => 0002-Refactor-_sr_install_modules-to-use-ly_ctx_load_modu.patch} (86%) rename patches/sysrepo/{0004-Add-support-for-loading-etc-sysrepo-factory-default.patch => 0003-Add-support-for-loading-etc-sysrepo-factory-default.patch} (93%) delete mode 100644 patches/sysrepo/0003-lyd-mods-UPDATE-allow-custom-start-data-for-internal.patch rename patches/sysrepo/{0005-sysrepoctl-add-support-for-Cfactory-d-running.patch => 0004-sysrepoctl-add-support-for-Cfactory-d-running.patch} (73%) diff --git a/buildroot b/buildroot index b7cdb9b4..f5435bd0 160000 --- a/buildroot +++ b/buildroot @@ -1 +1 @@ -Subproject commit b7cdb9b4b8f45c75da44bf4067b304cd326e54bd +Subproject commit f5435bd048de14e43bd9a5b887897606a13252b9 diff --git a/patches/netopeer2/0001-Allow-factory-as-copy-from-only-in-rpc-copy-config.patch b/patches/netopeer2/0001-Allow-factory-as-copy-from-only-in-rpc-copy-config.patch new file mode 100644 index 00000000..8897cbfb --- /dev/null +++ b/patches/netopeer2/0001-Allow-factory-as-copy-from-only-in-rpc-copy-config.patch @@ -0,0 +1,27 @@ +From 1175168ef202c32ce07a674b0c14678c5c130274 Mon Sep 17 00:00:00 2001 +From: Joachim Wiberg +Date: Thu, 22 Jun 2023 10:24:57 +0200 +Subject: [PATCH] Allow 'factory' as copy-from (only) in rpc copy-config +Organization: Addiva Elektronik + +Signed-off-by: Joachim Wiberg +--- + src/netconf.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/netconf.c b/src/netconf.c +index 840debb..fa778d5 100644 +--- a/src/netconf.c ++++ b/src/netconf.c +@@ -332,6 +332,8 @@ np2srv_rpc_copyconfig_cb(sr_session_ctx_t *session, uint32_t UNUSED(sub_id), con + ds = SR_DS_STARTUP; + } else if (!strcmp(nodeset->dnodes[0]->schema->name, "candidate")) { + ds = SR_DS_CANDIDATE; ++ } else if (!strcmp(nodeset->dnodes[0]->schema->name, "factory")) { ++ ds = SR_DS_FACTORY_DEFAULT; /* only allowed as copy-from */ + } else { + assert(!strcmp(nodeset->dnodes[0]->schema->name, "url")); + #ifdef NP2SRV_URL_CAPAB +-- +2.34.1 + diff --git a/patches/netopeer2/netopeer2-server-foreground.patch b/patches/netopeer2/netopeer2-server-foreground.patch deleted file mode 100644 index d8486d83..00000000 --- a/patches/netopeer2/netopeer2-server-foreground.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 519b1368bf36cda4bc761c6390697cc730e73f63 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Wed, 24 May 2023 06:55:41 +0200 -Subject: [PATCH] netopeer2-server: add support for running in foreground with - syslog -Organization: Addiva Elektronik - -Signed-off-by: Joachim Wiberg ---- - doc/netopeer2-server.8 | 7 +++++-- - src/main.c | 9 +++++++-- - 2 files changed, 12 insertions(+), 4 deletions(-) - -diff --git a/doc/netopeer2-server.8 b/doc/netopeer2-server.8 -index 4caf0f7..617c552 100644 ---- a/doc/netopeer2-server.8 -+++ b/doc/netopeer2-server.8 -@@ -2,13 +2,13 @@ - .\" groff -man -Tascii netopeer2-server.8 - .\" - --.TH "netopeer2-server" 8 "2021-11-10" "Netopeer" -+.TH "netopeer2-server" 8 "2023-05-25" "Netopeer" - .SH NAME - netopeer2-server \- NETCONF server daemon build on libnetconf2 with sysrepo datastore - . - .SH SYNOPSIS - .B netopeer2-server --[\fB-dhV\fP] [\fB-p\fP \fIPATH\fP] [\fB-U\fP[\fIPATH\fP]] [\fB-m\fP \fIMODE\fP] [\fB-u\fP \fIUID\fP] -+[\fB-dFhV\fP] [\fB-p\fP \fIPATH\fP] [\fB-U\fP[\fIPATH\fP]] [\fB-m\fP \fIMODE\fP] [\fB-u\fP \fIUID\fP] - [\fB-g\fP \fIGID\fP] [\fB-t\fP \fITIMEOUT\fP] [\fB-v\fP \fILEVEL\fP] [\fB-c\fP \fICATEGORY\fP] - .br - . -@@ -22,6 +22,9 @@ YANG module data in sysrepo. - .BR "\-d" - Debug mode (do not daemonize and print verbose messages to stderr instead of syslog). - .TP -+.BR "\-F" -+Run in foreground (do not daemonize) and log to syslog. -+.TP - .BR "\-h" - Display help. - .TP -diff --git a/src/main.c b/src/main.c -index 59cc87e..b210d40 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -1078,9 +1078,10 @@ print_version(void) - static void - print_usage(char *progname) - { -- fprintf(stdout, "Usage: %s [-dhV] [-p PATH] [-U[PATH]] [-m MODE] [-u UID] [-g GID] [-t TIMEOUT] [-x PATH]\n", progname); -+ fprintf(stdout, "Usage: %s [-dFhV] [-p PATH] [-U[PATH]] [-m MODE] [-u UID] [-g GID] [-t TIMEOUT] [-x PATH]\n", progname); - fprintf(stdout, " [-v LEVEL] [-c CATEGORY]\n"); - fprintf(stdout, " -d Debug mode (do not daemonize and print verbose messages to stderr instead of syslog).\n"); -+ fprintf(stdout, " -F Run in foreground, like -d, but log to syslog.\n"); - fprintf(stdout, " -h Display help.\n"); - fprintf(stdout, " -V Show program version.\n"); - fprintf(stdout, " -p PATH Path to pidfile (default path is \"%s\").\n", NP2SRV_PID_FILE_PATH); -@@ -1152,11 +1153,15 @@ main(int argc, char *argv[]) - np2srv.server_dir = SERVER_DIR; - - /* process command line options */ -- while ((c = getopt(argc, argv, "dhVp:f:U::m:u:g:n:i:t:x:v:c:")) != -1) { -+ while ((c = getopt(argc, argv, "dFhVp:f:U::m:u:g:n:i:t:x:v:c:")) != -1) { - switch (c) { - case 'd': - daemonize = 0; - break; -+ case 'F': -+ daemonize = 0; -+ np2_stderr_log = 0; -+ break; - case 'h': - print_usage(argv[0]); - return EXIT_SUCCESS; --- -2.34.1 - diff --git a/patches/sysrepo/0001-sysrepo-plugind-foreground.patch b/patches/sysrepo/0001-sysrepo-plugind-add-support-for-running-in-foregroun.patch similarity index 71% rename from patches/sysrepo/0001-sysrepo-plugind-foreground.patch rename to patches/sysrepo/0001-sysrepo-plugind-add-support-for-running-in-foregroun.patch index 827cfded..708d3bf5 100644 --- a/patches/sysrepo/0001-sysrepo-plugind-foreground.patch +++ b/patches/sysrepo/0001-sysrepo-plugind-add-support-for-running-in-foregroun.patch @@ -1,16 +1,20 @@ -commit 6fc440089353d76a9b8cb7c480402ee911a1387d -Author: Joachim Wiberg -Date: Tue Mar 28 10:37:53 2023 +0200 +From 49c660c412342e1af76735e75cd3f286ae655b82 Mon Sep 17 00:00:00 2001 +From: Joachim Wiberg +Date: Tue, 28 Mar 2023 10:37:53 +0200 +Subject: [PATCH 1/4] sysrepo-plugind: add support for running in foreground + with syslog +Organization: Addiva Elektronik - sysrepo-plugind: add support for running in foreground with syslog - - Signed-off-by: Joachim Wiberg +Signed-off-by: Joachim Wiberg +--- + src/executables/sysrepo-plugind.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/executables/sysrepo-plugind.c b/src/executables/sysrepo-plugind.c -index bd584ed5..3079a855 100644 +index 9ab59cb3..e689f930 100644 --- a/src/executables/sysrepo-plugind.c +++ b/src/executables/sysrepo-plugind.c -@@ -97,6 +97,7 @@ help_print(void) +@@ -98,6 +98,7 @@ help_print(void) " Change verbosity to a level (none, error, warning, info, debug) or\n" " number (0, 1, 2, 3, 4).\n" " -d, --debug Debug mode - is not daemonized and logs to stderr instead of syslog.\n" @@ -18,7 +22,7 @@ index bd584ed5..3079a855 100644 " -P, --plugin-install \n" " Install a sysrepo-plugind plugin. The plugin is simply copied\n" " to the designated plugin directory.\n" -@@ -200,6 +201,8 @@ daemon_init(int debug, sr_log_level_t log_level) +@@ -201,6 +202,8 @@ daemon_init(int debug, sr_log_level_t log_level) if (debug) { handle_signals(); @@ -27,7 +31,7 @@ index bd584ed5..3079a855 100644 sr_log_stderr(log_level); return; } -@@ -240,6 +243,7 @@ daemon_init(int debug, sr_log_level_t log_level) +@@ -241,6 +244,7 @@ daemon_init(int debug, sr_log_level_t log_level) close(fd); } @@ -35,7 +39,7 @@ index bd584ed5..3079a855 100644 /* set verbosity */ sr_log_syslog("sysrepo-plugind", log_level); } -@@ -459,6 +463,7 @@ main(int argc, char **argv) +@@ -466,6 +470,7 @@ main(int argc, char **argv) {"version", no_argument, NULL, 'V'}, {"verbosity", required_argument, NULL, 'v'}, {"debug", no_argument, NULL, 'd'}, @@ -43,7 +47,7 @@ index bd584ed5..3079a855 100644 {"plugin-install", required_argument, NULL, 'P'}, {"pid-file", required_argument, NULL, 'p'}, {"fatal-plugin-fail", no_argument, NULL, 'f'}, -@@ -467,7 +472,7 @@ main(int argc, char **argv) +@@ -474,7 +479,7 @@ main(int argc, char **argv) /* process options */ opterr = 0; @@ -52,7 +56,7 @@ index bd584ed5..3079a855 100644 switch (opt) { case 'h': version_print(); -@@ -499,6 +504,9 @@ main(int argc, char **argv) +@@ -506,6 +511,9 @@ main(int argc, char **argv) case 'd': debug = 1; break; @@ -62,3 +66,6 @@ index bd584ed5..3079a855 100644 case 'P': /* plugin-install */ if (get_plugins_dir(&plugins_dir)) { +-- +2.34.1 + diff --git a/patches/sysrepo/0002-sr_install_module_support_include_and_searchpath.patch b/patches/sysrepo/0002-Refactor-_sr_install_modules-to-use-ly_ctx_load_modu.patch similarity index 86% rename from patches/sysrepo/0002-sr_install_module_support_include_and_searchpath.patch rename to patches/sysrepo/0002-Refactor-_sr_install_modules-to-use-ly_ctx_load_modu.patch index ab37aae5..2ac20ae2 100644 --- a/patches/sysrepo/0002-sr_install_module_support_include_and_searchpath.patch +++ b/patches/sysrepo/0002-Refactor-_sr_install_modules-to-use-ly_ctx_load_modu.patch @@ -1,7 +1,8 @@ -From 5e919a20585392b4f2e0344bee2ac54d59c91ba4 Mon Sep 17 00:00:00 2001 +From 87224ddce4ed1a118b3efb24e0dc7167f8754c22 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Wed, 7 Jun 2023 15:19:13 +0200 -Subject: [PATCH] Refactor _sr_install_modules() to use ly_ctx_load_module() +Subject: [PATCH 2/4] Refactor _sr_install_modules() to use + ly_ctx_load_module() Organization: Addiva Elektronik This fixes issues with sysrepo discarding searchpaths and thus not @@ -16,10 +17,10 @@ Signed-off-by: Joachim Wiberg 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/common.c b/src/common.c -index 08630446..84149063 100644 +index f8acfb81..bef98f9a 100644 --- a/src/common.c +++ b/src/common.c -@@ -3601,7 +3601,7 @@ sr_get_trim_predicates(const char *expr, char **expr2) +@@ -3596,7 +3596,7 @@ sr_get_trim_predicates(const char *expr, char **expr2) } sr_error_info_t * @@ -28,7 +29,7 @@ index 08630446..84149063 100644 { sr_error_info_t *err_info = NULL; const char *ptr; -@@ -3631,6 +3631,9 @@ sr_get_schema_name_format(const char *schema_path, char **module_name, LYS_INFOR +@@ -3626,6 +3626,9 @@ sr_get_schema_name_format(const char *schema_path, char **module_name, LYS_INFOR if (ptr) { /* truncate revision */ ((char *)ptr)[0] = '\0'; @@ -39,7 +40,7 @@ index 08630446..84149063 100644 return NULL; diff --git a/src/common.h b/src/common.h -index d955ba49..d8448da4 100644 +index 00cc909f..ca5c08ca 100644 --- a/src/common.h +++ b/src/common.h @@ -958,10 +958,11 @@ sr_error_info_t *sr_get_trim_predicates(const char *expr, char **expr2); @@ -56,10 +57,10 @@ index d955ba49..d8448da4 100644 /** * @brief Get datastore string name. diff --git a/src/sysrepo.c b/src/sysrepo.c -index 7271c273..2c0d61fd 100644 +index 1387ea9d..ee30c462 100644 --- a/src/sysrepo.c +++ b/src/sysrepo.c -@@ -1226,6 +1226,10 @@ sr_install_module_set_searchdirs(struct ly_ctx *new_ctx, const char *search_dirs +@@ -1243,6 +1243,10 @@ sr_install_module_set_searchdirs(struct ly_ctx *new_ctx, const char *search_dirs sdirs_str = strdup(search_dirs); SR_CHECK_MEM_GOTO(!sdirs_str, err_info, cleanup); @@ -70,7 +71,7 @@ index 7271c273..2c0d61fd 100644 /* add each search dir */ for (ptr = strtok_r(sdirs_str, ":", &ptr2); ptr; ptr = strtok_r(NULL, ":", &ptr2)) { if (!ly_ctx_set_searchdir(new_ctx, ptr)) { -@@ -1304,15 +1308,15 @@ sr_install_modules_prepare_mod(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, sr_i +@@ -1321,15 +1325,15 @@ sr_install_modules_prepare_mod(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, sr_i { sr_error_info_t *err_info = NULL; const struct lys_module *ly_mod; @@ -88,7 +89,7 @@ index 7271c273..2c0d61fd 100644 goto cleanup; } -@@ -1345,14 +1349,9 @@ sr_install_modules_prepare_mod(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, sr_i +@@ -1362,14 +1366,9 @@ sr_install_modules_prepare_mod(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, sr_i goto cleanup; } @@ -106,7 +107,7 @@ index 7271c273..2c0d61fd 100644 goto cleanup; } -@@ -1375,8 +1374,12 @@ sr_install_modules_prepare_mod(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, sr_i +@@ -1392,8 +1391,12 @@ sr_install_modules_prepare_mod(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, sr_i } cleanup: @@ -121,7 +122,7 @@ index 7271c273..2c0d61fd 100644 return err_info; } -@@ -1834,7 +1837,7 @@ sr_update_modules_prepare(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, const cha +@@ -1851,7 +1854,7 @@ sr_update_modules_prepare(struct ly_ctx *new_ctx, sr_conn_ctx_t *conn, const cha for (i = 0; i < schema_path_count; ++i) { /* learn about the module */ upd_mods[i].schema_path = schema_paths[i]; diff --git a/patches/sysrepo/0004-Add-support-for-loading-etc-sysrepo-factory-default.patch b/patches/sysrepo/0003-Add-support-for-loading-etc-sysrepo-factory-default.patch similarity index 93% rename from patches/sysrepo/0004-Add-support-for-loading-etc-sysrepo-factory-default.patch rename to patches/sysrepo/0003-Add-support-for-loading-etc-sysrepo-factory-default.patch index c3ad6bb7..744336de 100644 --- a/patches/sysrepo/0004-Add-support-for-loading-etc-sysrepo-factory-default.patch +++ b/patches/sysrepo/0003-Add-support-for-loading-etc-sysrepo-factory-default.patch @@ -1,7 +1,7 @@ -From bef358ba11b01c248b45fbe003d8d3ded0acb657 Mon Sep 17 00:00:00 2001 +From 2d3b9524b1448dd6a8ef83e4e101e509d2552dcc Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Fri, 16 Jun 2023 12:13:16 +0200 -Subject: [PATCH 2/2] Add support for loading /etc/sysrepo/factory-default +Subject: [PATCH 3/4] Add support for loading /etc/sysrepo/factory-default Organization: Addiva Elektronik Follow-up to 3d07270 which adds support for compile-time defaults, this @@ -16,10 +16,10 @@ Signed-off-by: Joachim Wiberg 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/common.c b/src/common.c -index 84149063..ff9ba96e 100644 +index bef98f9a..bbb0c949 100644 --- a/src/common.c +++ b/src/common.c -@@ -1317,6 +1317,35 @@ sr_path_conn_lockfile(sr_cid_t cid, int creat, char **path) +@@ -1306,6 +1306,35 @@ sr_path_conn_lockfile(sr_cid_t cid, int creat, char **path) return err_info; } @@ -56,7 +56,7 @@ index 84149063..ff9ba96e 100644 sr_remove_evpipes(void) { diff --git a/src/common.h b/src/common.h -index d8448da4..37f7ede6 100644 +index ca5c08ca..e8d394ef 100644 --- a/src/common.h +++ b/src/common.h @@ -479,6 +479,17 @@ sr_error_info_t *sr_path_yang_file(const char *mod_name, const char *mod_rev, ch diff --git a/patches/sysrepo/0003-lyd-mods-UPDATE-allow-custom-start-data-for-internal.patch b/patches/sysrepo/0003-lyd-mods-UPDATE-allow-custom-start-data-for-internal.patch deleted file mode 100644 index c816938d..00000000 --- a/patches/sysrepo/0003-lyd-mods-UPDATE-allow-custom-start-data-for-internal.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 429d89a2254b29cd51758e4c6d2f7178d8b2120a Mon Sep 17 00:00:00 2001 -From: Michal Vasko -Date: Thu, 15 Jun 2023 09:36:57 +0200 -Subject: [PATCH 1/2] lyd mods UPDATE allow custom start data for internal - modules -Organization: Addiva Elektronik - -Compile-time variable with the path to a file with the data. -NOTE: Squashed two upstream commits in backport to kkit. - -Signed-off-by: Michal Vasko -Signed-off-by: Joachim Wiberg ---- - CMakeLists.txt | 24 +++++++++++++++- - README.md | 5 ++++ - src/config.h.in | 4 +++ - src/lyd_mods.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++-- - 4 files changed, 103 insertions(+), 3 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index f4b0b2f2..08480779 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -100,7 +100,29 @@ endif() - option(ENABLE_EXAMPLES "Build examples." ON) - option(ENABLE_COVERAGE "Build code coverage report from tests" OFF) - option(INSTALL_SYSCTL_CONF "Install sysctl conf file to allow shared access to SHM files." OFF) --set(YANG_MODULE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/yang/modules/sysrepo" CACHE STRING "Directory where to copy the YANG modules to") -+set(YANG_MODULE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/yang/modules/sysrepo" CACHE STRING "Directory where to copy the YANG modules to.") -+set(INTERNAL_MODULE_DATA_PATH "" CACHE STRING "Path to a file with startup and factory-default data of internal modules. Contents of the file are compiled into the library.") -+if(INTERNAL_MODULE_DATA_PATH) -+ if(NOT EXISTS "${INTERNAL_MODULE_DATA_PATH}") -+ message(FATAL_ERROR "File \"${INTERNAL_MODULE_DATA_PATH}\" does not exist.") -+ endif() -+ string(REGEX MATCH "[.](xml|json)$" EXT ${INTERNAL_MODULE_DATA_PATH}) -+ if(NOT EXT) -+ message(FATAL_ERROR "File \"${INTERNAL_MODULE_DATA_PATH}\" with an unknown extension.") -+ endif() -+ -+ file(READ "${INTERNAL_MODULE_DATA_PATH}" INTERNAL_MODULE_DATA_RAW) -+ string(REPLACE "\n" "\\\n" INTERNAL_MODULE_DATA ${INTERNAL_MODULE_DATA_RAW}) -+ -+ if(${EXT} STREQUAL ".xml") -+ set(INTERNAL_MODULE_DATA_FORMAT LYD_XML) -+ else() -+ set(INTERNAL_MODULE_DATA_FORMAT LYD_JSON) -+ endif() -+else() -+ # empty data but the code needs a format -+ set(INTERNAL_MODULE_DATA_FORMAT LYD_XML) -+endif() - - # ietf-yang-library revision - set(YANGLIB_REVISION "2019-01-04" CACHE STRING -diff --git a/README.md b/README.md -index 3d0e7aa4..39c47473 100644 ---- a/README.md -+++ b/README.md -@@ -147,6 +147,11 @@ Set [NACM](#NACM) configuration data and 'sysrepo-monitoring' default permission - ``` - -DNACM_SRMON_DATA_PERM=000 - ``` -+ -+Set `startup` and `factory-default` datastore data for internal modules (such as `ietf-netconf-acm`): -+``` -+-DINTERNAL_MODULE_DATA_PATH=/etc/config/factory_default_config.xml -+``` - ### Useful CMake Build Options - - #### Changing Compiler -diff --git a/src/config.h.in b/src/config.h.in -index 92040b0e..7f7b915c 100644 ---- a/src/config.h.in -+++ b/src/config.h.in -@@ -76,6 +76,10 @@ - /** if not set, defaults to "SR_REPO_PATH/yang" */ - #define SR_YANG_PATH "@YANG_MODULE_PATH@" - -+/** internal module startup and factory-default data and their format */ -+#define SR_INT_MOD_DATA "@INTERNAL_MODULE_DATA@" -+#define SR_INT_MOD_DATA_FORMAT @INTERNAL_MODULE_DATA_FORMAT@ -+ - /** where SHM files are stored */ - #define SR_SHM_DIR "@SHM_DIR@" - -diff --git a/src/lyd_mods.c b/src/lyd_mods.c -index 13397fa8..94e97b97 100644 ---- a/src/lyd_mods.c -+++ b/src/lyd_mods.c -@@ -4,8 +4,8 @@ - * @brief Sysrepo module data routines - * - * @copyright -- * Copyright (c) 2018 - 2022 Deutsche Telekom AG. -- * Copyright (c) 2018 - 2022 CESNET, z.s.p.o. -+ * Copyright (c) 2018 - 2023 Deutsche Telekom AG. -+ * Copyright (c) 2018 - 2023 CESNET, z.s.p.o. - * - * This source code is licensed under BSD 3-Clause License (the "License"). - * You may not use this file except in compliance with the License. -@@ -943,6 +943,70 @@ sr_lydmods_print(struct lyd_node **sr_mods) - return NULL; - } - -+/** -+ * @brief Set startup and factory-default datastore data for implemented internal modules. -+ * -+ * @param[in] ly_ctx Context with the internal modules. -+ * @return err_info, NULL on success. -+ */ -+static sr_error_info_t * -+sr_lydmods_create_data(const struct ly_ctx *ly_ctx) -+{ -+ sr_error_info_t *err_info = NULL; -+ const struct lys_module *ly_mod; -+ struct lyd_node *data = NULL, *mod_data = NULL, *mod_diff = NULL; -+ uint32_t idx = 0; -+ int rc; -+ -+ if (!strlen(SR_INT_MOD_DATA)) { -+ /* no data to set */ -+ goto cleanup; -+ } -+ -+ /* parse and validate the data */ -+ if (lyd_parse_data_mem(ly_ctx, SR_INT_MOD_DATA, SR_INT_MOD_DATA_FORMAT, 0, LYD_VALIDATE_NO_STATE, &data)) { -+ sr_errinfo_new_ly(&err_info, ly_ctx, NULL); -+ goto cleanup; -+ } -+ -+ while ((ly_mod = ly_ctx_get_module_iter(ly_ctx, &idx))) { -+ if (!ly_mod->implemented) { -+ continue; -+ } -+ -+ /* get the data for this module */ -+ lyd_free_siblings(mod_data); -+ mod_data = sr_module_data_unlink(&data, ly_mod); -+ if (!mod_data) { -+ continue; -+ } -+ -+ /* generate a diff */ -+ lyd_free_siblings(mod_diff); -+ if (lyd_diff_siblings(NULL, mod_data, LYD_DIFF_DEFAULTS, &mod_diff)) { -+ sr_errinfo_new_ly(&err_info, ly_ctx, mod_data); -+ goto cleanup; -+ } -+ assert(mod_diff); -+ -+ /* store the data using the internal JSON plugin */ -+ if ((rc = srpds_json.store_cb(ly_mod, SR_DS_STARTUP, mod_diff, mod_data))) { -+ SR_ERRINFO_DSPLUGIN(&err_info, rc, "store", srpds_json.name, ly_mod->name); -+ goto cleanup; -+ } -+ if ((rc = srpds_json.store_cb(ly_mod, SR_DS_FACTORY_DEFAULT, mod_diff, mod_data))) { -+ SR_ERRINFO_DSPLUGIN(&err_info, rc, "store", srpds_json.name, ly_mod->name); -+ goto cleanup; -+ } -+ } -+ -+cleanup: -+ lyd_free_siblings(mod_data); -+ lyd_free_siblings(mod_diff); -+ lyd_free_siblings(data); -+ return err_info; -+} -+ - /** - * @brief Create default sysrepo module data. All libyang internal implemented modules - * are installed into sysrepo. Sysrepo internal modules ietf-netconf, ietf-netconf-with-defaults, -@@ -1042,6 +1106,11 @@ sr_lydmods_create(struct ly_ctx *ly_ctx, struct lyd_node **sr_mods_p) - goto cleanup; - } - -+ /* set the startup and factory-default data, if any */ -+ if ((err_info = sr_lydmods_create_data(ly_ctx))) { -+ goto cleanup; -+ } -+ - cleanup: - free(new_mods); - if (err_info) { --- -2.34.1 - diff --git a/patches/sysrepo/0005-sysrepoctl-add-support-for-Cfactory-d-running.patch b/patches/sysrepo/0004-sysrepoctl-add-support-for-Cfactory-d-running.patch similarity index 73% rename from patches/sysrepo/0005-sysrepoctl-add-support-for-Cfactory-d-running.patch rename to patches/sysrepo/0004-sysrepoctl-add-support-for-Cfactory-d-running.patch index 2a1439ac..1c7236c8 100644 --- a/patches/sysrepo/0005-sysrepoctl-add-support-for-Cfactory-d-running.patch +++ b/patches/sysrepo/0004-sysrepoctl-add-support-for-Cfactory-d-running.patch @@ -1,18 +1,18 @@ -From 1d5954d87cdc8a180d917a1d807000e0b4a3a2de Mon Sep 17 00:00:00 2001 +From 7726017815243818f07936e4ff3bb979e9291f04 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Fri, 16 Jun 2023 16:17:27 +0200 -Subject: [PATCH] sysrepoctl: add support for -Cfactory -d running +Subject: [PATCH 4/4] sysrepoctl: add support for -Cfactory -d running Organization: Addiva Elektronik Signed-off-by: Joachim Wiberg --- src/common.h | 3 +++ - src/executables/sysrepocfg.c | 2 ++ + src/executables/sysrepocfg.c | 2 +- src/sysrepo.c | 2 +- - 3 files changed, 6 insertions(+), 1 deletion(-) + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/common.h b/src/common.h -index 37f7ede6..a092728f 100644 +index e8d394ef..39fcce3a 100644 --- a/src/common.h +++ b/src/common.h @@ -42,6 +42,9 @@ struct srplg_ntf_s; @@ -26,23 +26,23 @@ index 37f7ede6..a092728f 100644 #define SR_IS_STANDARD_DS(ds) (SR_IS_CONVENTIONAL_DS(ds) || (ds == SR_DS_OPERATIONAL)) diff --git a/src/executables/sysrepocfg.c b/src/executables/sysrepocfg.c -index 4067063c..839f093b 100644 +index 0c719e2c..65e56696 100644 --- a/src/executables/sysrepocfg.c +++ b/src/executables/sysrepocfg.c -@@ -647,6 +647,8 @@ arg_get_ds(const char *optarg, sr_datastore_t *ds) +@@ -730,7 +730,7 @@ arg_get_ds(const char *optarg, sr_datastore_t *ds) *ds = SR_DS_CANDIDATE; } else if (!strcmp(optarg, "operational")) { *ds = SR_DS_OPERATIONAL; -+ } else if (!strcmp(optarg, "factory")) { -+ *ds = SR_DS_FACTORY_DEFAULT; +- } else if (!strcmp(optarg, "factory-default")) { ++ } else if (!strcmp(optarg, "factory-default") || !strcmp(optarg, "factory")) { + *ds = SR_DS_FACTORY_DEFAULT; } else { error_print(0, "Unknown datastore \"%s\"", optarg); - return -1; diff --git a/src/sysrepo.c b/src/sysrepo.c -index 2c0d61fd..26c65851 100644 +index ee30c462..ca2a20b7 100644 --- a/src/sysrepo.c +++ b/src/sysrepo.c -@@ -4012,7 +4012,7 @@ sr_copy_config(sr_session_ctx_t *session, const char *module_name, sr_datastore_ +@@ -4037,7 +4037,7 @@ sr_copy_config(sr_session_ctx_t *session, const char *module_name, sr_datastore_ struct sr_mod_info_s mod_info; const struct lys_module *ly_mod = NULL;