diff options
author | Jeremy Katz <katzj@redhat.com> | 2005-01-06 19:35:32 +0000 |
---|---|---|
committer | Jeremy Katz <katzj@redhat.com> | 2005-01-06 19:35:32 +0000 |
commit | 8bcbed4d7cd0cb69dbfbb428d95d9d51d66201b6 (patch) | |
tree | 0f536a8a748928ea8b24ea481c0c5160d2a59e8a | |
parent | a1f030fc982419ad0fbc652aa6dfa9543d7a5580 (diff) | |
download | anaconda-8bcbed4d7cd0cb69dbfbb428d95d9d51d66201b6.tar.gz anaconda-8bcbed4d7cd0cb69dbfbb428d95d9d51d66201b6.tar.xz anaconda-8bcbed4d7cd0cb69dbfbb428d95d9d51d66201b6.zip |
2005-01-06 Jeremy Katz <katzj@redhat.com>
* loader2/loader.c (parseCmdLineIp): Add patch from Bastien Nocera
to support parsing of pxelinux IPAPPEND (#134054)
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | loader2/loader.c | 49 |
2 files changed, 52 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2005-01-06 Jeremy Katz <katzj@redhat.com> + + * loader2/loader.c (parseCmdLineIp): Add patch from Bastien Nocera + to support parsing of pxelinux IPAPPEND (#134054) + 2005-01-04 Jeremy Katz <katzj@redhat.com> * partedUtils.py (getDefaultDiskType): the default disk type on diff --git a/loader2/loader.c b/loader2/loader.c index 8c899e8ff..99ade0762 100644 --- a/loader2/loader.c +++ b/loader2/loader.c @@ -456,6 +456,52 @@ static void readNetInfo(int flags, struct loaderData_s ** ld) { fclose(f); } +/* parse anaconda or pxelinux-style ip= arguments + * pxelinux format: ip=<client-ip>:<boot-server-ip>:<gw-ip>:<netmask> + * anaconda format: ip=<client-ip> netmask=<netmask> gateway=<gw-ip> +*/ +static void parseCmdLineIp(struct loaderData_s * loaderData, char *argv) +{ + /* Detect pxelinux */ + if (strstr(argv, ":") != NULL) { + char *start, *end; + + /* IP */ + start = argv + 3; + end = strstr(start, ":"); + loaderData->ip = strndup(start, end-start); + loaderData->ipinfo_set = 1; + + /* Boot server */ + if (end + 1 == '\0') + return; + start = end + 1; + end = strstr(start, ":"); + if (end == NULL) + return; + + /* Gateway */ + if (end + 1 == '\0') + return; + start = end + 1; + end = strstr(start, ":"); + if (end == NULL) { + loaderData->gateway = strdup (start); + return; + } else + loaderData->gateway = strndup(start, end-start); + + /* Netmask */ + if (end + 1 == '\0') + return; + start = end + 1; + loaderData->netmask = strdup(start); + } else { + loaderData->ip = strdup(argv + 3); + loaderData->ipinfo_set = 1; + } +} + /* parses /proc/cmdline for any arguments which are important to us. * NOTE: in test mode, can specify a cmdline with --cmdline */ @@ -567,8 +613,7 @@ static int parseCmdLineFlags(int flags, struct loaderData_s * loaderData, } else if (!strncasecmp(argv[i], "method=", 7)) { setMethodFromCmdline(argv[i] + 7, loaderData); } else if (!strncasecmp(argv[i], "ip=", 3)) { - loaderData->ip = strdup(argv[i] + 3); - loaderData->ipinfo_set = 1; + parseCmdLineIp(loaderData, argv[i]); } else if (!strncasecmp(argv[i], "netmask=", 8)) loaderData->netmask = strdup(argv[i] + 8); else if (!strncasecmp(argv[i], "gateway=", 8)) |