Commit 32906417 authored by Mike Hibler's avatar Mike Hibler

Hack to support command line arguments to MFS boots: if the "path" column

in the os_info row contains a space, everything after the space is considered
arguments.  Note that these arguments can be overridden by those in the
nodes table for def_boot and next_boot (but not temp_boot, which has no
corresponding boot_path and boot_cmd_line fields--something that should be
fixed, at the same time moving all these *_boot fields into node_attributes
and out of nodes).
parent bf12c0c2
/* /*
* EMULAB-COPYRIGHT * EMULAB-COPYRIGHT
* Copyright (c) 2000-2007 University of Utah and the Flux Group. * Copyright (c) 2000-2008 University of Utah and the Flux Group.
* All rights reserved. * All rights reserved.
*/ */
...@@ -141,11 +141,13 @@ query_bootinfo_db(struct in_addr ipaddr, int version, boot_what_t *info) ...@@ -141,11 +141,13 @@ query_bootinfo_db(struct in_addr ipaddr, int version, boot_what_t *info)
/* /*
* If we received a query from a node whose PXE boot program is * If we received a query from a node whose PXE boot program is
* not pxeboot, then it must be coming out of PXEWAIT and we need * not an "Emulab pxeboot", then the node may be coming out of PXEWAIT
* to tell it to reboot again to pick up the new PXE boot program. * and we need to tell it to reboot again to pick up the new PXE boot
* program. An "Emulab pxeboot" is one that speaks bootinfo.
* *
* XXX if "pxeboot" occurs in the string anywhere we assume it is * XXX note that an "Emulab pxeboot" is currently identified by
* a varient of our pxeboot and we don't do the reboot. * its not being the default pxeboot and its path containing the
* string "pxeboot" anywhere.
*/ */
if (DEFINED(PXE_BOOT_PATH) && if (DEFINED(PXE_BOOT_PATH) &&
strstr(row[PXE_BOOT_PATH], "pxeboot") == NULL) { strstr(row[PXE_BOOT_PATH], "pxeboot") == NULL) {
...@@ -178,6 +180,10 @@ query_bootinfo_db(struct in_addr ipaddr, int version, boot_what_t *info) ...@@ -178,6 +180,10 @@ query_bootinfo_db(struct in_addr ipaddr, int version, boot_what_t *info)
rval = 1; rval = 1;
} }
if (DEFINED(NEXT_BOOT_CMDLINE)) { if (DEFINED(NEXT_BOOT_CMDLINE)) {
/*
* XXX note that this will override any cmdline
* specified in the osid path. Should append instead?
*/
strncpy(info->cmdline, strncpy(info->cmdline,
row[NEXT_BOOT_CMDLINE], MAX_BOOT_CMDLINE-1); row[NEXT_BOOT_CMDLINE], MAX_BOOT_CMDLINE-1);
} }
...@@ -232,6 +238,10 @@ query_bootinfo_db(struct in_addr ipaddr, int version, boot_what_t *info) ...@@ -232,6 +238,10 @@ query_bootinfo_db(struct in_addr ipaddr, int version, boot_what_t *info)
rval = 1; rval = 1;
} }
if (DEFINED(DEF_BOOT_CMDLINE)) { if (DEFINED(DEF_BOOT_CMDLINE)) {
/*
* XXX note that this will override any cmdline
* specified in the osid path. Should append instead?
*/
strncpy(info->cmdline, strncpy(info->cmdline,
row[DEF_BOOT_CMDLINE], MAX_BOOT_CMDLINE-1); row[DEF_BOOT_CMDLINE], MAX_BOOT_CMDLINE-1);
} }
...@@ -345,7 +355,14 @@ parse_mfs_path(char *str, boot_what_t *info) ...@@ -345,7 +355,14 @@ parse_mfs_path(char *str, boot_what_t *info)
{ {
struct hostent *he; struct hostent *he;
struct in_addr hip; struct in_addr hip;
char *path; char *path, *args;
/* treat anything after a space as the command line */
args = strchr(str, ' ');
if (args != NULL) {
*args++ = '\0';
strncpy(info->cmdline, args, MAX_BOOT_CMDLINE-1);
}
/* no hostname, just copy string as is */ /* no hostname, just copy string as is */
path = strchr(str, ':'); path = strchr(str, ':');
......
/* /*
* EMULAB-COPYRIGHT * EMULAB-COPYRIGHT
* Copyright (c) 2000-2007 University of Utah and the Flux Group. * Copyright (c) 2000-2008 University of Utah and the Flux Group.
* All rights reserved. * All rights reserved.
* *
* boot/bootwhat.h from the OSKit. * Derived from boot/bootwhat.h in the OSKit.
*/ */
#ifndef _OSKIT_BOOT_BOOTWHAT_H_ #ifndef _EMULAB_BOOTWHAT_H_
#define _OSKIT_BOOT_BOOTWHAT_H_ #define _EMULAB_BOOTWHAT_H_
#define BOOTWHAT_DSTPORT 6969 #define BOOTWHAT_DSTPORT 6969
#define BOOTWHAT_SRCPORT 9696 #define BOOTWHAT_SRCPORT 9696
...@@ -41,7 +41,7 @@ typedef struct boot_info { ...@@ -41,7 +41,7 @@ typedef struct boot_info {
#define BIOPCODE_BOOTWHAT_INFO 5 /* Request for bootinfo */ #define BIOPCODE_BOOTWHAT_INFO 5 /* Request for bootinfo */
/* Version */ /* Version */
#define BIVERSION_CURRENT 1 /* Old version is zero */ #define BIVERSION_CURRENT 1 /* First version is zero */
/* Status */ /* Status */
#define BISTAT_SUCCESS 0 #define BISTAT_SUCCESS 0
...@@ -100,6 +100,6 @@ typedef struct boot_what { ...@@ -100,6 +100,6 @@ typedef struct boot_what {
#define BIBOOTWHAT_TYPE_MFS 7 /* Boot an MFS from server:/path */ #define BIBOOTWHAT_TYPE_MFS 7 /* Boot an MFS from server:/path */
/* Flags */ /* Flags */
#define BIBOOTWHAT FLAGS_CMDLINE 0x01 /* Kernel to boot */ #define BIBOOTWHAT_FLAGS_CMDLINE 0x01 /* Kernel to boot */
#endif /* _OSKIT_BOOT_BOOTWHAT_H_ */ #endif /* _EMULAB_BOOTWHAT_H_ */
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