





Network Working Group                                         D. Hankins
Request for Comments: 5071                                           ISC
Category: Informational                                    December 2007


      Dynamic Host Configuration Protocol Options Used by PXELINUX

Status of This Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.

Abstract

   This document describes the use by PXELINUX of some DHCP Option Codes
   numbering from 208-211.


































Hankins                      Informational                      [Page 1]

RFC 5071                    PXELINUX Options               December 2007


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  MAGIC Option . . . . . . . . . . . . . . . . . . . . . . . . .  4
     3.1.  Description  . . . . . . . . . . . . . . . . . . . . . . .  4
     3.2.  Packet Format  . . . . . . . . . . . . . . . . . . . . . .  5
     3.3.  Applicability  . . . . . . . . . . . . . . . . . . . . . .  5
     3.4.  Response to RFC 3942 . . . . . . . . . . . . . . . . . . .  5
   4.  Configuration File Option  . . . . . . . . . . . . . . . . . .  5
     4.1.  Description  . . . . . . . . . . . . . . . . . . . . . . .  5
     4.2.  Packet Format  . . . . . . . . . . . . . . . . . . . . . .  6
     4.3.  Applicability  . . . . . . . . . . . . . . . . . . . . . .  6
     4.4.  Response to RFC 3942 . . . . . . . . . . . . . . . . . . .  6
     4.5.  Client and Server Behaviour  . . . . . . . . . . . . . . .  6
   5.  Path Prefix Option . . . . . . . . . . . . . . . . . . . . . .  7
     5.1.  Description  . . . . . . . . . . . . . . . . . . . . . . .  7
     5.2.  Packet Format  . . . . . . . . . . . . . . . . . . . . . .  7
     5.3.  Applicability  . . . . . . . . . . . . . . . . . . . . . .  7
     5.4.  Response to RFC 3942 . . . . . . . . . . . . . . . . . . .  8
     5.5.  Client and Server Behaviour  . . . . . . . . . . . . . . .  8
   6.  Reboot Time Option . . . . . . . . . . . . . . . . . . . . . .  9
     6.1.  Description  . . . . . . . . . . . . . . . . . . . . . . .  9
     6.2.  Packet Format  . . . . . . . . . . . . . . . . . . . . . .  9
     6.3.  Applicability  . . . . . . . . . . . . . . . . . . . . . . 10
     6.4.  Response to RFC 3942 . . . . . . . . . . . . . . . . . . . 10
     6.5.  Client and Server Behaviour  . . . . . . . . . . . . . . . 10
   7.  Specification Conformance  . . . . . . . . . . . . . . . . . . 11
   8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 11
   9.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 11
   10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 12
   11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12
     11.1. Normative References . . . . . . . . . . . . . . . . . . . 12
     11.2. Informative References . . . . . . . . . . . . . . . . . . 12

















Hankins                      Informational                      [Page 2]

RFC 5071                    PXELINUX Options               December 2007


1.  Introduction

   PXE, the Preboot eXecution Environment, is a first-stage network
   bootstrap agent.  PXE is loaded out of firmware on the client host,
   and performs DHCP [3] queries to obtain an IP address.

   Once on the network, it loads a second-stage bootstrap agent as
   configured by DHCP header and option contents.

   PXELINUX is one such second-stage bootstrap agent.  Once PXE has
   passed execution to it, PXELINUX seeks its configuration from a cache
   of DHCP options supplied to the PXE first-stage agent, and then takes
   action based upon those options.

   Most frequently, this implies loading via Trivial File Transfer
   Protocol (TFTP) [6] one or more images that are decompressed into
   memory, then executed to pass execution to the final Host Operating
   System.

   PXELINUX uses DHCP options 208-211 to govern parts of this bootstrap
   process, but these options are not requested by the PXE DHCP client
   at the time it acquires its lease.  At that time, the PXE bootloader
   has no knowledge that PXELINUX is going to be in use, and even so,
   would have no way to know what option(s) PXELINUX might digest.
   Local installations that serve this PXELINUX image to its clients
   must also configure their DHCP servers to provide these options even
   though they are not on the DHCP Parameter Request List [4].

   These options are:

   o  "MAGIC" - 208 - An option whose presence and content verifies to
      the PXELINUX bootloader that the options numbered 209-211 are for
      the purpose as described herein.

   o  "ConfigFile" - 209 - Configures the path/filename component of the
      configuration file's location, which this bootloader should use to
      configure itself.

   o  "PathPrefix" - 210 - Configures a value to be prepended to the
      ConfigFile to discern the directory location of the file.

   o  "RebootTime" - 211 - Configures a timeout after which the
      bootstrap program will reboot the system (most likely returning it
      to PXE).

   Historically, these option codes numbering from 208-211 were
   designated 'Site Local', but after publication of RFC3942 [8], they
   were made available for allocation as new standard DHCP options.



