diff options
author | Michael Brown | 2017-04-12 16:03:25 +0200 |
---|---|---|
committer | Michael Brown | 2017-04-12 16:58:05 +0200 |
commit | 84d406ccf48c8808b0bb30d526b758e4b58cacc8 (patch) | |
tree | e0d262d87136fcaf8f202ab7d6e51760a387fe78 /src/include/ipxe | |
parent | [efi] Add efi_sprintf() and efi_vsprintf() (diff) | |
download | ipxe-84d406ccf48c8808b0bb30d526b758e4b58cacc8.tar.gz ipxe-84d406ccf48c8808b0bb30d526b758e4b58cacc8.tar.xz ipxe-84d406ccf48c8808b0bb30d526b758e4b58cacc8.zip |
[block] Allow use of a non-default EFI SAN boot filename
Some older operating systems (e.g. RHEL6) use a non-default filename
on the root disk and rely on setting an EFI variable to point to the
bootloader. This does not work when performing a SAN boot on a
machine where the EFI variable is not present.
Fix by allowing a non-default filename to be specified via the
"sanboot --filename" option or the "san-filename" setting. For
example:
sanboot --filename \efi\redhat\grub.efi \
iscsi:192.168.0.1::::iqn.2010-04.org.ipxe.demo:rhel6
or
option ipxe.san-filename code 188 = string;
option ipxe.san-filename "\\efi\\redhat\\grub.efi";
option root-path "iscsi:192.168.0.1::::iqn.2010-04.org.ipxe.demo:rhel6";
Originally-implemented-by: Vishvananda Ishaya Abrams <vish.ishaya@oracle.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe')
-rw-r--r-- | src/include/ipxe/dhcp.h | 6 | ||||
-rw-r--r-- | src/include/ipxe/sanboot.h | 3 | ||||
-rw-r--r-- | src/include/ipxe/settings.h | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/include/ipxe/dhcp.h b/src/include/ipxe/dhcp.h index 0f662d63..b7a5f004 100644 --- a/src/include/ipxe/dhcp.h +++ b/src/include/ipxe/dhcp.h @@ -440,6 +440,12 @@ struct dhcp_netdev_desc { */ #define DHCP_EB_SAN_RETRY DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbb ) +/** SAN filename + * + * This is the path of the bootloader within the SAN device. + */ +#define DHCP_EB_SAN_FILENAME DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbc ) + /** SAN drive number * * This is the drive number for a SAN-hooked drive. For BIOS, 0x80 is diff --git a/src/include/ipxe/sanboot.h b/src/include/ipxe/sanboot.h index 8737bbc0..8b3e2b28 100644 --- a/src/include/ipxe/sanboot.h +++ b/src/include/ipxe/sanboot.h @@ -155,9 +155,10 @@ void san_unhook ( unsigned int drive ); * Attempt to boot from a SAN device * * @v drive Drive number + * @v filename Filename (or NULL to use default) * @ret rc Return status code */ -int san_boot ( unsigned int drive ); +int san_boot ( unsigned int drive, const char *filename ); /** * Describe SAN devices for SAN-booted operating system diff --git a/src/include/ipxe/settings.h b/src/include/ipxe/settings.h index 521efa99..36b4c241 100644 --- a/src/include/ipxe/settings.h +++ b/src/include/ipxe/settings.h @@ -452,6 +452,8 @@ filename_setting __setting ( SETTING_BOOT, filename ); extern const struct setting root_path_setting __setting ( SETTING_SANBOOT, root-path ); extern const struct setting +san_filename_setting __setting ( SETTING_SANBOOT, san-filename ); +extern const struct setting username_setting __setting ( SETTING_AUTH, username ); extern const struct setting password_setting __setting ( SETTING_AUTH, password ); |