mirror of
https://github.com/ipxe/ipxe
synced 2026-02-11 22:00:06 +03:00
[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>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -32,7 +32,7 @@ extern void set_autoboot_ll_addr ( const void *ll_addr, size_t len );
|
||||
|
||||
extern int uriboot ( struct uri *filename, struct uri **root_paths,
|
||||
unsigned int root_path_count, int drive,
|
||||
unsigned int flags );
|
||||
const char *san_filename, unsigned int flags );
|
||||
extern struct uri *
|
||||
fetch_next_server_and_filename ( struct settings *settings );
|
||||
extern int netboot ( struct net_device *netdev );
|
||||
|
||||
Reference in New Issue
Block a user