Skip to content

Commit

Permalink
[IPV4] ipconfig: Fix regression in ip command line processing
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Amos Waterland authored and davem330 committed Jan 9, 2008
1 parent f844c74 commit 92ffb85
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
1 change: 1 addition & 0 deletions Documentation/nfsroot.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 18 additions & 4 deletions net/ipv4/ipconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -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")) {
Expand Down Expand Up @@ -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, ':')))
Expand Down Expand Up @@ -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;
}
}
Expand Down

0 comments on commit 92ffb85

Please sign in to comment.