diff options
author | Chris Lumens <clumens@redhat.com> | 2008-01-16 14:12:43 -0500 |
---|---|---|
committer | Chris Lumens <clumens@redhat.com> | 2008-01-16 14:29:40 -0500 |
commit | 062a1e5ebbf6dab03524a125c1ce34d3cea43fcb (patch) | |
tree | 8fda306aa721b5cde0f1c14fff5e1d60bce06c62 | |
parent | 2b73745c33d2ddd302bfd14152e97a05dab75d9b (diff) | |
download | anaconda-062a1e5ebbf6dab03524a125c1ce34d3cea43fcb.tar.gz anaconda-062a1e5ebbf6dab03524a125c1ce34d3cea43fcb.tar.xz anaconda-062a1e5ebbf6dab03524a125c1ce34d3cea43fcb.zip |
Initial support for network --bootproto=ask (#401531).
This patch adds support for a new network bootproto. The point of this is
to work around our basic assumption that no network line in the kickstart
file means you get dhcp. Some environments may want the assumption that
no network line means you get prompted for network configuration. That's
what this patch adds.
-rw-r--r-- | iw/network_gui.py | 4 | ||||
-rw-r--r-- | kickstart.py | 10 | ||||
-rw-r--r-- | loader2/net.c | 13 | ||||
-rw-r--r-- | network.py | 2 | ||||
-rw-r--r-- | textw/network_text.py | 4 |
5 files changed, 22 insertions, 11 deletions
diff --git a/iw/network_gui.py b/iw/network_gui.py index 2a4c89303..34f799cc4 100644 --- a/iw/network_gui.py +++ b/iw/network_gui.py @@ -341,7 +341,7 @@ class NetworkWindow(InstallWindow): for device in self.devices.keys(): bootproto = self.devices[device].get("bootproto") - if bootproto and bootproto.lower() == 'dhcp': + if bootproto and bootproto.lower() in ['ask', 'dhcp']: onboot = self.devices[device].get("ONBOOT") if onboot != "no": return 1 @@ -383,7 +383,7 @@ class NetworkWindow(InstallWindow): active = False bootproto = self.devices[device].get("bootproto") - if not bootproto: + if not bootproto or bootproto == "ask": bootproto = 'dhcp' self.devices[device].set(("bootproto", bootproto)) diff --git a/kickstart.py b/kickstart.py index 6b5068355..e5e613129 100644 --- a/kickstart.py +++ b/kickstart.py @@ -334,9 +334,9 @@ class Monitor(commands.monitor.FC6_Monitor): self.handler.id.instClass.setMonitor(self.handler.id, self.hsync, self.vsync, self.monitor) -class Network(commands.network.F8_Network): +class Network(commands.network.F9_Network): def parse(self, args): - commands.network.F8_Network.parse(self, args) + commands.network.F9_Network.parse(self, args) nd = self.network[-1] @@ -1063,7 +1063,11 @@ def setSteps(anaconda): dispatch.skipStep("regkey") dispatch.skipStep("installtype") dispatch.skipStep("tasksel") - dispatch.skipStep("network") + + # Only skip the network screen if there are no devices that used + # network --bootproto=ask. + if len(filter(lambda nd: nd.bootproto == BOOTPROTO_ASK, ksdata.network.network)) == 0: + dispatch.skipStep("network") # Don't show confirmation screens on non-interactive installs. if not interactive: diff --git a/loader2/net.c b/loader2/net.c index 2afcb8adb..66a7e1e69 100644 --- a/loader2/net.c +++ b/loader2/net.c @@ -1645,7 +1645,10 @@ void setKickstartNetwork(struct loaderData_s * loaderData, int argc, /* if they've specified dhcp/bootp or haven't specified anything, * use dhcp for the interface */ - if ((bootProto && (!strncmp(bootProto, "dhcp", 4) || + if (bootProto && !strncmp(bootProto, "ask", 3)) { + loaderData->ipv4 = strdup("ask"); + loaderData->ipinfo_set = 0; + } else if ((bootProto && (!strncmp(bootProto, "dhcp", 4) || !strncmp(bootProto, "bootp", 4))) || (!bootProto && !loaderData->ipv4)) { loaderData->ipv4 = strdup("dhcp"); @@ -1657,7 +1660,8 @@ void setKickstartNetwork(struct loaderData_s * loaderData, int argc, /* now make sure the specified bootproto is valid */ if (bootProto && strcmp(bootProto, "dhcp") && strcmp(bootProto, "bootp") && - strcmp(bootProto, "static") && strcmp(bootProto, "query")) { + strcmp(bootProto, "static") && strcmp(bootProto, "query") && + strcmp(bootProto, "ask")) { newtWinMessage(_("Kickstart Error"), _("OK"), _("Bad bootproto %s specified in network command"), bootProto); @@ -1914,7 +1918,10 @@ int kickstartNetworkUp(struct loaderData_s * loaderData, if (!loaderData->ipv4) { loaderData->ipv4 = strdup("dhcp"); } - loaderData->ipinfo_set = 1; + + if (strncmp(loaderData->ipv4, "ask", 3)) { + loaderData->ipinfo_set = 1; + } setupNetworkDeviceConfig(netCfgPtr, loaderData); diff --git a/network.py b/network.py index 593d42cfe..569e8ba96 100644 --- a/network.py +++ b/network.py @@ -83,7 +83,7 @@ def isPtpDev(devname): def anyUsingDHCP(devices): for dev in devices.keys(): bootproto = devices[dev].get("bootproto") - if bootproto and bootproto.lower() == "dhcp": + if bootproto and bootproto.lower() in ["ask", "dhcp"]: onboot = devices[dev].get("onboot") if onboot and onboot != "no": return 1 diff --git a/textw/network_text.py b/textw/network_text.py index a1660aa75..797d71cf2 100644 --- a/textw/network_text.py +++ b/textw/network_text.py @@ -270,7 +270,7 @@ class NetworkDeviceWindow: maingrid = Grid(1, 3) dhcpCb = radio.add(_("Dynamic IP configuration (DHCP)"), - "dhcp", (bootproto == "dhcp")) + "dhcp", (bootproto in ["ask", "dhcp"])) maingrid.setField(dhcpCb, 0, 0, growx = 1, anchorLeft = 1) manualCb = radio.add(_("Manual address configuration"), "static", (bootproto == "static")) @@ -626,7 +626,7 @@ class NetworkDeviceWindow: else: onboot = _("Inactive on boot") - if dev.get('bootproto').lower() == 'dhcp': + if dev.get('bootproto').lower() in ['ask', 'dhcp']: ipv4 = _("DHCP") else: ipv4 = dev.get('ipaddr') |