summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2008-01-16 14:12:43 -0500
committerChris Lumens <clumens@redhat.com>2008-01-16 14:29:40 -0500
commit062a1e5ebbf6dab03524a125c1ce34d3cea43fcb (patch)
tree8fda306aa721b5cde0f1c14fff5e1d60bce06c62
parent2b73745c33d2ddd302bfd14152e97a05dab75d9b (diff)
downloadanaconda-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.py4
-rw-r--r--kickstart.py10
-rw-r--r--loader2/net.c13
-rw-r--r--network.py2
-rw-r--r--textw/network_text.py4
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')