summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fb.com>2015-10-07 18:18:38 -0700
committerThomas Haller <thaller@redhat.com>2015-10-08 19:02:45 +0200
commit004ce1e1e04b2d68c1a4c7f50353ffafcb26a59e (patch)
tree9250b6b7809c9af8e5e4122ea04543471b0f160d
parent95e8b165a7cf8a9f72ccfbc3ca09833c8e2cdb60 (diff)
downloadNetworkManager-004ce1e1e04b2d68c1a4c7f50353ffafcb26a59e.tar.gz
ifcfg-rh: accept BOOTPROTO=static with missing IPv4 addresses
Dracut when faced with an ipv6 only setup during kickstart will generate a ifcfg file that sets the ipv4 address things to null but sets BOOTPROTO=static. This makes network manager screw up because it expects an ipv4 address to be set. Instead deal with this case by checking if we have any ipv4 addrs set, and if not just disable ipv4. This fixes our inability to kickstart in our ipv6 only clusters. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com> https://mail.gnome.org/archives/networkmanager-list/2015-October/msg00015.html (cherry picked from commit 68eb350ad897abe1bd3e6fe11218f8ce688812af)
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c5
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv6-only-116
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c11
3 files changed, 26 insertions, 6 deletions
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 5bba38fdeb..8502ef49d6 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -937,7 +937,10 @@ make_ip4_setting (shvarFile *ifcfg,
} else if (!g_ascii_strcasecmp (value, "bootp") || !g_ascii_strcasecmp (value, "dhcp")) {
method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
} else if (!g_ascii_strcasecmp (value, "static")) {
- method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+ if (is_any_ip4_address_defined (ifcfg, NULL))
+ method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
+ else
+ method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
} else if (!g_ascii_strcasecmp (value, "autoip")) {
g_free (value);
g_object_set (s_ip4,
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv6-only-1 b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv6-only-1
new file mode 100644
index 0000000000..95f8a8ed8d
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-ipv6-only-1
@@ -0,0 +1,16 @@
+IPADDR=
+GATEWAY=
+NETMASK=
+BOOTPROTO=static
+TYPE=Ethernet
+DEVICE=eth2
+HWADDR=00:11:22:33:44:ee
+ONBOOT=yes
+USERCTL=yes
+NM_CONTROLLED=yes
+PEERDNS=yes
+DNS1=1:2:3:4::a
+DOMAIN="lorem.com ipsum.org dolor.edu"
+IPV6INIT=yes
+IPV6_AUTOCONF=no
+IPV6ADDR="1001:abba::1234/56"
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 731909ce92..82715f4738 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -1675,9 +1675,10 @@ test_read_wired_ipv6_manual (void)
}
#define TEST_IFCFG_WIRED_IPV6_ONLY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv6-only"
+#define TEST_IFCFG_WIRED_IPV6_ONLY_1 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv6-only-1"
static void
-test_read_wired_ipv6_only (void)
+test_read_wired_ipv6_only (const char *file, const char *expected_id)
{
NMConnection *connection;
NMSettingConnection *s_con;
@@ -1687,17 +1688,16 @@ test_read_wired_ipv6_only (void)
char *unmanaged = NULL;
GError *error = NULL;
const char *tmp;
- const char *expected_id = "System test-wired-ipv6-only";
NMIPAddress *ip6_addr;
const char *method;
- connection = connection_from_file_test (TEST_IFCFG_WIRED_IPV6_ONLY,
+ connection = connection_from_file_test (file,
NULL,
TYPE_ETHERNET,
&unmanaged,
&error);
ASSERT (connection != NULL,
- "wired-ipv6-only-read", "failed to read %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
+ "wired-ipv6-only-read", "failed to read %s: %s", file, error->message);
ASSERT (nm_connection_verify (connection, &error),
"wired-ipv6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
@@ -12762,7 +12762,8 @@ int main (int argc, char **argv)
test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_3, "System test-wired-ipv4-manual-3");
test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_4, "System test-wired-ipv4-manual-4");
test_read_wired_ipv6_manual ();
- test_read_wired_ipv6_only ();
+ test_read_wired_ipv6_only (TEST_IFCFG_WIRED_IPV6_ONLY, "System test-wired-ipv6-only");
+ test_read_wired_ipv6_only (TEST_IFCFG_WIRED_IPV6_ONLY_1, "System test-wired-ipv6-only-1");
test_read_wired_dhcp6_only ();
test_read_onboot_no ();
test_read_noip ();