RFC 4578

Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE)

πŸ“… published November 2006, from ietf

RFC 4578: DHCP Options for the Intel Preboot eXecution Environment (PXE) πŸ’–

okay bestie, this is the RFC that tells DHCP how to recognise PXE and EFI booting machines ✨

Here's the title block, all in one spot πŸŽ€

  • Stream: Network Working Group
  • Number: Request for Comments: 4578
  • Category: Informational
  • Authors: M. Johnston (Intel Corporation) and S. Venaas, Ed. (UNINETT)
  • Date: November 2006
  • Obsoletes / Updates: the header doesn't list anything it obsoletes or updates πŸ¦‹

Status of This Memo

okay so this memo is here to give info to the Internet community 🌸 it is not a standard of any kind, and anyone can share it freely with no limits πŸ’…

Copyright (C) The IETF Trust (2006).

Abstract

the big idea here is defining the DHCP options that PXE and EFI clients use to say exactly who they are 🧚 and what their pre-OS runtime environment looks like. that way the DHCP and/or PXE boot server can hand back the right OS bootstrap image (or pre-boot application) name and server, and it's giving precision πŸ”₯

Table of Contents

   1. Introduction ....................................................2
      1.1. Requirements Language ......................................2
   2. Option Definitions ..............................................2
      2.1. Client System Architecture Type Option Definition ..........2
      2.2. Client Network Interface Identifier Option Definition ......3
      2.3. Client Machine Identifier Option Definition ................4
      2.4. Options Requested by PXE Clients ...........................4
   3. Acknowledgements ................................................5
   4. IANA Considerations .............................................5
   5. Security Considerations .........................................5
   6. Normative References ............................................5

1. Introduction ✨

so these DHCP [2] options are being used a LOT by PXE-compliant clients πŸ’œ they let a booting machine identify itself, plus its pre-OS runtime environment, so the DHCP and/or PXE boot server can return the correct OS bootstrap image (or pre-boot application) name and server to the client πŸ¦‹

back in the day, people did this by looking at the network Media Access Code (MAC) address in the "chaddr" field of the BOOTP/DHCP header and keeping a database of MAC addresses on the BOOTP/DHCP server. ngl that was not it, and it didn't scale for big complicated networks 😭 for two main reasons:

  1. Multiple laptops could end up with the same MAC address if the network interface was in a shared docking station.
  2. Multiple network devices and MAC addresses could be used by one machine for redundancy or because of repairs.

there was also the issue of a machine changing its pre-OS runtime environment πŸ™ˆ which is why another new option was created, to identify that runtime environment so the correct binary image could be matched up with the booting machine. Intel defines these options in the PXE [3] and EFI [4] specifications, and they're being documented in this draft for completeness within the IETF 🌈

1.1. Requirements Language

the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [1] πŸŽ€

2. Option Definitions πŸ“

there are three DHCP options [5] defined for use by PXE clients, and we're about to go through all of them, bestie πŸ’…

2.1. Client System Architecture Type Option Definition

the option is laid out like this:

                Code  Len  16-bit Type
               +----+-----+-----+-----+
               | 93 |  n  | n1  | n2  |
               +----+-----+-----+-----+

