mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-14 12:05:03 +00:00
initrd: generate infiniband connections
Generate infiniband connections based on the interface name or MAC address length. https://bugzilla.redhat.com/show_bug.cgi?id=1883173
This commit is contained in:
parent
ba1e1c364c
commit
317171ed6e
|
@ -137,11 +137,22 @@ reader_create_connection(Reader * reader,
|
|||
multi_connect,
|
||||
NULL);
|
||||
|
||||
if (nm_streq0(type_name, NM_SETTING_INFINIBAND_SETTING_NAME)) {
|
||||
setting = nm_setting_infiniband_new();
|
||||
nm_connection_add_setting(connection, setting);
|
||||
g_object_set(setting, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL);
|
||||
}
|
||||
|
||||
if (mac) {
|
||||
if (nm_streq0(type_name, NM_SETTING_INFINIBAND_SETTING_NAME)) {
|
||||
setting = (NMSetting *) nm_connection_get_setting_infiniband(connection);
|
||||
g_object_set(setting, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL);
|
||||
} else {
|
||||
setting = nm_setting_wired_new();
|
||||
nm_connection_add_setting(connection, setting);
|
||||
g_object_set(setting, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return connection;
|
||||
}
|
||||
|
@ -180,7 +191,7 @@ reader_get_connection(Reader * reader,
|
|||
if (nm_utils_is_valid_iface_name(iface_spec, NULL))
|
||||
ifname = iface_spec;
|
||||
else {
|
||||
mac = nm_utils_hwaddr_canonical(iface_spec, ETH_ALEN);
|
||||
mac = nm_utils_hwaddr_canonical(iface_spec, -1);
|
||||
if (!mac)
|
||||
_LOGW(LOGD_CORE, "invalid interface '%s'", iface_spec);
|
||||
}
|
||||
|
@ -219,8 +230,13 @@ reader_get_connection(Reader * reader,
|
|||
if (!create_if_missing)
|
||||
return NULL;
|
||||
|
||||
if (!type_name)
|
||||
if (!type_name) {
|
||||
if (NM_STR_HAS_PREFIX(ifname, "ib")
|
||||
|| (mac && nm_utils_hwaddr_valid(mac, INFINIBAND_ALEN)))
|
||||
type_name = NM_SETTING_INFINIBAND_SETTING_NAME;
|
||||
else
|
||||
type_name = NM_SETTING_WIRED_SETTING_NAME;
|
||||
}
|
||||
|
||||
connection = reader_create_connection(reader,
|
||||
ifname ?: mac,
|
||||
|
|
|
@ -1772,6 +1772,60 @@ test_dhcp_vendor_class_id(void)
|
|||
g_assert(nm_setting_ip4_config_get_dhcp_vendor_class_identifier(s_ip4) == NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
test_infiniband_iface(void)
|
||||
{
|
||||
gs_unref_hashtable GHashTable *connections = NULL;
|
||||
const char *const * ARGV = NM_MAKE_STRV("ip=ib1:dhcp");
|
||||
NMConnection * connection;
|
||||
NMSettingInfiniband * s_ib;
|
||||
gs_free char * hostname = NULL;
|
||||
|
||||
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, "ib1");
|
||||
g_assert(connection);
|
||||
nmtst_assert_connection_verifies_without_normalization(connection);
|
||||
g_assert_cmpstr(nm_connection_get_connection_type(connection),
|
||||
==,
|
||||
NM_SETTING_INFINIBAND_SETTING_NAME);
|
||||
s_ib = nm_connection_get_setting_infiniband(connection);
|
||||
g_assert(s_ib);
|
||||
}
|
||||
|
||||
static void
|
||||
test_infiniband_mac(void)
|
||||
{
|
||||
gs_unref_hashtable GHashTable *connections = NULL;
|
||||
const char *const * ARGV =
|
||||
NM_MAKE_STRV("ip=00-11-22-33-44-55-66-77-88-99-aa-bb-cc-dd-ee-ff-00-11-22-33:dhcp");
|
||||
NMConnection * connection;
|
||||
NMSettingInfiniband *s_ib;
|
||||
gs_free char * hostname = NULL;
|
||||
|
||||
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,
|
||||
"00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33");
|
||||
g_assert(connection);
|
||||
nmtst_assert_connection_verifies_without_normalization(connection);
|
||||
g_assert_cmpstr(nm_connection_get_connection_type(connection),
|
||||
==,
|
||||
NM_SETTING_INFINIBAND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, NULL);
|
||||
s_ib = nm_connection_get_setting_infiniband(connection);
|
||||
g_assert(s_ib);
|
||||
g_assert_cmpstr(nm_setting_infiniband_get_mac_address(s_ib),
|
||||
==,
|
||||
"00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33");
|
||||
}
|
||||
|
||||
NMTST_DEFINE();
|
||||
|
||||
int
|
||||
|
@ -1813,6 +1867,8 @@ main(int argc, char **argv)
|
|||
g_test_add_func("/initrd/cmdline/bootif/off", test_bootif_off);
|
||||
g_test_add_func("/initrd/cmdline/neednet", test_neednet);
|
||||
g_test_add_func("/initrd/cmdline/dhcp/vendor_class_id", test_dhcp_vendor_class_id);
|
||||
g_test_add_func("/initrd/cmdline/infiniband/iface", test_infiniband_iface);
|
||||
g_test_add_func("/initrd/cmdline/infiniband/mac", test_infiniband_mac);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue