diff --git a/man/nm-initrd-generator.xml b/man/nm-initrd-generator.xml
index 503700fa80..f11be1f64b 100644
--- a/man/nm-initrd-generator.xml
+++ b/man/nm-initrd-generator.xml
@@ -74,6 +74,21 @@
+
+
+
+
+
+
+ path
+
+
+
+ Persistent connection directory. If it exists, rd.neednet will not
+ cause a default connection to be generated in absence of other options.
+
+
+
diff --git a/src/nm-initrd-generator/nm-initrd-generator.c b/src/nm-initrd-generator/nm-initrd-generator.c
index 1705e8fcae..981cb14bdf 100644
--- a/src/nm-initrd-generator/nm-initrd-generator.c
+++ b/src/nm-initrd-generator/nm-initrd-generator.c
@@ -80,13 +80,14 @@ int
main(int argc, char *argv[])
{
GHashTable *connections;
- gs_free char *connections_dir = NULL;
- gs_free char *initrd_dir = NULL;
- gs_free char *sysfs_dir = NULL;
- gs_free char *run_config_dir = NULL;
- gboolean dump_to_stdout = FALSE;
- gs_strfreev char **remaining = NULL;
- GOptionEntry option_entries[] = {
+ gs_free char *connections_dir = NULL;
+ gs_free char *etc_connections_dir = NULL;
+ gs_free char *initrd_dir = NULL;
+ gs_free char *sysfs_dir = NULL;
+ gs_free char *run_config_dir = NULL;
+ gboolean dump_to_stdout = FALSE;
+ gs_strfreev char **remaining = NULL;
+ GOptionEntry option_entries[] = {
{"connections-dir",
'c',
0,
@@ -94,6 +95,13 @@ main(int argc, char *argv[])
&connections_dir,
"Output connection directory",
NM_KEYFILE_PATH_NAME_RUN},
+ {"persistent-connections-dir",
+ 'p',
+ 0,
+ G_OPTION_ARG_FILENAME,
+ &etc_connections_dir,
+ "Persistent connection directory",
+ NM_KEYFILE_PATH_NAME_ETC_DEFAULT},
{"initrd-data-dir",
'i',
0,
@@ -153,6 +161,8 @@ main(int argc, char *argv[])
return 0;
}
+ if (!etc_connections_dir)
+ etc_connections_dir = g_strdup(NM_KEYFILE_PATH_NAME_ETC_DEFAULT);
if (!connections_dir)
connections_dir = g_strdup(NM_KEYFILE_PATH_NAME_RUN);
if (!sysfs_dir)
@@ -162,7 +172,8 @@ main(int argc, char *argv[])
if (!run_config_dir)
run_config_dir = g_strdup(DEFAULT_RUN_CONFIG_DIR);
- connections = nmi_cmdline_reader_parse(sysfs_dir,
+ connections = nmi_cmdline_reader_parse(etc_connections_dir,
+ sysfs_dir,
(const char *const *) remaining,
&hostname,
&carrier_timeout_sec);
diff --git a/src/nm-initrd-generator/nm-initrd-generator.h b/src/nm-initrd-generator/nm-initrd-generator.h
index dabf3201c0..4f33ac653b 100644
--- a/src/nm-initrd-generator/nm-initrd-generator.h
+++ b/src/nm-initrd-generator/nm-initrd-generator.h
@@ -38,7 +38,8 @@ nmi_ibft_update_connection_from_nic(NMConnection *connection, GHashTable *nic, G
NMConnection *nmi_dt_reader_parse(const char *sysfs_dir);
-GHashTable *nmi_cmdline_reader_parse(const char *sysfs_dir,
+GHashTable *nmi_cmdline_reader_parse(const char *etc_connections_dir,
+ const char *sysfs_dir,
const char *const *argv,
char **hostname,
gint64 *carrier_timeout_sec);
diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c
index 77b2cfba73..8a56039b7f 100644
--- a/src/nm-initrd-generator/nmi-cmdline-reader.c
+++ b/src/nm-initrd-generator/nmi-cmdline-reader.c
@@ -1316,7 +1316,8 @@ connection_set_needed_cb(gpointer key, gpointer value, gpointer user_data)
}
GHashTable *
-nmi_cmdline_reader_parse(const char *sysfs_dir,
+nmi_cmdline_reader_parse(const char *etc_connections_dir,
+ const char *sysfs_dir,
const char *const *argv,
char **hostname,
gint64 *carrier_timeout_sec)
@@ -1512,7 +1513,8 @@ nmi_cmdline_reader_parse(const char *sysfs_dir,
}
if (neednet) {
- if (g_hash_table_size(reader->hash) == 0) {
+ if (!(etc_connections_dir && g_file_test(etc_connections_dir, G_FILE_TEST_IS_DIR))
+ && g_hash_table_size(reader->hash) == 0) {
/* Make sure there's some connection. */
reader_get_default_connection(reader);
}
diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c
index 02d87eb8f8..009af54006 100644
--- a/src/nm-initrd-generator/tests/test-cmdline-reader.c
+++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c
@@ -29,7 +29,8 @@
gint64 *const _out_carrier_timeout_sec = (out_carrier_timeout_sec); \
GHashTable *_connections; \
\
- _connections = nmi_cmdline_reader_parse(TEST_INITRD_DIR "/sysfs", \
+ _connections = nmi_cmdline_reader_parse(NULL, \
+ TEST_INITRD_DIR "/sysfs", \
_ARGV, \
_out_hostname, \
_out_carrier_timeout_sec); \