mirror of
https://github.com/ipxe/ipxe
synced 2025-12-23 13:30:57 +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:
@@ -95,8 +95,11 @@ static void dummy_san_unhook ( unsigned int drive ) {
|
||||
* Boot from dummy SAN device
|
||||
*
|
||||
* @v drive Drive number
|
||||
* @v filename Filename (or NULL to use default)
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
static int dummy_san_boot ( unsigned int drive __unused ) {
|
||||
static int dummy_san_boot ( unsigned int drive __unused,
|
||||
const char *filename __unused ) {
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,8 @@ static void null_san_unhook ( unsigned int drive __unused ) {
|
||||
/* Do nothing */
|
||||
}
|
||||
|
||||
static int null_san_boot ( unsigned int drive __unused ) {
|
||||
static int null_san_boot ( unsigned int drive __unused,
|
||||
const char *filename __unused ) {
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
|
||||
@@ -2396,6 +2396,15 @@ const struct setting root_path_setting __setting ( SETTING_SANBOOT, root-path)={
|
||||
.type = &setting_type_string,
|
||||
};
|
||||
|
||||
/** SAN filename setting */
|
||||
const struct setting san_filename_setting __setting ( SETTING_SANBOOT,
|
||||
san-filename ) = {
|
||||
.name = "san-filename",
|
||||
.description = "SAN filename",
|
||||
.tag = DHCP_EB_SAN_FILENAME,
|
||||
.type = &setting_type_string,
|
||||
};
|
||||
|
||||
/** Username setting */
|
||||
const struct setting username_setting __setting ( SETTING_AUTH, username ) = {
|
||||
.name = "username",
|
||||
|
||||
Reference in New Issue
Block a user