Commit 92ffb85d authored by Amos Waterland's avatar Amos Waterland Committed by David S. Miller

[IPV4] ipconfig: Fix regression in ip command line processing

The recent changes for ip command line processing fixed some problems
but unfortunately broke some common usage scenarios.  In current
2.6.24-rc6 the following command line results in no IP address
assignment, which is surely a regression:

 ip=10.0.2.15::10.0.2.2:255.255.255.0::eth0:off

Please find below a patch that works for all cases I can find.
Signed-off-by: default avatarAmos Waterland <apw@us.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f844c74f
...@@ -145,6 +145,7 @@ ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf> ...@@ -145,6 +145,7 @@ ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
this option. this option.
off or none: don't use autoconfiguration off or none: don't use autoconfiguration
(do static IP assignment instead)
on or any: use any protocol available in the kernel on or any: use any protocol available in the kernel
(default) (default)
dhcp: use DHCP dhcp: use DHCP
......
...@@ -1404,8 +1404,7 @@ static int __init ic_proto_name(char *name) ...@@ -1404,8 +1404,7 @@ static int __init ic_proto_name(char *name)
return 1; return 1;
} }
if (!strcmp(name, "off") || !strcmp(name, "none")) { if (!strcmp(name, "off") || !strcmp(name, "none")) {
ic_enable = 0; return 0;
return 1;
} }
#ifdef CONFIG_IP_PNP_DHCP #ifdef CONFIG_IP_PNP_DHCP
else if (!strcmp(name, "dhcp")) { else if (!strcmp(name, "dhcp")) {
...@@ -1442,10 +1441,22 @@ static int __init ip_auto_config_setup(char *addrs) ...@@ -1442,10 +1441,22 @@ static int __init ip_auto_config_setup(char *addrs)
ic_set_manually = 1; ic_set_manually = 1;
ic_enable = 1; ic_enable = 1;
/*
* If any dhcp, bootp etc options are set, leave autoconfig on
* and skip the below static IP processing.
*/
if (ic_proto_name(addrs)) if (ic_proto_name(addrs))
return 1; return 1;
/* Parse the whole string */ /* If no static IP is given, turn off autoconfig and bail. */
if (*addrs == 0 ||
strcmp(addrs, "off") == 0 ||
strcmp(addrs, "none") == 0) {
ic_enable = 0;
return 1;
}
/* Parse string for static IP assignment. */
ip = addrs; ip = addrs;
while (ip && *ip) { while (ip && *ip) {
if ((cp = strchr(ip, ':'))) if ((cp = strchr(ip, ':')))
...@@ -1483,7 +1494,10 @@ static int __init ip_auto_config_setup(char *addrs) ...@@ -1483,7 +1494,10 @@ static int __init ip_auto_config_setup(char *addrs)
strlcpy(user_dev_name, ip, sizeof(user_dev_name)); strlcpy(user_dev_name, ip, sizeof(user_dev_name));
break; break;
case 6: case 6:
ic_proto_name(ip); if (ic_proto_name(ip) == 0 &&
ic_myaddr == NONE) {
ic_enable = 0;
}
break; break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment