From 3063f40e9a45a63d91e611a23abd13b6da346ab3 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 19 Nov 2015 17:52:43 +0100 Subject: [PATCH] platform/tests: test SIT links --- src/platform/tests/test-common.c | 30 +++++++++++++++++++++++++ src/platform/tests/test-common.h | 3 +++ src/platform/tests/test-link.c | 38 ++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c index 1c1a22bab..c6b24720d 100644 --- a/src/platform/tests/test-common.c +++ b/src/platform/tests/test-common.c @@ -700,6 +700,36 @@ nmtstp_link_gre_add (gboolean external_command, const char *name, NMPlatformLnkG return success; } +gboolean +nmtstp_link_sit_add (gboolean external_command, const char *name, NMPlatformLnkSit *lnk) +{ + gboolean success; + char buffer[INET_ADDRSTRLEN]; + + external_command = nmtstp_run_command_check_external (external_command); + + if (external_command) { + gs_free char *dev = NULL; + + if (lnk->parent_ifindex) + dev = g_strdup_printf ("dev %s", nm_platform_link_get_name (NM_PLATFORM_GET, lnk->parent_ifindex)); + + success = !nmtstp_run_command ("ip tunnel add %s mode sit %s local %s remote %s ttl %u tos %02x %s", + name, + dev, + nm_utils_inet4_ntop (lnk->local, NULL), + nm_utils_inet4_ntop (lnk->remote, buffer), + lnk->ttl, + lnk->tos, + lnk->path_mtu_discovery ? "pmtudisc" : "nopmtudisc"); + if (success) + nmtstp_assert_wait_for_link (name, NM_LINK_TYPE_SIT, 100); + } else + success = nm_platform_link_sit_add (NM_PLATFORM_GET, name, lnk, NULL) == NM_PLATFORM_ERROR_SUCCESS; + + return success; +} + void nmtstp_ip4_address_add (gboolean external_command, int ifindex, diff --git a/src/platform/tests/test-common.h b/src/platform/tests/test-common.h index 536d14b1d..4120a7f13 100644 --- a/src/platform/tests/test-common.h +++ b/src/platform/tests/test-common.h @@ -138,6 +138,9 @@ void nmtstp_link_set_updown (gboolean external_command, gboolean nmtstp_link_gre_add (gboolean external_command, const char *name, NMPlatformLnkGre *lnk); +gboolean nmtstp_link_sit_add (gboolean external_command, + const char *name, + NMPlatformLnkSit *lnk); void init_tests (int *argc, char ***argv); void setup_tests (void); diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 15ed1031d..25004b74b 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -693,6 +693,31 @@ test_software_detect (gconstpointer user_data) case NM_LINK_TYPE_MACVLAN: nmtstp_run_command_check ("ip link add name %s link %s type macvlan", DEVICE_NAME, PARENT_NAME); break; + case NM_LINK_TYPE_SIT: { + NMPlatformLnkSit lnk_sit = { }; + gboolean gracefully_skip = FALSE; + + inet_pton (AF_INET, "192.168.200.1", &lnk_sit.local); + inet_pton (AF_INET, "172.25.100.14", &lnk_sit.remote); + lnk_sit.parent_ifindex = ifindex_parent; + lnk_sit.ttl = 0; + lnk_sit.tos = 31; + lnk_sit.path_mtu_discovery = FALSE; + + if (!nm_platform_link_get_by_ifname (NM_PLATFORM_GET, "sit0")) { + /* Seems that the sit module is not loaded... try to load it. */ + gracefully_skip = nm_utils_modprobe (NULL, TRUE, "sit", NULL) != 0; + } + + if (!nmtstp_link_sit_add (EX, DEVICE_NAME, &lnk_sit)) { + if (gracefully_skip) { + g_test_skip ("Cannot create sit tunnel because of missing sit module (modprobe sit)"); + goto out_delete_parent; + } + g_error ("Failed adding SIT tunnel"); + } + break; + } case NM_LINK_TYPE_VLAN: nmtstp_run_command_check ("ip link add name %s link %s type vlan id 1242", DEVICE_NAME, PARENT_NAME); break; @@ -769,6 +794,18 @@ test_software_detect (gconstpointer user_data) g_assert_cmpstr (plnk->mode, ==, "vepa"); break; } + case NM_LINK_TYPE_SIT: { + const NMPlatformLnkSit *plnk = &lnk->lnk_sit; + + g_assert (plnk == nm_platform_link_get_lnk_sit (NM_PLATFORM_GET, ifindex, NULL)); + g_assert_cmpint (plnk->parent_ifindex, ==, ifindex_parent); + nmtst_assert_ip4_address (plnk->local, "192.168.200.1"); + nmtst_assert_ip4_address (plnk->remote, "172.25.100.14"); + g_assert_cmpint (plnk->ttl, ==, 0); + g_assert_cmpint (plnk->tos, ==, 31); + g_assert_cmpint (plnk->path_mtu_discovery, ==, FALSE); + break; + } case NM_LINK_TYPE_VLAN: { const NMPlatformLnkVlan *plnk = &lnk->lnk_vlan; @@ -1588,6 +1625,7 @@ setup_tests (void) test_software_detect_add ("/link/software/detect/gre", NM_LINK_TYPE_GRE, 0); test_software_detect_add ("/link/software/detect/macvlan", NM_LINK_TYPE_MACVLAN, 0); + test_software_detect_add ("/link/software/detect/sit", NM_LINK_TYPE_SIT, 0); test_software_detect_add ("/link/software/detect/vlan", NM_LINK_TYPE_VLAN, 0); test_software_detect_add ("/link/software/detect/vxlan/0", NM_LINK_TYPE_VXLAN, 0); test_software_detect_add ("/link/software/detect/vxlan/1", NM_LINK_TYPE_VXLAN, 1);