diff --git a/man/nm-initrd-generator.xml b/man/nm-initrd-generator.xml
index df2cf12a4..37f5ffdf4 100644
--- a/man/nm-initrd-generator.xml
+++ b/man/nm-initrd-generator.xml
@@ -74,6 +74,20 @@
+
+
+
+
+
+
+ path
+
+
+
+ Output directory for initrd data (e.g. hostname).
+
+
+
@@ -118,6 +132,7 @@
+
@@ -128,6 +143,34 @@
+ Differences from the network-legacy dracut module
+
+ nm-initrd-generator generates a set of
+ connections that are then configured by the NetworkManager
+ instance running in the initrd. There are some differences in
+ behavior compared to the network-legacy dracut module:
+
+
+
+ When an interface is configured with a static address
+ and a gateway, the network-legacy module waits that the
+ gateway responds to arping requests before proceeding, while
+ NetworkManager doesn't.
+
+
+
+ network-legacy configures interfaces one by one in the
+ order in which they are announced by udev. If multiple
+ interfaces specify a hostname (from command line or from
+ DHCP), the one from the last interface activated wins. With
+ NetworkManager, hostnames from command line have higher
+ precedence over ones from DHCP, and the last that appears in
+ the command line wins.
+
+
+
+
+
Exit Status
nm-initrd-generator exits with status 0. It ignores unrecognized
options and prints an error message if it encounters a malformed option.
diff --git a/src/initrd/nm-initrd-generator.c b/src/initrd/nm-initrd-generator.c
index dccb21f87..a04ffb7d4 100644
--- a/src/initrd/nm-initrd-generator.c
+++ b/src/initrd/nm-initrd-generator.c
@@ -64,24 +64,28 @@ err_out:
}
#define DEFAULT_SYSFS_DIR "/sys"
+#define DEFAULT_INITRD_DATA_DIR NMRUNDIR "/initrd"
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;
gboolean dump_to_stdout = FALSE;
gs_strfreev char **remaining = NULL;
GOptionEntry option_entries[] = {
- { "connections-dir", 'c', 0, G_OPTION_ARG_FILENAME, &connections_dir, "Output connection directory", NM_KEYFILE_PATH_NAME_RUN },
- { "sysfs-dir", 'd', 0, G_OPTION_ARG_FILENAME, &sysfs_dir, "The sysfs mount point", DEFAULT_SYSFS_DIR },
- { "stdout", 's', 0, G_OPTION_ARG_NONE, &dump_to_stdout, "Dump connections to standard output", NULL },
- { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL },
+ { "connections-dir", 'c', 0, G_OPTION_ARG_FILENAME, &connections_dir, "Output connection directory", NM_KEYFILE_PATH_NAME_RUN },
+ { "initrd-data-dir", 'i', 0, G_OPTION_ARG_FILENAME, &initrd_dir, "Output initrd data directory", DEFAULT_INITRD_DATA_DIR },
+ { "sysfs-dir", 'd', 0, G_OPTION_ARG_FILENAME, &sysfs_dir, "The sysfs mount point", DEFAULT_SYSFS_DIR },
+ { "stdout", 's', 0, G_OPTION_ARG_NONE, &dump_to_stdout, "Dump connections to standard output", NULL },
+ { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL },
{ NULL }
};
GOptionContext *option_context;
- GError *error = NULL;
+ gs_free_error GError *error = NULL;
+ gs_free char *hostname = NULL;
int errsv;
option_context = g_option_context_new ("-- [ip=...] [rd.route=...] [bridge=...] [bond=...] [team=...] [vlan=...] "
@@ -108,6 +112,8 @@ main (int argc, char *argv[])
connections_dir = g_strdup (NM_KEYFILE_PATH_NAME_RUN);
if (!sysfs_dir)
sysfs_dir = g_strdup (DEFAULT_SYSFS_DIR);
+ if (!initrd_dir)
+ initrd_dir = g_strdup (DEFAULT_INITRD_DATA_DIR);
if (dump_to_stdout)
nm_clear_g_free (&connections_dir);
@@ -117,9 +123,31 @@ main (int argc, char *argv[])
return 1;
}
- connections = nmi_cmdline_reader_parse (sysfs_dir, (const char *const*) remaining);
+ connections = nmi_cmdline_reader_parse (sysfs_dir,
+ (const char *const*) remaining,
+ &hostname);
+
g_hash_table_foreach (connections, output_conn, connections_dir);
g_hash_table_destroy (connections);
+ if (g_mkdir_with_parents (initrd_dir, 0755) != 0) {
+ errsv = errno;
+ _LOGW (LOGD_CORE, "%s: %s", initrd_dir, nm_strerror_native (errsv));
+ return 1;
+ }
+
+ if (hostname) {
+ gs_free char *hostname_file = NULL;
+ gs_free char *data = NULL;
+
+ hostname_file = g_strdup_printf ("%s/hostname", initrd_dir);
+ data = g_strdup_printf ("%s\n", hostname);
+
+ if (!g_file_set_contents (hostname_file, data, strlen (data), &error)) {
+ _LOGW (LOGD_CORE, "%s: %s", hostname_file, error->message);
+ return 1;
+ }
+ }
+
return 0;
}
diff --git a/src/initrd/nm-initrd-generator.h b/src/initrd/nm-initrd-generator.h
index cba383d1e..971999212 100644
--- a/src/initrd/nm-initrd-generator.h
+++ b/src/initrd/nm-initrd-generator.h
@@ -28,6 +28,6 @@ gboolean nmi_ibft_update_connection_from_nic (NMConnection *connection, GHashTab
NMConnection *nmi_dt_reader_parse (const char *sysfs_dir);
-GHashTable *nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv);
+GHashTable *nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv, char **hostname);
#endif /* __NM_INITRD_GENERATOR_H__ */
diff --git a/src/initrd/nmi-cmdline-reader.c b/src/initrd/nmi-cmdline-reader.c
index 2eb6d7e5b..2f6afefcb 100644
--- a/src/initrd/nmi-cmdline-reader.c
+++ b/src/initrd/nmi-cmdline-reader.c
@@ -7,6 +7,7 @@
#include "nm-core-internal.h"
#include "nm-initrd-generator.h"
+#include "systemd/nm-sd-utils-shared.h"
/*****************************************************************************/
@@ -22,6 +23,11 @@ typedef struct {
GPtrArray *array;
NMConnection *bootdev_connection; /* connection for bootdev=$ifname */
NMConnection *default_connection; /* connection not bound to any ifname */
+ char *hostname;
+
+ /* Parameters to be set for all connections */
+ gboolean ignore_auto_dns;
+ int dhcp_timeout;
} Reader;
static Reader *
@@ -45,6 +51,7 @@ reader_destroy (Reader *reader, gboolean free_hash)
g_ptr_array_unref (reader->array);
hash = g_steal_pointer (&reader->hash);
+ nm_clear_g_free (&reader->hostname);
nm_g_slice_free (reader);
if (!free_hash)
return g_steal_pointer (&hash);
@@ -86,6 +93,8 @@ reader_create_connection (Reader *reader,
g_object_set (setting,
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, reader->ignore_auto_dns,
+ NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, reader->dhcp_timeout,
NULL);
setting = nm_setting_ip6_config_new ();
@@ -94,6 +103,8 @@ reader_create_connection (Reader *reader,
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, reader->ignore_auto_dns,
+ NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, reader->dhcp_timeout,
NULL);
setting = nm_setting_connection_new ();
@@ -345,6 +356,14 @@ reader_parse_ip (Reader *reader, const char *sysfs_dir, char *argument)
ifname = tmp;
}
+ if (client_hostname && !nm_sd_hostname_is_valid (client_hostname, FALSE))
+ client_hostname = NULL;
+
+ if (client_hostname) {
+ g_free (reader->hostname);
+ reader->hostname = g_strdup (client_hostname);
+ }
+
/* :{none|off|dhcp|on|any|dhcp6|auto6|ibft} */
kind = get_word (&argument, ':');
@@ -807,27 +826,6 @@ _normalize_conn (gpointer key, gpointer value, gpointer user_data)
nm_connection_normalize (connection, NULL, NULL, NULL);
}
-static void
-reader_set_ignore_auto_dns (Reader *reader)
-{
- GHashTableIter iter;
- NMConnection *connection;
- NMSettingIPConfig *s_ip = NULL;
-
- g_hash_table_iter_init (&iter, reader->hash);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &connection)) {
- s_ip = nm_connection_get_setting_ip4_config (connection);
- g_object_set (s_ip,
- NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE,
- NULL);
-
- s_ip = nm_connection_get_setting_ip6_config (connection);
- g_object_set (s_ip,
- NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE,
- NULL);
- }
-}
-
static void
reader_add_nameservers (Reader *reader, GPtrArray *nameservers)
{
@@ -875,7 +873,7 @@ reader_add_nameservers (Reader *reader, GPtrArray *nameservers)
}
GHashTable *
-nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv)
+nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv, char **hostname)
{
Reader *reader;
const char *tag;
@@ -886,16 +884,27 @@ nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv)
gboolean net_ifnames = TRUE;
gs_unref_ptrarray GPtrArray *nameservers = NULL;
gs_unref_ptrarray GPtrArray *routes = NULL;
- gboolean ignore_auto_dns = FALSE;
int i;
reader = reader_new ();
for (i = 0; argv[i]; i++) {
- if (strcmp (argv[i], "net.ifnames=0") == 0)
- net_ifnames = FALSE;
- else if (g_str_has_prefix (argv[i], "net.ifnames="))
- net_ifnames = TRUE;
+ gs_free char *argument_clone = NULL;
+ char *argument;
+
+ argument_clone = g_strdup (argv[i]);
+ argument = argument_clone;
+
+ tag = get_word (&argument, '=');
+
+ if (strcmp (tag, "net.ifnames") == 0)
+ net_ifnames = strcmp (argument, "0") != 0;
+ else if (strcmp (tag, "rd.peerdns") == 0)
+ reader->ignore_auto_dns = !_nm_utils_ascii_str_to_bool (argument, TRUE);
+ else if (strcmp (tag, "rd.net.timeout.dhcp") == 0) {
+ reader->dhcp_timeout = _nm_utils_ascii_str_to_int64 (argument,
+ 10, 0, G_MAXINT32, 0);
+ }
}
for (i = 0; argv[i]; i++) {
@@ -933,9 +942,7 @@ nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv)
}
if (argument && *argument)
_LOGW (LOGD_CORE, "Ignoring extra: '%s'.", argument);
- } else if (strcmp (tag, "rd.peerdns") == 0)
- ignore_auto_dns = !_nm_utils_ascii_str_to_bool (argument, TRUE);
- else if (strcmp (tag, "rd.iscsi.ibft") == 0 && _nm_utils_ascii_str_to_bool (argument, TRUE))
+ } else if (strcmp (tag, "rd.iscsi.ibft") == 0 && _nm_utils_ascii_str_to_bool (argument, TRUE))
reader_read_all_connections_from_fw (reader, sysfs_dir);
else if (strcmp (tag, "rd.bootif") == 0)
ignore_bootif = !_nm_utils_ascii_str_to_bool (argument, TRUE);
@@ -1009,9 +1016,9 @@ nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv)
if (nameservers)
reader_add_nameservers (reader, nameservers);
- if (ignore_auto_dns)
- reader_set_ignore_auto_dns (reader);
-
g_hash_table_foreach (reader->hash, _normalize_conn, NULL);
+
+ NM_SET_OUT (hostname, g_steal_pointer (&reader->hostname));
+
return reader_destroy (reader, FALSE);
}
diff --git a/src/initrd/tests/test-cmdline-reader.c b/src/initrd/tests/test-cmdline-reader.c
index b2b06e27c..4c972e738 100644
--- a/src/initrd/tests/test-cmdline-reader.c
+++ b/src/initrd/tests/test-cmdline-reader.c
@@ -30,10 +30,12 @@ test_auto (void)
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "default_connection");
g_assert (connection);
@@ -81,10 +83,12 @@ test_if_auto_with_mtu (void)
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth0");
g_assert (connection);
@@ -115,10 +119,13 @@ test_if_dhcp6 (void)
NMConnection *connection;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
+
connection = g_hash_table_lookup (connections, "eth1");
g_assert (connection);
nmtst_assert_connection_verifies_without_normalization (connection);
@@ -145,10 +152,12 @@ test_if_auto_with_mtu_and_mac (void)
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth2");
g_assert (connection);
@@ -183,10 +192,12 @@ test_if_ip4_manual (void)
NMConnection *connection;
NMSettingIPConfig *s_ip4;
NMIPAddress *ip_addr;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, "hostname1.example.com");
connection = g_hash_table_lookup (connections, "eth3");
g_assert (connection);
@@ -237,10 +248,12 @@ test_if_ip6_manual (void)
NMConnection *connection;
NMSettingIPConfig *s_ip6;
NMIPAddress *ip_addr;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, "hostname0.example.com");
connection = g_hash_table_lookup (connections, "eth4");
g_assert (connection);
@@ -274,10 +287,12 @@ test_multiple_merge (void)
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
NMIPAddress *ip_addr;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth0");
g_assert (connection);
@@ -317,10 +332,12 @@ test_multiple_bootdev (void)
NMConnection *connection;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth3");
g_assert (connection);
@@ -344,10 +361,12 @@ test_bootdev (void)
const char *const*ARGV = NM_MAKE_STRV ("vlan=vlan2:ens5", "bootdev=ens3");
NMConnection *connection;
NMSettingConnection *s_con;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "ens3");
g_assert (connection);
@@ -384,10 +403,12 @@ test_some_more (void)
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
NMIPRoute *ip_route;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth1");
g_assert (connection);
@@ -466,10 +487,12 @@ test_bond (void)
NMSettingBond *s_bond;
NMIPRoute *ip_route;
const char *master_uuid;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 3);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "bong0");
g_assert (connection);
@@ -545,10 +568,12 @@ test_bond_default (void)
NMSettingIPConfig *s_ip6;
NMSettingBond *s_bond;
const char *master_uuid;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "bond0");
@@ -598,7 +623,9 @@ static void
test_bridge (void)
{
gs_unref_hashtable GHashTable *connections = NULL;
- const char *const*ARGV = NM_MAKE_STRV ("bridge=bridge0:eth0,eth1", "rd.route=192.0.2.53::bridge0");
+ const char *const*ARGV = NM_MAKE_STRV ("bridge=bridge0:eth0,eth1",
+ "rd.route=192.0.2.53::bridge0",
+ "rd.net.timeout.dhcp=10");
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingIPConfig *s_ip4;
@@ -606,10 +633,12 @@ test_bridge (void)
NMSettingBridge *s_bridge;
NMIPRoute *ip_route;
const char *master_uuid;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 3);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "bridge0");
g_assert (connection);
@@ -626,6 +655,7 @@ test_bridge (void)
g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 0);
g_assert (!nm_setting_ip_config_get_gateway (s_ip4));
g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 1);
+ g_assert_cmpint (nm_setting_ip_config_get_dhcp_timeout(s_ip4), ==, 10);
ip_route = nm_setting_ip_config_get_route (s_ip4, 0);
g_assert_cmpstr (nm_ip_route_get_dest (ip_route), ==, "192.0.2.53");
g_assert_cmpint (nm_ip_route_get_family (ip_route), ==, AF_INET);
@@ -640,6 +670,8 @@ test_bridge (void)
g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip6), ==, 0);
g_assert (!nm_setting_ip_config_get_gateway (s_ip6));
g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip6), ==, 0);
+ g_assert_cmpint (nm_setting_ip_config_get_dhcp_timeout(s_ip6), ==, 10);
+
s_bridge = nm_connection_get_setting_bridge (connection);
g_assert (s_bridge);
@@ -682,10 +714,12 @@ test_bridge_default (void)
NMSettingIPConfig *s_ip6;
NMSettingBridge *s_bridge;
const char *master_uuid;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "br0");
@@ -740,10 +774,12 @@ test_team (void)
NMSettingIPConfig *s_ip6;
NMSettingTeam *s_team;
const char *master_uuid;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 3);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "team0");
g_assert (connection);
@@ -806,10 +842,12 @@ test_ibft_ip_dev (void)
gs_unref_hashtable GHashTable *connections = NULL;
NMSettingConnection *s_con;
NMConnection *connection;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth0");
g_assert (connection);
@@ -825,10 +863,12 @@ _test_ibft_ip (const char *const*ARGV)
{
gs_unref_hashtable GHashTable *connections = NULL;
NMConnection *connection;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "ibft0");
g_assert (connection);
@@ -864,10 +904,12 @@ test_ignore_extra (void)
{
gs_unref_hashtable GHashTable *connections = NULL;
const char *const*ARGV = NM_MAKE_STRV ("blabla", "extra", "lalala");
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 0);
+ g_assert_cmpstr (hostname, ==, NULL);
}
static void
@@ -886,10 +928,12 @@ test_rd_znet (void)
{ .name = "portno", .value_str = "1" },
};
int i_s390_options_keys;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, "foo.example.com");
connection = g_hash_table_lookup (connections, "enc800");
g_assert (NM_IS_CONNECTION (connection));
@@ -963,10 +1007,12 @@ test_rd_znet_legacy (void)
"net.ifnames=0");
NMConnection *connection;
NMSettingConnection *s_con;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, "foo.example.com");
connection = g_hash_table_lookup (connections, "eth0");
g_assert (NM_IS_CONNECTION (connection));
@@ -1001,10 +1047,12 @@ test_bootif (void)
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "default_connection");
g_assert (connection);
@@ -1037,10 +1085,12 @@ test_bootif_hwtype (void)
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 2);
+ g_assert_cmpstr (hostname, ==, NULL);
connection = g_hash_table_lookup (connections, "eth0");
g_assert (connection);
@@ -1100,10 +1150,12 @@ test_nameserver (void)
"nameserver=[2606:4700:4700::1111]");
NMConnection *connection;
NMSettingIPConfig *s_ip;
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 3);
+ g_assert_cmpstr (hostname, ==, "foo.example.com");
connection = g_hash_table_lookup (connections, "eth0");
g_assert (connection);
@@ -1140,10 +1192,12 @@ test_bootif_off (void)
{
gs_unref_hashtable GHashTable *connections = NULL;
const char *const*ARGV = NM_MAKE_STRV ("BOOTIF=01-00-53-AB-cd-02-03", "rd.bootif=0");
+ gs_free char *hostname = NULL;
- connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
+ connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV, &hostname);
g_assert (connections);
g_assert_cmpint (g_hash_table_size (connections), ==, 0);
+ g_assert_cmpstr (hostname, ==, NULL);
}
NMTST_DEFINE ();