Hankins                      Informational                      [Page 3]

RFC 5071                    PXELINUX Options               December 2007


   This document marks these codes as assigned.

   This direct assignment of option code values in the option
   definitions below is unusual as it is not mentioned in DHCP Option
   Code assignment guidelines [5].  This document's Option Code
   assignments are done within RFC 3942's provisions for documenting
   prior use of option codes within the new range (128-223 inclusive).

2.  Terminology

   o  "first-stage bootloader" - Although a given bootloading order may
      have many stages, such as where a BIOS boots a DOS Boot Disk,
      which then loads a PXE executable, it is, in this example, only
      the PXE executable that this document describes as the "first-
      stage bootloader" -- in essence, this is the first stage of
      booting at which DHCP is involved.

   o  "second-stage bootloader" - This describes a program loaded by the
      first-stage bootloader at the behest of the DHCP server.

   o  "bootloader" and "network bootstrap agent" - These are synonyms,
      excepting that "bootloader" is intentionally vague in that its
      next form of bootstrapping may not in fact involve network
      resources.

   The key words "MAY", "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT"
   in this document are to be interpreted as described in RFC 2119 [2].

3.  MAGIC Option

3.1.  Description

   If this option is provided to the PXE bootloader, then the value is
   checked by PXELINUX to match the octet string f1:00:74:7e.  If this
   matches, then PXELINUX bootloaders will also consume options 209-211,
   as described below.  Otherwise, they are ignored.

   This measure was intended to ensure that, as the 'Site Local' option
   space is not allocated from a central authority, no conflict would
   result in a PXELINUX bootloader improperly digesting options intended
   for another purpose.










Hankins                      Informational                      [Page 4]

RFC 5071                    PXELINUX Options               December 2007


3.2.  Packet Format

   The MAGIC Option format is as follows:

              Code    Length     m1       m2       m3       m4
           +--------+--------+--------+--------+--------+--------+
           |   208  |    4   |  0xF1  |  0x00  |  0x74  |  0x7E  |
           +--------+--------+--------+--------+--------+--------+

   The code for this option is 208.  The length is always four.

3.3.  Applicability

   This option is absolutely inapplicable to any other purpose.

