Administrator Guide
13 : BIOS vs. UEFI | Doc ID 20444677 | June 2018
iSCSI boot configuration (see the UEFI HTTP boot and UEFI iSCSI boot sections in this paper for
details).
Minimal changes are required for the PXE server and PXE client when transitioning from BIOS boot mode to
UEFI boot mode. The following sections describe these changes.
4.3.1 PXE Server Configuration
PXE server setup involves configuration of the DHCP server and boot server (a.k.a. TFTP server).
In UEFI boot mode the Network Bootstrap Program (NBP) must be a UEFI bootable image (PE/COFF
format). For Linux environments, UEFI-capable NBPs include ELILO, grub2, and syslinux. Windows
environments (Windows Server 2012 and later) use bootmgfw.efi. Alternatively, Windows Deployment
Services (WDS) offers PXE server configuration capabilities for UEFI-based PXE clients.
4.3.2 DHCP Server Configuration for UEFI PXE
To support both legacy PXE and UEFI PXE in the same network, the DHCP server must supply different
NBPs based on the Architecture type (RFC 4578) in the client’s DHCP request. If the client sends
Architecture type 0 (“Intel x86 PC”) the system is in legacy boot mode. If it sends type 6, it is in UEFI 32-bit
boot mode, but if it sends type 7, 8 or 9 it is in UEFI 64-bit boot mode. The architecture type will be sent in
Option 93 and as part of the string in Option 60 (“Vendor class identifier”). The reason it is included in both
options is backwards compatibility with older DHCP servers that do not support Option 93. The following is
from a Wireshark capture of a PXE boot DHCP Discover:
The following is an example of Linux DHCP server configuration that replies with different NBP files based on
the Architecture type. Note that the Architecture type is encoded in the first 20 characters of the vendor class
identifier:
subnet … {
…
class "UEFI64-7" {
match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007";
filename "ipxe.efi";
}
class "UEFI64-8" {
match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008";
filename "ipxe.efi";
}
class "UEFI64-9" {
match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009";
filename "ipxe.efi";
}
class "Legacy" {
match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000";