summaryrefslogtreecommitdiffstats
path: root/loader/loader.c
diff options
context:
space:
mode:
authorDavid Cantrell <dcantrell@redhat.com>2008-10-09 15:57:54 -1000
committerDavid Cantrell <dcantrell@redhat.com>2008-10-09 16:00:25 -1000
commita3fed83f1013817a31365201fc54831555b0436d (patch)
tree391d9300e954e838c39e57650d85019aa4697330 /loader/loader.c
parent7cfa8bba6befad6746240fb91b4d91b2ef0a121c (diff)
downloadanaconda-a3fed83f1013817a31365201fc54831555b0436d.tar.gz
anaconda-a3fed83f1013817a31365201fc54831555b0436d.tar.xz
anaconda-a3fed83f1013817a31365201fc54831555b0436d.zip
Pull in static network settings from the boot: line (#465270)
Got static networking when you are configuring the settings in loader, but using the ip= command line parameters? Totally different story.
Diffstat (limited to 'loader/loader.c')
-rw-r--r--loader/loader.c54
1 files changed, 33 insertions, 21 deletions
diff --git a/loader/loader.c b/loader/loader.c
index b10b22eba..dccf3426e 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1517,10 +1517,8 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
}
/* populate netDev based on any kickstart data */
- if (loaderData->ipinfo_set && dir != -1) {
+ if (loaderData->ipinfo_set) {
iface.flags |= IFACE_FLAGS_IS_PRESET;
- } else {
- iface.flags &= ~IFACE_FLAGS_IS_PRESET;
}
setupIfaceStruct(&iface, loaderData);
@@ -1531,21 +1529,27 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
} else {
if (loaderData->ipv4 == NULL) {
if (iface_have_in_addr(&iface.ipaddr)) {
- ret = (char *) inet_ntop(AF_INET, &iface.ipaddr,
- ret, INET_ADDRSTRLEN);
+ iface.ipv4method = IPV4_MANUAL_METHOD;
} else {
- ret = NULL;
- iface.flags |= IFACE_FLAGS_IS_DYNAMIC;
+ free(loaderData->ipv4);
+ loaderData->ipv4 = NULL;
+ loaderData->ipinfo_set = 0;
+ flags |= LOADER_FLAGS_NOIPV4;
}
-
- if (IFACE_IS_DYNAMIC(iface.flags) || ret == NULL) {
- loaderData->ipv4 = strdup("dhcp");
+ } else {
+ if (!strcmp(loaderData->ipv4, "dhcp")) {
+ iface.ipv4method = IPV4_DHCP_METHOD;
} else {
- loaderData->ipv4 = strdup(ret);
+ free(loaderData->ipv4);
+ loaderData->ipv4 = NULL;
+ loaderData->ipinfo_set = 0;
+ flags |= LOADER_FLAGS_NOIPV4;
}
}
- loaderData->ipinfo_set = 1;
+ if (loaderData->ipv4 != NULL) {
+ loaderData->ipinfo_set = 1;
+ }
}
#ifdef ENABLE_IPV6
@@ -1554,21 +1558,29 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
} else {
if (loaderData->ipv6 == NULL) {
if (iface_have_in6_addr(&iface.ip6addr)) {
- ret = (char *) inet_ntop(AF_INET6, &iface.ip6addr,
- ret, INET6_ADDRSTRLEN);
+ iface.ipv6method = IPV6_MANUAL_METHOD;
} else {
- ret = NULL;
- iface.flags |= IFACE_FLAGS_IS_DYNAMIC;
+ free(loaderData->ipv6);
+ loaderData->ipv6 = NULL;
+ loaderData->ipv6info_set = 0;
+ flags |= LOADER_FLAGS_NOIPV6;
}
-
- if (IFACE_IS_DYNAMIC(iface.flags) || ret == NULL) {
- loaderData->ipv6 = strdup("dhcpv6");
+ } else {
+ if (!strcmp(loaderData->ipv6, "auto")) {
+ iface.ipv6method = IPV6_AUTO_METHOD;
+ } else if (!strncmp(loaderData->ipv6, "dhcp", 4)) {
+ iface.ipv6method = IPV6_MANUAL_METHOD;
} else {
- loaderData->ipv6 = strdup(ret);
+ free(loaderData->ipv6);
+ loaderData->ipv6 = NULL;
+ loaderData->ipv6info_set = 0;
+ flags |= LOADER_FLAGS_NOIPV6;
}
}
- loaderData->ipv6info_set = 1;
+ if (loaderData->ipv6 != NULL) {
+ loaderData->ipv6info_set = 1;
+ }
}
#endif