about summary refs log tree commit diff
path: root/src/core/settings/plugins
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-10-18 11:56:48 +0200
committerMichael Biebl <biebl@debian.org>2022-10-18 11:56:48 +0200
commit9f101839d9e64df832e9e43c5181887369c46a7e (patch)
tree3e23589a9d4e9e7c32ce41b634ccf26af3f0d45e /src/core/settings/plugins
parentab0efddcdb48d800e2f938da54cfe3074640792e (diff)
New upstream version 1.40.2 upstream/1.40.2
Diffstat (limited to 'src/core/settings/plugins')
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c58
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ipoib9
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c74
3 files changed, 91 insertions, 50 deletions
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
index 6452d72a..4d8e7bd6 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -5355,59 +5355,41 @@ wired_connection_from_ifcfg(const char *file, shvarFile *ifcfg, GError **error)
 static gboolean
 parse_infiniband_p_key(shvarFile *ifcfg, int *out_p_key, char **out_parent, GError **error)
 {
-    char    *device = NULL, *physdev = NULL, *pkey_id = NULL;
-    char    *ifname = NULL;
-    int      id;
-    gboolean ret = FALSE;
-
-    device = svGetValueStr_cp(ifcfg, "DEVICE");
-    if (!device) {
-        PARSE_WARNING("InfiniBand connection specified PKEY but not DEVICE");
-        goto done;
-    }
+    gs_free char *physdev = NULL;
+    gs_free char *pkey_id = NULL;
+    int           id;
 
     physdev = svGetValueStr_cp(ifcfg, "PHYSDEV");
     if (!physdev) {
-        PARSE_WARNING("InfiniBand connection specified PKEY but not PHYSDEV");
-        goto done;
+        g_set_error(error,
+                    NM_SETTINGS_ERROR,
+                    NM_SETTINGS_ERROR_INVALID_CONNECTION,
+                    "infiniband connection specified PKEY but not PHYSDEV");
+        return FALSE;
     }
 
     pkey_id = svGetValueStr_cp(ifcfg, "PKEY_ID");
     if (!pkey_id) {
-        PARSE_WARNING("InfiniBand connection specified PKEY but not PKEY_ID");
-        goto done;
+        g_set_error(error,
+                    NM_SETTINGS_ERROR,
+                    NM_SETTINGS_ERROR_INVALID_CONNECTION,
+                    "infiniband connection specified PKEY but not PKEY_ID");
+        return FALSE;
     }
 
     id = _nm_utils_ascii_str_to_int64(pkey_id, 0, 0, 0xFFFF, -1);
     if (id == -1) {
-        PARSE_WARNING("invalid InfiniBand PKEY_ID '%s'", pkey_id);
-        goto done;
-    }
-    id = (id | 0x8000);
-
-    ifname = g_strdup_printf("%s.%04x", physdev, (unsigned) id);
-    if (strcmp(device, ifname) != 0) {
-        PARSE_WARNING("InfiniBand DEVICE (%s) does not match PHYSDEV+PKEY_ID (%s)", device, ifname);
-        goto done;
-    }
-
-    *out_p_key  = id;
-    *out_parent = g_strdup(physdev);
-    ret         = TRUE;
-
-done:
-    g_free(device);
-    g_free(physdev);
-    g_free(pkey_id);
-    g_free(ifname);
-
-    if (!ret) {
         g_set_error(error,
                     NM_SETTINGS_ERROR,
                     NM_SETTINGS_ERROR_INVALID_CONNECTION,
-                    "Failed to create InfiniBand setting");
+                    "invalid infiniband PKEY_ID '%s'",
+                    pkey_id);
+        return FALSE;
     }
-    return ret;
+
+    *out_p_key  = id;
+    *out_parent = g_steal_pointer(&physdev);
+    return TRUE;
 }
 
 static NMSetting *
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ipoib b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ipoib
new file mode 100644
index 00000000..b45da5f7
--- /dev/null
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ipoib
@@ -0,0 +1,9 @@
+TYPE=InfiniBand
+PKEY=yes
+PKEY_ID=12
+PHYSDEV=ib0
+CONNECTED_MODE=yes
+IPADDR=192.168.2.2
+NETMASK=255.255.255.0
+GATEWAY=192.168.2.1
+NAME=ib012
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 9fdae4bd..f9fd7fd5 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -8211,8 +8211,35 @@ test_read_infiniband(void)
 }
 
 static void