3.4.  Response to RFC 3942

   The option code 208 will be adopted for this purpose and immediately
   deprecated.  Future standards action may return this option to an
   available status should it be necessary.

   A collision of the use of this option is harmless (at least from
   PXELINUX' point of view) by design: if it does not match the
   aforementioned magic value, the PXELINUX bootloader will take no
   special action.

   The PXELINUX project will deprecate the use of this option; future
   versions of the software will not evaluate its contents.

   It is reasonable to utilize this option code for another purpose, but
   it is recommended to do this at a later time, given the desire to
   avoid potential collisions in legacy user bases.

4.  Configuration File Option

4.1.  Description

   Once the PXELINUX executable has been entered from the PXE
   bootloader, it evaluates this option and loads a file of that name
   via TFTP.  The contents of this file serve to configure PXELINUX in
   its next stage of bootloading (specifying boot image names,
   locations, boot-time flags, text to present the user in menu
   selections, etc).

   In the absence of this option, the PXELINUX agent will search the
   TFTP server (as determined by PXE prior to this stage) for a config
   file of several default names.




Hankins                      Informational                      [Page 5]

RFC 5071                    PXELINUX Options               December 2007


4.2.  Packet Format

   The Configuration File Option format is as follows:

              Code    Length    Config-file...
           +--------+--------+--------+--------+--------+--------+
           |   209  |    n   |   c1   |   c2   |   ...  |   c(n) |
           +--------+--------+--------+--------+--------+--------+

   The code for this option is 209.  The Config-file (c1..c(n)) is an
   NVT-ASCII [1] printable string; it is not terminated by a zero or any
   other value.

4.3.  Applicability

   Any bootloader, PXE or otherwise, that makes use of a separate
   configuration file rather than containing all configurations within
   DHCP options (which may be impossible due to the limited space
   available for DHCP options) may conceivably make use of this option.

4.4.  Response to RFC 3942

   The code 209 will be adopted for this purpose.

4.5.  Client and Server Behaviour

   The Config File Option MUST be supplied by the DHCP server if it
   appears on the Parameter Request List, but MUST also be supplied if
   the server administrator believed it would later be useful to the
   client (such as because the server is configured to offer a second-
   stage boot image, which they know will make use of it).  The option
   MUST NOT be supplied if no value has been configured for it, or if a
   value of zero length has been configured.

   The DHCP client MUST only cache this option in a location the second-
   stage bootloader may access.

   The second-stage bootloader MUST, in concert with other DHCP options
   and fields, use this option's value as a filename to be loaded via
   TFTP and read for further second-stage-loader-specific configuration
   parameters.  The format and content of such a file is specific to the
   second-stage bootloader, and as such, is out of scope of this
   document.








Hankins                      Informational                      [Page 6]

RFC 5071                    PXELINUX Options               December 2007


5.  Path Prefix Option

5.1.  Description

   In PXELINUX' case, it is often the case that several different
   environments would have the same TFTP path prefix, but would have
   different filenames (for example: hosts' bootloader images and config
   files may be kept in a directory structure derived from their Media
   Access Control (MAC) address).  Consequently, it was deemed
   worthwhile to deliver a TFTP path prefix configuration option, so
   that these two things could be configured separately in a DHCP Server
   configuration: the prefix and the possibly host-specific file
   location.

   The actual filename that PXELINUX requests from its TFTP server is
   derived by prepending this value to the Config File Option above.
   Once this config file is loaded and during processing, any TFTP file
   paths specified within it are similarly processed -- prepending the
   contents of this option.

5.2.  Packet Format

   The Path Prefix Option format is as follows:

              Code    Length   Path-Prefix...
           +--------+--------+--------+--------+--------+--------+
           |   210  |    n   |   p1   |   p2   |   ...  |   p(n) |
           +--------+--------+--------+--------+--------+--------+

   The code for this option is 210.  The Path Prefix is an NVT-ASCII
   printable string; it is not terminated by zero or any other value.

5.3.  Applicability

   This option came into existence because server administrators found
   it useful to configure the prefix and suffix of the config file path
   separately.  A group of different PXE booting clients may use the
   same path prefix, but different filenames, or vice versa.

   The 'shortcut' this represents is worthwhile, but it is questionable
   whether that needs to manifest itself on the protocol wire.










Hankins                      Informational                      [Page 7]

RFC 5071                    PXELINUX Options               December 2007


   It only becomes interesting from a protocol standpoint if other
   options are adopted that prefix this value as well -- performing a
   kind of string compression is highly beneficial to the limited
   available DHCP option space.

   But it's clearly inapplicable to any current use of, e.g., the
   FILENAME header contents or the DHCP Boot File Name option (#67).
   Use of these fields is encoded on firmware of thousands of devices
   that can't or are not likely to be upgraded.  Altering any behaviour
   here is likely to cause severe compatibility problems.

   Although compression of the TFTP-loaded configuration file contents
   is not a compelling factor, contrived configurations using these
   values may also exist: where each of a large variety of different
   clients load the same configuration file, with the same contents, but
   due to a differently configured path prefix actually load different
   images.  Whether this sort of use is truly needed remains unproven.

5.4.  Response to RFC 3942

   The code 210 will be adopted for this purpose.

5.5.  Client and Server Behaviour

   The Path Prefix option MUST be supplied by the DHCP server if it
   appears on the Parameter Request List, but MUST also be supplied if
   the server administrator believed it would later be useful to the
   client (such as because the server is configured to offer a second-
   stage boot image that they know will make use of it).  The option
   MUST NOT be supplied if no value has been configured for it, or if a
   value of zero length has been configured.

   The DHCP client MUST only cache this option in a location where the
   second-stage bootloader may access it.

   The second-stage bootloader MUST prepend this option's value, if any,
   to the contents of the ConfigFile option prior to obtaining the
   resulting value via TFTP, or the default 'Config File Search Path',
   which the second-stage bootloader iterates in the absence of a Config
   File Option.  The client MAY prepend the value to other configuration
   directives within that file once it has been loaded.  The client MUST
   NOT prepend this option's value to any other DHCP option contents or
   field, unless explicitly stated in a document describing that option
   or field.







Hankins                      Informational                      [Page 8]

RFC 5071                    PXELINUX Options               December 2007


6.  Reboot Time Option

6.1.  Description

   Should PXELINUX be executed, and then for some reason, be unable to
   reach its TFTP server to continue bootstrapping, the client will, by
   default, reboot itself after 300 seconds have passed.  This may be
   too long, too short, or inappropriate behaviour entirely, depending
   on the environment.

   By configuring a non-zero value in this option, admins can inform
   PXELINUX of which specific timeout is desired.  The client will
   reboot itself if it fails to achieve its configured network resources
   within the specified number of seconds.

   This reboot will run through the system's normal boot-time execution
   path, most likely leading it back to PXE and therefore PXELINUX.  So,
   in the general case, this is akin to returning the client to the DHCP
   INIT state.

   By configuring zero, the feature is disabled, and instead the client
   chooses to remove itself from the network and wait indefinitely for
   operator intervention.

   It should be stressed that this is in no way related to configuring a
   lease time.  The perceived transition to INIT state is due to client
   running state -- reinitializing itself -- not due to lease timer
   activity.  That is, it is not safe to assume that a PXELINUX client
   will abandon its lease when this timer expires.

6.2.  Packet Format

   The Reboot Time Option format is as follows:

              Code    Length
           +--------+--------+--------+--------+--------+--------+
           |   211  |    4   |            Reboot Time            |
           +--------+--------+--------+--------+--------+--------+

   The code for this option is 211.  The length is always four.  The
   Reboot Time is a 32-bit (4 byte) integer in network byte order.










Hankins                      Informational                      [Page 9]

RFC 5071                    PXELINUX Options               December 2007


6.3.  Applicability

   Any network bootstrap program in any sufficiently complex networking
   environment could conceivably enter into such a similar condition,
   either due to having its IP address stolen out from under it by a
   rogue client on the network, by being moved between networks where
   its PXE-derived DHCP lease is no longer valid, or any similar means.

   It seems desirable for any network bootstrap agent to implement an
   ultimate timeout for it to start over.

   The client may, for example, get different working configuration
   parameters from a different DHCP server upon restarting.

6.4.  Response to RFC 3942

   The code 211 will be adopted for this purpose.

6.5.  Client and Server Behaviour

   The Reboot Time Option MUST be supplied by the DHCP server if it
   appears on the Parameter Request List, but MUST also be supplied if
   the server administrator believed it would later be useful to the
   client (such as because the server is configured to offer a second-
   stage boot image that they know will make use of it).  The option
   MUST NOT be supplied if no value has been configured for it, or if it
   contains a value of zero length.

   The DHCP client MUST only cache this option in a location the second-
   stage bootloader may access.

   If the value of this option is nonzero, the second-stage bootloader
   MUST schedule a timeout: after a number of seconds equal to this
   option's value have passed, the second-stage bootloader MUST reboot
   the system, ultimately returning the path of execution back to the
   first-stage bootloader.  It MUST NOT reboot the system once the
   thread of execution has been passed to the host operating system (at
   which point, this timeout is effectively obviated).

   If the value of this option is zero, the second-stage bootloader MUST
   NOT schedule such a timeout at all.  Any second-stage bootloader that
   finds it has encountered excessive timeouts attempting to obtain its
   host operating system SHOULD disconnect itself from the network to
   wait for operator intervention, but MAY continue to attempt to
   acquire the host operating system indefinitely.






Hankins                      Informational                     [Page 10]

RFC 5071                    PXELINUX Options               December 2007


7.  Specification Conformance

   To conform to this specification, clients and servers MUST implement
   the Configuration File, Path Prefix, and Reboot Time options as
   directed.

   The MAGIC option MAY NOT be implemented, as it has been deprecated.

8.  Security Considerations

   PXE and PXELINUX allow any entity acting as a DHCP server to execute
   arbitrary code upon a system.  At present, no PXE implementation is
   known to implement authentication mechanisms [7] so that PXE clients
   can be sure they are receiving configuration information from the
   correct, authoritative DHCP server.

   The use of TFTP by PXE and PXELINUX also lacks any form of
   cryptographic signature -- so a 'Man in the Middle' attack may lead
   to an attacker's code being executed on the client system.  Since
   this is not an encrypted channel, any of the TFTP loaded data may
   also be exposed (such as in loading a "RAMDISK" image, which contains
   /etc/passwd or similar information).

   The use of the Ethernet MAC Address as the client's unique identity
   may allow an attacker who takes on that identity to gain
   inappropriate access to a client system's network resources by being
   given by the DHCP server whatever 'keys' are required, in fact, to be
   the target system (to boot up as though it were the target).

   Great care should be taken to secure PXE and PXELINUX installations,
   such as by using IP firewalls, to reduce or eliminate these concerns.

   A nearby attacker might feed a "Reboot Time" option value of 1 second
   to a mass of unsuspecting clients, to effect a Denial Of Service
   (DoS) upon the DHCP server, but then again it may just as easily
   supply these clients with rogue second-stage bootloaders that simply
   transmit a flood of packets.

   This document in and by itself provides no security, nor does it
   impact existing DCHP security as described in RFC 2131 [3].

9.  IANA Considerations

   IANA has done the following:

   1.  Moved DHCPv4 Option code 208 from 'Tentatively Assigned' to
       'Assigned', referencing this document.  IANA has marked this same
       option code, 208, as Deprecated.



Hankins                      Informational                     [Page 11]

RFC 5071                    PXELINUX Options               December 2007


   2.  Moved DHCPv4 Option code 209 from 'Tentatively Assigned' to
       'Assigned', referencing this document.

   3.  Moved DHCPv4 Option code 210 from 'Tentatively Assigned' to
       'Assigned', referencing this document.

   4.  Moved DHCPv4 Option code 211 from 'Tentatively Assigned' to
       'Assigned', referencing this document.

10.  Acknowledgements

   These options were designed and implemented for the PXELINUX project
   by H. Peter Anvin, and he was instrumental in producing this
   document.  Shane Kerr has also provided feedback that has improved
   this document.

11.  References

11.1.  Normative References

   [1]  Postel, J. and J. Reynolds, "Telnet Protocol Specification",
        STD 8, RFC 854, May 1983.

   [2]  Bradner, S., "Key words for use in RFCs to Indicate Requirement
        Levels", BCP 14, RFC 2119, March 1997.

   [3]  Droms, R., "Dynamic Host Configuration Protocol", RFC 2131,
        March 1997.

   [4]  Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor
        Extensions", RFC 2132, March 1997.

   [5]  Droms, R., "Procedures and IANA Guidelines for Definition of New
        DHCP Options and Message Types", BCP 43, RFC 2939,
        September 2000.

11.2.  Informative References

   [6]  Sollins, K., "The TFTP Protocol (Revision 2)", STD 33, RFC 1350,
        July 1992.

   [7]  Droms, R. and W. Arbaugh, "Authentication for DHCP Messages",
        RFC 3118, June 2001.

   [8]  Volz, B., "Reclassifying Dynamic Host Configuration Protocol
        version 4 (DHCPv4) Options", RFC 3942, November 2004.





Hankins                      Informational                     [Page 12]

RFC 5071                    PXELINUX Options               December 2007


Author's Address

   David W. Hankins
   Internet Systems Consortium, Inc.
   950 Charter Street
   Redwood City, CA  94063
   US

   Phone: +1 650 423 1307
   EMail: David_Hankins@isc.org









































Hankins                      Informational                     [Page 13]

RFC 5071                    PXELINUX Options               December 2007


Full Copyright Statement

   Copyright (C) The IETF Trust (2007).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.












Hankins                      Informational                     [Page 14]

