initrd: merge branch 'bg/initrd-hostname'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/419
This commit is contained in:
Beniamino Galvani
2020-05-06 10:34:03 +02:00
5 changed files with 197 additions and 65 deletions

View File

@@ -74,6 +74,20 @@
</listitem>
</varlistentry>
<varlistentry>
<term>
<group choice='plain'>
<arg choice='plain'><option>-i</option></arg>
<arg choice='plain'><option>--initrd-data-dir</option></arg>
</group>
<arg choice='plain'><replaceable>path</replaceable></arg>
</term>
<listitem>
<para>Output directory for initrd data (e.g. hostname).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<group choice='plain'>
@@ -118,6 +132,7 @@
<member><option>nameserver</option></member>
<member><option>rd.peerdns</option></member>
<member><option>rd.bootif</option></member>
<member><option>rd.net.timeout.dhcp</option></member>
<member><option>BOOTIF</option></member>
</simplelist>
@@ -128,6 +143,34 @@
</variablelist>
</refsect1>
<refsect1 id='differences_from_network_legacy'><title>Differences from the network-legacy dracut module</title>
<para><command>nm-initrd-generator</command> 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:</para>
<itemizedlist>
<listitem>
<para>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.</para>
</listitem>
<listitem>
<para>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.</para>
</listitem>
</itemizedlist>
</refsect1>
<refsect1 id='exit_status'><title>Exit Status</title>
<para><command>nm-initrd-generator</command> exits with status 0. It ignores unrecognized
options and prints an error message if it encounters a malformed option.</para>

View File

@@ -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;
}

View File

@@ -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__ */

View File

@@ -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);
}
/* <ifname>:{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);
}

View File

@@ -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 ();