Original patch for the BZ was incomplete - anaconda did set the timeout for NM but didn't use it when waiting for device activation. Related: rhbz#769145 --- isys/iface.c | 10 +++++----- isys/iface.h | 2 +- loader/loader.c | 4 ++-- loader/net.c | 13 +++++++------ loader/net.h | 4 +++- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/isys/iface.c b/isys/iface.c index db3027f..64a7663 100644 --- a/isys/iface.c +++ b/isys/iface.c @@ -474,11 +474,11 @@ gboolean is_iface_activated(char * ifname) { /* * Wait for NetworkManager to appear on the system bus */ -int wait_for_nm(void) { +int wait_for_nm(int seconds) { int count = 0; /* send message and block until a reply or error comes back */ - while (count < 45) { + while (count < seconds) { if (is_nm_running()) return 0; @@ -491,9 +491,9 @@ int wait_for_nm(void) { /* * Start NetworkManager -- requires that you have already written out the - * control files in /etc/sysconfig for the interface. + * control files in /etc/sysconfig for the interface. Timeout in seconds. */ -int iface_start_NetworkManager(void) { +int iface_start_NetworkManager(int timeout) { pid_t pid; if (is_nm_running()) @@ -520,7 +520,7 @@ int iface_start_NetworkManager(void) { } else if (pid == -1) { return 1; } else { - return wait_for_nm(); + return wait_for_nm(timeout); } return 0; diff --git a/isys/iface.h b/isys/iface.h index 567f5ee..933ac84 100644 --- a/isys/iface.h +++ b/isys/iface.h @@ -157,7 +157,7 @@ gboolean is_iface_activated(char * ifname); /* * Start NetworkManager */ -int iface_start_NetworkManager(void); +int iface_start_NetworkManager(int timeout); /* * Set Maximum Transfer Unit (MTU) on specified interface diff --git a/loader/loader.c b/loader/loader.c index 0e6be44..3143449 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -2073,7 +2073,7 @@ int main(int argc, char ** argv) { loaderData.method = -1; loaderData.fw_loader_pid = -1; loaderData.fw_search_pathz_len = -1; - loaderData.dhcpTimeout = 0; + loaderData.dhcpTimeout = NM_DHCP_TIMEOUT; extraArgs[0] = NULL; parseCmdLineFlags(&loaderData, cmdLine); @@ -2254,7 +2254,7 @@ int main(int argc, char ** argv) { #endif /* Start NetworkManager now so it's always available to talk to. */ - if (iface_start_NetworkManager()) + if (iface_start_NetworkManager(loaderData.dhcpTimeout)) logMessage(INFO, "failed to start NetworkManager"); if (!FL_CMDLINE(flags)) diff --git a/loader/net.c b/loader/net.c index af6c90c..14efbf0 100644 --- a/loader/net.c +++ b/loader/net.c @@ -487,7 +487,7 @@ int readNetConfig(char * device, iface_t * iface, return LOADER_BACK; } - i = wait_for_iface_activation(iface->device); + i = wait_for_iface_activation(iface->device, iface->dhcptimeout); newtPopWindow(); if (i > 0) { @@ -548,7 +548,7 @@ int readNetConfig(char * device, iface_t * iface, return LOADER_BACK; } - i = wait_for_iface_activation(iface->device); + i = wait_for_iface_activation(iface->device, iface->dhcptimeout); newtPopWindow(); if (i > 0) { @@ -1585,7 +1585,7 @@ void setKickstartNetwork(struct loaderData_s * loaderData, int argc, iface_t iface; gchar *bootProto = NULL, *device = NULL, *class = NULL, *ethtool = NULL; gchar *essid = NULL, *wepkey = NULL, *onboot = NULL, *gateway = NULL; - gint mtu = 1500, dhcpTimeout = 0; + gint mtu = 1500; gboolean noipv4 = FALSE, noipv6 = FALSE, noDns = FALSE, noksdev = FALSE, activate = FALSE, nodefroute=FALSE, firstnetdev=FALSE; GOptionContext *optCon = g_option_context_new(NULL); GError *optErr = NULL; @@ -1622,7 +1622,7 @@ void setKickstartNetwork(struct loaderData_s * loaderData, int argc, { "activate", 0, 0, G_OPTION_ARG_NONE, &activate, NULL, NULL }, { "firstnetdev", 0, 0, G_OPTION_ARG_NONE, &firstnetdev, NULL, NULL }, { "nodefroute", 0, 0, G_OPTION_ARG_NONE, &nodefroute, NULL, NULL }, - { "dhcptimeout", 0, 0, G_OPTION_ARG_INT, &dhcpTimeout, NULL, NULL }, + { "dhcptimeout", 0, 0, G_OPTION_ARG_INT, &loaderData->dhcpTimeout, NULL, NULL }, { NULL }, }; @@ -1650,6 +1650,7 @@ void setKickstartNetwork(struct loaderData_s * loaderData, int argc, free(loaderData->wepkey); loaderData->wepkey = NULL; loaderData->mtu = 0; + loaderData->dhcpTimeout = NM_DHCP_TIMEOUT; #ifdef ENABLE_IPV6 free(loaderData->ipv6); @@ -2237,7 +2238,7 @@ void splitHostname (char *str, char **host, char **port) /* * Wait for activation of iface by NetworkManager, return non-zero on error. */ -int wait_for_iface_activation(char *ifname) { +int wait_for_iface_activation(char *ifname, int timeout) { int count = 0, i; NMClient *client = NULL; NMState state; @@ -2297,7 +2298,7 @@ int wait_for_iface_activation(char *ifname) { } /* send message and block until a reply or error comes back */ - while (count < 45) { + while (count < timeout) { /* pump the loop again to clear the messages */ while (g_main_context_pending (ctx)) { g_main_context_iteration (ctx, FALSE); diff --git a/loader/net.h b/loader/net.h index e23582a..a35dd5b 100644 --- a/loader/net.h +++ b/loader/net.h @@ -34,6 +34,8 @@ #define SYSCONFIG_PATH "/etc/sysconfig" #define NETWORK_SCRIPTS_PATH "/etc/sysconfig/network-scripts" +#define NM_DHCP_TIMEOUT 45 + struct intfconfig_s { newtComponent ipv4Entry, cidr4Entry; newtComponent gwEntry, nsEntry; @@ -80,7 +82,7 @@ int activateDevice(struct loaderData_s * loaderData, iface_t * iface); int disconnectDevice(char *device); void splitHostname (char *str, char **host, char **port); -int wait_for_iface_activation(char * ifname); +int wait_for_iface_activation(char * ifname, int timeout); int wait_for_iface_disconnection(char *ifname); int isURLRemote(char *url); int split_ipv6addr_prefix_length(char *str, char **address, char **prefix); -- 1.7.4 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list