mirror of https://gitee.com/openkylin/linux.git
[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: Amos Waterland <apw@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f844c74fe0
commit
92ffb85dd3
|
@ -145,6 +145,7 @@ ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
|
|||
this option.
|
||||
|
||||
off or none: don't use autoconfiguration
|
||||
(do static IP assignment instead)
|
||||
on or any: use any protocol available in the kernel
|
||||
(default)
|
||||
dhcp: use DHCP
|
||||
|
|
|
@ -1404,8 +1404,7 @@ static int __init ic_proto_name(char *name)
|
|||
return 1;
|
||||
}
|
||||
if (!strcmp(name, "off") || !strcmp(name, "none")) {
|
||||
ic_enable = 0;
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
#ifdef CONFIG_IP_PNP_DHCP
|
||||
else if (!strcmp(name, "dhcp")) {
|
||||
|
@ -1442,10 +1441,22 @@ static int __init ip_auto_config_setup(char *addrs)
|
|||
ic_set_manually = 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))
|
||||
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;
|
||||
while (ip && *ip) {
|
||||
if ((cp = strchr(ip, ':')))
|
||||
|
@ -1483,7 +1494,10 @@ static int __init ip_auto_config_setup(char *addrs)
|
|||
strlcpy(user_dev_name, ip, sizeof(user_dev_name));
|
||||
break;
|
||||
case 6:
|
||||
ic_proto_name(ip);
|
||||
if (ic_proto_name(ip) == 0 &&
|
||||
ic_myaddr == NONE) {
|
||||
ic_enable = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue