mirror of
https://github.com/ipxe/ipxe
synced 2025-12-25 00:17:57 +03:00
[block] Allow SAN boot device to be identified by UUID
Add a "--uuid" option which may be used to specify a boot device UUID, to be matched against the GPT partition GUID. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -597,6 +597,7 @@ static int efi_block_match ( unsigned int drive, EFI_HANDLE handle,
|
||||
EFI_DEVICE_PATH_PROTOCOL *path;
|
||||
void *interface;
|
||||
} u;
|
||||
union uuid guid;
|
||||
EFI_STATUS efirc;
|
||||
int rc;
|
||||
|
||||
@@ -623,6 +624,21 @@ static int efi_block_match ( unsigned int drive, EFI_HANDLE handle,
|
||||
DBGC ( drive, "EFIBLK %#02x contains filesystem %s\n",
|
||||
drive, efi_devpath_text ( u.path ) );
|
||||
|
||||
/* Check if filesystem matches GUID, if applicable */
|
||||
if ( config->uuid ) {
|
||||
if ( ( rc = efi_path_guid ( u.path, &guid ) ) != 0 ) {
|
||||
DBGC ( drive, "EFIBLK %#02x could not determine GUID: "
|
||||
"%s\n", drive, strerror ( rc ) );
|
||||
goto err_no_guid;
|
||||
}
|
||||
if ( memcmp ( config->uuid, &guid, sizeof ( guid ) ) != 0 ) {
|
||||
DBGC ( drive, "EFIBLK %#02x has wrong GUID %s\n",
|
||||
drive, uuid_ntoa ( &guid ) );
|
||||
rc = -ENOENT;
|
||||
goto err_wrong_guid;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if filesystem contains boot filename */
|
||||
if ( ( rc = efi_block_filename ( drive, handle,
|
||||
config->filename ) ) != 0 ) {
|
||||
@@ -633,6 +649,8 @@ static int efi_block_match ( unsigned int drive, EFI_HANDLE handle,
|
||||
rc = 0;
|
||||
|
||||
err_filename:
|
||||
err_wrong_guid:
|
||||
err_no_guid:
|
||||
err_not_child:
|
||||
bs->CloseProtocol ( handle, protocol, efi_image_handle, handle );
|
||||
err_open:
|
||||
|
||||
Reference in New Issue
Block a user