mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-09 04:48:10 +02:00
initrd: merge branch 'lr/a-pair-of-ibft-fixes'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/393
This commit is contained in:
commit
d60cb4d5de
4 changed files with 92 additions and 43 deletions
|
|
@ -194,6 +194,47 @@ _base_setting_set (NMConnection *connection, const char *property, const char *v
|
||||||
g_type_class_unref (object_class);
|
g_type_class_unref (object_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
read_all_connections_from_fw (GHashTable *connections, const char *sysfs_dir)
|
||||||
|
{
|
||||||
|
gs_unref_hashtable GHashTable *ibft = NULL;
|
||||||
|
NMConnection *connection;
|
||||||
|
GHashTableIter iter;
|
||||||
|
const char *mac;
|
||||||
|
GHashTable *nic;
|
||||||
|
const char *index;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
ibft = nmi_ibft_read (sysfs_dir);
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, ibft);
|
||||||
|
while (g_hash_table_iter_next (&iter, (gpointer *) &mac, (gpointer *) &nic)) {
|
||||||
|
connection = nm_simple_connection_new ();
|
||||||
|
|
||||||
|
index = g_hash_table_lookup (nic, "index");
|
||||||
|
if (!index) {
|
||||||
|
_LOGW (LOGD_CORE, "Ignoring an iBFT entry without an index");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!nmi_ibft_update_connection_from_nic (connection, nic, &error)) {
|
||||||
|
_LOGW (LOGD_CORE, "Unable to merge iBFT configuration: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_hash_table_insert (connections,
|
||||||
|
g_strdup_printf ("ibft%s", index),
|
||||||
|
connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
connection = nmi_dt_reader_parse (sysfs_dir);
|
||||||
|
if (connection) {
|
||||||
|
g_hash_table_insert (connections,
|
||||||
|
g_strdup ("ofw"),
|
||||||
|
connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
parse_ip (GHashTable *connections, const char *sysfs_dir, char *argument)
|
parse_ip (GHashTable *connections, const char *sysfs_dir, char *argument)
|
||||||
{
|
{
|
||||||
|
|
@ -258,44 +299,7 @@ parse_ip (GHashTable *connections, const char *sysfs_dir, char *argument)
|
||||||
|
|
||||||
if (ifname == NULL && ( g_strcmp0 (kind, "fw") == 0
|
if (ifname == NULL && ( g_strcmp0 (kind, "fw") == 0
|
||||||
|| g_strcmp0 (kind, "ibft") == 0)) {
|
|| g_strcmp0 (kind, "ibft") == 0)) {
|
||||||
GHashTableIter iter;
|
read_all_connections_from_fw (connections, sysfs_dir);
|
||||||
const char *mac;
|
|
||||||
GHashTable *nic;
|
|
||||||
const char *index;
|
|
||||||
|
|
||||||
/* This is the ip=ibft case. Just take all we got from iBFT
|
|
||||||
* and don't process anything else, since there's no ifname
|
|
||||||
* specified to apply it to. */
|
|
||||||
if (!ibft)
|
|
||||||
ibft = nmi_ibft_read (sysfs_dir);
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, ibft);
|
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer)&mac, (gpointer)&nic)) {
|
|
||||||
connection = nm_simple_connection_new ();
|
|
||||||
|
|
||||||
index = g_hash_table_lookup (nic, "index");
|
|
||||||
if (!index) {
|
|
||||||
_LOGW (LOGD_CORE, "Ignoring an iBFT entry without an index");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!nmi_ibft_update_connection_from_nic (connection, nic, &error)) {
|
|
||||||
_LOGW (LOGD_CORE, "Unable to merge iBFT configuration: %s", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_hash_table_insert (connections,
|
|
||||||
g_strdup_printf ("ibft%s", index),
|
|
||||||
connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
connection = nmi_dt_reader_parse (sysfs_dir);
|
|
||||||
if (connection) {
|
|
||||||
g_hash_table_insert (connections,
|
|
||||||
g_strdup ("ofw"),
|
|
||||||
connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -421,8 +425,7 @@ parse_ip (GHashTable *connections, const char *sysfs_dir, char *argument)
|
||||||
if (mac) {
|
if (mac) {
|
||||||
g_strchomp (mac);
|
g_strchomp (mac);
|
||||||
mac_up = g_ascii_strup (mac, -1);
|
mac_up = g_ascii_strup (mac, -1);
|
||||||
if (!ibft)
|
ibft = nmi_ibft_read (sysfs_dir);
|
||||||
ibft = nmi_ibft_read (sysfs_dir);
|
|
||||||
nic = g_hash_table_lookup (ibft, mac_up);
|
nic = g_hash_table_lookup (ibft, mac_up);
|
||||||
if (!nic)
|
if (!nic)
|
||||||
_LOGW (LOGD_CORE, "No iBFT NIC for %s (%s)", ifname, mac_up);
|
_LOGW (LOGD_CORE, "No iBFT NIC for %s (%s)", ifname, mac_up);
|
||||||
|
|
@ -838,6 +841,8 @@ nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv)
|
||||||
parse_nameserver (connections, argument);
|
parse_nameserver (connections, argument);
|
||||||
else if (strcmp (tag, "rd.peerdns") == 0)
|
else if (strcmp (tag, "rd.peerdns") == 0)
|
||||||
parse_rd_peerdns (connections, argument);
|
parse_rd_peerdns (connections, argument);
|
||||||
|
else if (strcmp (tag, "rd.iscsi.ibft") == 0 && _nm_utils_ascii_str_to_bool (argument, TRUE))
|
||||||
|
read_all_connections_from_fw (connections, sysfs_dir);
|
||||||
else if (strcmp (tag, "rd.bootif") == 0)
|
else if (strcmp (tag, "rd.bootif") == 0)
|
||||||
ignore_bootif = !_nm_utils_ascii_str_to_bool (argument, TRUE);
|
ignore_bootif = !_nm_utils_ascii_str_to_bool (argument, TRUE);
|
||||||
else if (strcmp (tag, "rd.neednet") == 0)
|
else if (strcmp (tag, "rd.neednet") == 0)
|
||||||
|
|
|
||||||
|
|
@ -296,6 +296,7 @@ connection_setting_add (GHashTable *nic,
|
||||||
NM_SETTING_CONNECTION_TYPE, type,
|
NM_SETTING_CONNECTION_TYPE, type,
|
||||||
NM_SETTING_CONNECTION_UUID, uuid,
|
NM_SETTING_CONNECTION_UUID, uuid,
|
||||||
NM_SETTING_CONNECTION_ID, id,
|
NM_SETTING_CONNECTION_ID, id,
|
||||||
|
NM_SETTING_CONNECTION_INTERFACE_NAME, NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_free (uuid);
|
g_free (uuid);
|
||||||
|
|
|
||||||
|
|
@ -768,10 +768,30 @@ test_team (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_ibft (void)
|
test_ibft_ip_dev (void)
|
||||||
|
{
|
||||||
|
const char *const*ARGV = NM_MAKE_STRV ("ip=eth0:ibft");
|
||||||
|
gs_unref_hashtable GHashTable *connections = NULL;
|
||||||
|
NMSettingConnection *s_con;
|
||||||
|
NMConnection *connection;
|
||||||
|
|
||||||
|
connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
|
||||||
|
g_assert (connections);
|
||||||
|
g_assert_cmpint (g_hash_table_size (connections), ==, 1);
|
||||||
|
|
||||||
|
connection = g_hash_table_lookup (connections, "eth0");
|
||||||
|
g_assert (connection);
|
||||||
|
|
||||||
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
|
g_assert (s_con);
|
||||||
|
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_VLAN_SETTING_NAME);
|
||||||
|
g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_test_ibft_ip (const char *const*ARGV)
|
||||||
{
|
{
|
||||||
gs_unref_hashtable GHashTable *connections = NULL;
|
gs_unref_hashtable GHashTable *connections = NULL;
|
||||||
const char *const*ARGV = NM_MAKE_STRV ("ip=ibft");
|
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
|
||||||
connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
|
connections = nmi_cmdline_reader_parse (TEST_INITRD_DIR "/sysfs", ARGV);
|
||||||
|
|
@ -782,11 +802,29 @@ test_ibft (void)
|
||||||
g_assert (connection);
|
g_assert (connection);
|
||||||
nmtst_assert_connection_verifies_without_normalization (connection);
|
nmtst_assert_connection_verifies_without_normalization (connection);
|
||||||
g_assert_cmpstr (nm_connection_get_id (connection), ==, "iBFT VLAN Connection 0");
|
g_assert_cmpstr (nm_connection_get_id (connection), ==, "iBFT VLAN Connection 0");
|
||||||
|
g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, NULL);
|
||||||
|
|
||||||
connection = g_hash_table_lookup (connections, "ibft2");
|
connection = g_hash_table_lookup (connections, "ibft2");
|
||||||
g_assert (connection);
|
g_assert (connection);
|
||||||
nmtst_assert_connection_verifies_without_normalization (connection);
|
nmtst_assert_connection_verifies_without_normalization (connection);
|
||||||
g_assert_cmpstr (nm_connection_get_id (connection), ==, "iBFT Connection 2");
|
g_assert_cmpstr (nm_connection_get_id (connection), ==, "iBFT Connection 2");
|
||||||
|
g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_ibft_ip (void)
|
||||||
|
{
|
||||||
|
const char *const*ARGV = NM_MAKE_STRV ("ip=ibft");
|
||||||
|
|
||||||
|
_test_ibft_ip (ARGV);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_ibft_rd_iscsi_ibft (void)
|
||||||
|
{
|
||||||
|
const char *const*ARGV = NM_MAKE_STRV ("rd.iscsi.ibft");
|
||||||
|
|
||||||
|
_test_ibft_ip (ARGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -1045,7 +1083,9 @@ int main (int argc, char **argv)
|
||||||
g_test_add_func ("/initrd/cmdline/team", test_team);
|
g_test_add_func ("/initrd/cmdline/team", test_team);
|
||||||
g_test_add_func ("/initrd/cmdline/bridge", test_bridge);
|
g_test_add_func ("/initrd/cmdline/bridge", test_bridge);
|
||||||
g_test_add_func ("/initrd/cmdline/bridge/default", test_bridge_default);
|
g_test_add_func ("/initrd/cmdline/bridge/default", test_bridge_default);
|
||||||
g_test_add_func ("/initrd/cmdline/ibft", test_ibft);
|
g_test_add_func ("/initrd/cmdline/ibft/ip_dev", test_ibft_ip_dev);
|
||||||
|
g_test_add_func ("/initrd/cmdline/ibft/ip", test_ibft_ip);
|
||||||
|
g_test_add_func ("/initrd/cmdline/ibft/rd_iscsi_ibft", test_ibft_rd_iscsi_ibft);
|
||||||
g_test_add_func ("/initrd/cmdline/ignore_extra", test_ignore_extra);
|
g_test_add_func ("/initrd/cmdline/ignore_extra", test_ignore_extra);
|
||||||
g_test_add_func ("/initrd/cmdline/rd_znet", test_rd_znet);
|
g_test_add_func ("/initrd/cmdline/rd_znet", test_rd_znet);
|
||||||
g_test_add_func ("/initrd/cmdline/rd_znet/legacy", test_rd_znet_legacy);
|
g_test_add_func ("/initrd/cmdline/rd_znet/legacy", test_rd_znet_legacy);
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ test_read_ibft_dhcp (void)
|
||||||
g_assert (s_con);
|
g_assert (s_con);
|
||||||
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME);
|
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME);
|
||||||
g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "iBFT Connection 1");
|
g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "iBFT Connection 1");
|
||||||
|
g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, NULL);
|
||||||
g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
|
g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
|
||||||
g_assert (nm_setting_connection_get_autoconnect (s_con));
|
g_assert (nm_setting_connection_get_autoconnect (s_con));
|
||||||
|
|
||||||
|
|
@ -109,6 +110,7 @@ test_read_ibft_static (void)
|
||||||
g_assert (s_con);
|
g_assert (s_con);
|
||||||
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME);
|
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME);
|
||||||
g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "iBFT Connection 0");
|
g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "iBFT Connection 0");
|
||||||
|
g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, NULL);
|
||||||
g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
|
g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
|
||||||
g_assert (nm_setting_connection_get_autoconnect (s_con));
|
g_assert (nm_setting_connection_get_autoconnect (s_con));
|
||||||
|
|
||||||
|
|
@ -178,6 +180,7 @@ test_read_ibft_vlan (void)
|
||||||
s_con = nm_connection_get_setting_connection (connection);
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
g_assert (s_con);
|
g_assert (s_con);
|
||||||
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_VLAN_SETTING_NAME);
|
g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_VLAN_SETTING_NAME);
|
||||||
|
g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, NULL);
|
||||||
|
|
||||||
/* ===== WIRED SETTING ===== */
|
/* ===== WIRED SETTING ===== */
|
||||||
s_wired = nm_connection_get_setting_wired (connection);
|
s_wired = nm_connection_get_setting_wired (connection);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue