summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2020-01-31 15:44:33 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2020-01-31 15:45:04 +0100
commit3d03900e910cb3d9c0af5e27104d6a4748f8e0b8 (patch)
tree39d4a30709ccaeaa0b748d40b7ce9ee64437c712
parentfc7af10cca6b3c0133f453931468794783456660 (diff)
downloadNetworkManager-3d03900e910cb3d9c0af5e27104d6a4748f8e0b8.tar.gz
platform: skip VRF test if kernel support is missing
Fixes: 7c73c6a038a1 ('platform: add VRF support')
-rw-r--r--src/platform/tests/test-common.c30
-rw-r--r--src/platform/tests/test-common.h3
-rw-r--r--src/platform/tests/test-link.c9
3 files changed, 28 insertions, 14 deletions
diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c
index 2b27d15414..373a10ddd4 100644
--- a/src/platform/tests/test-common.c
+++ b/src/platform/tests/test-common.c
@@ -1590,32 +1590,38 @@ const NMPlatformLink *
nmtstp_link_vrf_add (NMPlatform *platform,
gboolean external_command,
const char *name,
- const NMPlatformLnkVrf *lnk)
+ const NMPlatformLnkVrf *lnk,
+ gboolean *out_not_supported)
{
const NMPlatformLink *pllink = NULL;
- int err;
- int r;
+ int r = 0;
g_assert (nm_utils_is_valid_iface_name (name, NULL));
+ NM_SET_OUT (out_not_supported, FALSE);
external_command = nmtstp_run_command_check_external (external_command);
_init_platform (&platform, external_command);
if (external_command) {
- err = nmtstp_run_command ("ip link add %s type vrf table %u",
- name,
- lnk->table);
- if (err == 0)
+ r = nmtstp_run_command ("ip link add %s type vrf table %u",
+ name,
+ lnk->table);
+
+ if (r == 0)
pllink = nmtstp_assert_wait_for_link (platform, name, NM_LINK_TYPE_VRF, 100);
- } else {
+ else
+ _LOGI ("Adding vrf device via iproute2 failed. Assume iproute2 is not up to the task.");
+ }
+
+ if (!pllink) {
r = nm_platform_link_vrf_add (platform, name, lnk, &pllink);
- g_assert (NMTST_NM_ERR_SUCCESS (r));
- g_assert (pllink);
+ if (r == -EOPNOTSUPP)
+ NM_SET_OUT (out_not_supported, TRUE);
}
- g_assert_cmpint (pllink->type, ==, NM_LINK_TYPE_VRF);
- g_assert_cmpstr (pllink->name, ==, name);
+ _assert_pllink (platform, r == 0, pllink, name, NM_LINK_TYPE_VRF);
+
return pllink;
}
diff --git a/src/platform/tests/test-common.h b/src/platform/tests/test-common.h
index f392413eca..522c3756d3 100644
--- a/src/platform/tests/test-common.h
+++ b/src/platform/tests/test-common.h
@@ -363,7 +363,8 @@ const NMPlatformLink *nmtstp_link_tun_add (NMPlatform *platform,
const NMPlatformLink *nmtstp_link_vrf_add (NMPlatform *platform,
gboolean external_command,
const char *name,
- const NMPlatformLnkVrf *lnk);
+ const NMPlatformLnkVrf *lnk,
+ gboolean *out_not_supported);
const NMPlatformLink *nmtstp_link_vxlan_add (NMPlatform *platform,
gboolean external_command,
const char *name,
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c
index 2f7a503cee..2661914b98 100644
--- a/src/platform/tests/test-link.c
+++ b/src/platform/tests/test-link.c
@@ -1184,10 +1184,17 @@ test_software_detect (gconstpointer user_data)
break;
case NM_LINK_TYPE_VRF: {
NMPlatformLnkVrf lnk_vrf = { };
+ gboolean not_supported;
lnk_vrf.table = 9876;
- nmtstp_link_vrf_add (NULL, ext, DEVICE_NAME, &lnk_vrf);
+ if (!nmtstp_link_vrf_add (NULL, ext, DEVICE_NAME, &lnk_vrf, &not_supported)) {
+ if (not_supported) {
+ g_test_skip ("Cannot create VRF interface because of missing kernel support");
+ goto out_delete_parent;
+ }
+ g_error ("Failed adding VRF interface");
+ }
break;
}
case NM_LINK_TYPE_VXLAN: {