-test_write_infiniband(void)
+test_read_ipoib(void)
 {
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingInfiniband          *s_infiniband;
+    char                         *unmanaged = NULL;
+    const char                   *transport_mode;
+    int                           pkey;
+
+    connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-ipoib",
+                                       NULL,
+                                       TYPE_INFINIBAND,
+                                       &unmanaged);
+    g_assert(!unmanaged);
+
+    s_infiniband = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_INFINIBAND);
+
+    pkey = nm_setting_infiniband_get_p_key(s_infiniband);
+    g_assert(pkey);
+    g_assert_cmpint(pkey, ==, 12);
+
+    transport_mode = nm_setting_infiniband_get_transport_mode(s_infiniband);
+    g_assert(transport_mode);
+    g_assert_cmpstr(transport_mode, ==, "connected");
+}
+
+static void
+test_write_infiniband(gconstpointer test_data)
+{
+    const int                     TEST_IDX   = GPOINTER_TO_INT(test_data);
     nmtst_auto_unlinkfile char   *testfile   = NULL;
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
@@ -8223,14 +8250,15 @@ test_write_infiniband(void)
     const char  *mac = "80:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22";
     guint32      mtu = 65520;
     NMIPAddress *addr;
-    GError      *error = NULL;
+    GError      *error          = NULL;
+    const char  *interface_name = NULL;
 
     connection = nm_simple_connection_new();
 
     s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
-                 "Test Write InfiniBand",
+                 "Test Write Infiniband",
                  NM_SETTING_CONNECTION_UUID,
                  nm_uuid_generate_random_str_a(),
                  NM_SETTING_CONNECTION_AUTOCONNECT,
@@ -8239,15 +8267,28 @@ test_write_infiniband(void)
                  NM_SETTING_INFINIBAND_SETTING_NAME,
                  NULL);
 
+    if (NM_IN_SET(TEST_IDX, 1, 3))
+        interface_name = "ib0.000c";
+
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, interface_name, NULL);
+
     s_infiniband = _nm_connection_new_setting(connection, NM_TYPE_SETTING_INFINIBAND);
-    g_object_set(s_infiniband,
-                 NM_SETTING_INFINIBAND_MAC_ADDRESS,
-                 mac,
-                 NM_SETTING_INFINIBAND_MTU,
-                 mtu,
-                 NM_SETTING_INFINIBAND_TRANSPORT_MODE,
-                 "connected",
-                 NULL);
+    g_object_set(s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected", NULL);
+    if (NM_IN_SET(TEST_IDX, 1, 2)) {
+        g_object_set(s_infiniband,
+                     NM_SETTING_INFINIBAND_MAC_ADDRESS,
+                     mac,
+                     NM_SETTING_INFINIBAND_MTU,
+                     mtu,
+                     NULL);
+    } else {
+        g_object_set(s_infiniband,
+                     NM_SETTING_INFINIBAND_P_KEY,
+                     12,
+                     NM_SETTING_INFINIBAND_PARENT,
+                     "ib0",
+                     NULL);
+    }
 
     s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
@@ -8267,6 +8308,9 @@ test_write_infiniband(void)
     s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
+    if (nmtst_get_rand_bool())
+        nmtst_connection_normalize(connection);
+
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection(connection, TEST_SCRATCH_DIR, &testfile);
@@ -8274,6 +8318,8 @@ test_write_infiniband(void)
     reread = _connection_from_file(testfile, NULL, TYPE_INFINIBAND, NULL);
 
     nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
+
+    g_assert_cmpstr(interface_name, ==, nm_connection_get_interface_name(reread));
 }
 
 static void
@@ -10446,6 +10492,7 @@ main(int argc, char **argv)
     g_test_add_func(TPATH "wifi/read/wep-no-keys", test_read_wifi_wep_no_keys);
     g_test_add_func(TPATH "wifi/read/wep-agent-keys", test_read_wifi_wep_agent_keys);
     g_test_add_func(TPATH "infiniband/read", test_read_infiniband);
+    g_test_add_func(TPATH "ipoib/read", test_read_ipoib);
     g_test_add_func(TPATH "vlan/read", test_read_vlan_interface);
     g_test_add_func(TPATH "vlan/read-flags-1", test_read_vlan_flags_1);
     g_test_add_func(TPATH "vlan/read-flags-2", test_read_vlan_flags_2);
@@ -10582,7 +10629,10 @@ main(int argc, char **argv)
     g_test_add_func(TPATH "permissions/read", test_read_permissions);
     g_test_add_func(TPATH "permissions/write", test_write_permissions);
     g_test_add_func(TPATH "wifi/write-wep-agent-keys", test_write_wifi_wep_agent_keys);
-    g_test_add_func(TPATH "infiniband/write", test_write_infiniband);
+    g_test_add_data_func(TPATH "infiniband/write/1", GINT_TO_POINTER(1), test_write_infiniband);
+    g_test_add_data_func(TPATH "infiniband/write/2", GINT_TO_POINTER(2), test_write_infiniband);
+    g_test_add_data_func(TPATH "infiniband/write/3", GINT_TO_POINTER(3), test_write_infiniband);
+    g_test_add_data_func(TPATH "infiniband/write/4", GINT_TO_POINTER(4), test_write_infiniband);
     g_test_add_func(TPATH "vlan/write", test_write_vlan);
     g_test_add_func(TPATH "vlan/write-flags", test_write_vlan_flags);
     g_test_add_func(TPATH "vlan/write-only-vlanid", test_write_vlan_only_vlanid);