so octet "n" tells you how many octets hold the "architecture types" (the code and len fields don't count). it MUST be an even number greater than zero πŸ”₯ clients that support more than one architecture type MAY include a list of those types in their initial DHCP and PXE boot server packets, and that list MAY be reduced in any packet exchange between the client and server(s). octets "n1" and "n2" together encode a 16-bit architecture type identifier that describes the pre-boot runtime environment(s) of the client machine πŸ‘‘

as of writing this doc, these pre-boot architecture types have been requested:

            Type   Architecture Name
            ----   -----------------
              0    Intel x86PC
              1    NEC/PC98
              2    EFI Itanium
              3    DEC Alpha
              4    Arc x86
              5    Intel Lean Client
              6    EFI IA32
              7    EFI BC
              8    EFI Xscale
              9    EFI x86-64

this option MUST be present in all DHCP and PXE packets sent by PXE-compliant clients and servers 🫢

2.2. Client Network Interface Identifier Option Definition

the layout here is:

                Code  Len  Type Major Minor
               +----+-----+----+-----+-----+
               | 94 |  3  |  t |  M  |  m  |
               +----+-----+----+-----+-----+

octet "t" encodes a network interface type. for now, the only supported value is 1 for Universal Network Device Interface (UNDI) πŸ¦‹ octets "M" and "m" describe the interface revision. to encode the UNDI revision of 2.11, "M" gets set to 2 and "m" gets set to 11 (0x0B) ✨

here's the revision chart, and it's giving history lesson πŸ“œ

         Revision  Description
         --------  -----------
         < 2.00    LANDesk service agent boot ROMs.  No PXE APIs.

           2.00    First generation PXE boot ROMs.  (PXENV+) [3]

           2.01    Second generation PXE boot ROMs.  (!PXE)  [3]

           3.00    32/64-bit UNDI specification.    (Alpha)  [4]
                   EFI boot services driver only.
                   No EFI runtime support.

           3.10    32/64-bit UNDI specification.     (Beta)  [4]
                   First generation EFI runtime driver support.

           3.20    32/64-bit UNDI specification.  (Release)  [4]
                   Second generation EFI runtime driver support.

this option MUST be present in all DHCP and PXE packets sent by PXE-compliant clients and servers πŸ’–

2.3. Client Machine Identifier Option Definition

the format of the option is:

                Code  Len  Type  Machine Identifier
               +----+-----+----+-----+ . . . +-----+
               | 97 |  n  |  t |     | . . . |     |
               +----+-----+----+-----+ . . . +-----+

octet "t" describes the type of the machine identifier in the remaining octets of this option. 0 (zero) is the only value defined for this octet right now, and it describes the remaining octets as a 16-octet Globally Unique Identifier (GUID) 🧚 octet "n" is 17 for type 0. (one definition of GUID can be found in Appendix A of the EFI specification [4].)

this option MUST be present in all DHCP and PXE packets sent by PXE-compliant clients and servers 🌸

2.4. Options Requested by PXE Clients

okay this one is a big deal πŸ‘‘ all compliant PXE clients MUST include a request for DHCP options 128 through 135 in all DHCP and PXE packets. the format and contents of these options are NOT defined by the PXE specification. these options MAY be present in the DHCP and PXE boot server replies, and they're meant for use by the downloaded network bootstrap programs. these options are NOT used by the PXE boot ROMs πŸ™ˆ

and here's the tea: options 128-135 aren't officially assigned for PXE use. before November 2004 they were considered site-specific options [6], so using these option values for PXE may conflict with other uses of the same options on the same networks πŸ’€


(part 1 of 2 done! part 2 is coming with Acknowledgements, IANA, Security, References and the authors' bits πŸŒˆπŸ’œ)

Intellectual Property

okay bestie, this part is all about who owns what πŸ’… the IETF is basically saying "we are NOT picking a side on whether any patents or rights around this tech are valid or how far they reach" πŸ™ˆ It also doesn't promise that you could get a license for any of it, and it didn't go hunting for any rights either ✨ If you want the rules on rights for RFC docs, go check BCP 78 and BCP 79 πŸŽ€

Copies of IPR disclosures sent to the IETF Secretariat live in the IETF online IPR repository at http://www.ietf.org/ipr πŸ¦‹ That's also where you'd find any assurances of licenses that get offered, plus the results of attempts to get a general license or permission for implementers or users to use those proprietary rights. Main character research energy πŸ”₯

The IETF also invites anyone to flag any copyrights, patents, patent applications, or other proprietary rights that might cover tech needed to implement this standard. Send that info to ietf-ipr@ietf.org πŸ’Œ No cap, they want the tea 🫢

Acknowledgement

Funding for the RFC Editor function is currently provided by the Internet Society πŸŒˆπŸ’œ So the people keeping these docs organized are getting their support from them right now, and that's iconic ✨

πŸ“¦ where this page comes from