Internet DRAFT - draft-viswanathan-remote_boot-protocol

draft-viswanathan-remote_boot-protocol



INTERNET DRAFT                                          Vish Viswanathan
                                                             Intel Corp.
                                                            Feb 26, 1999


                      Intel PXE Remote Boot Protocol
                <draft-viswanathan-remote_boot-protocol-00.txt>


Status of this Memo

   This document is an Internet-Draft and is in full conformance with all
   provisions of Section 10 of RFC2026. 

   Internet-Drafts are working documents of the Internet Engineering Task
   Force (IETF), its areas, and its working groups. Note that other groups
   may also distribute working documents as Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months and
   may be updated, replaced, or obsoleted by other documents at any time. It
   is inappropriate to use Internet- Drafts as reference material or to cite
   them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft
   Shadow Directories can be accessed at http://www.ietf.org/shadow.html. 


Abstract

   This document defines the protocol that is used for remote booting of
   client systems in a Preboot eXecution Environment (PXE) as implemented in
   Intel's Universal Network Boot [1], which is part of Intel's Wired for
   Management initiative [2].


1.0 Introduction

   PXE defines a wire protocol to standardize an environment for remote
   booting of Intel architecture systems. This protocol makes heavy use of
   the DHCP options fields to exchange configuration information, locate
   different services etc.

1.1 Terminology

   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.








Expires  Aug  26, 1999                                               [Page 1]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999

2. Protocol Details

   The PXE wire protocol is a combination of an extension of DHCP [3](through
   the use of several new DHCP option tags) and the definition of simple
   packet transactions that use the DHCP packet format and options to pass
   additional information between the client and the server. This added
   complexity is introduced by the requirement to operate without disturbing
   existing DHCP services.
 
   A client provides the following configuration specific details to the
   boot server during a remote boot session. 

   * Client system's ID (16 byte UUID - Universally Unique ID)
   * Client system's architecture type (like X86PC, Alpha etc)
   * Type of boot server from which the client is requesting a response.


2.1 Steps taken during a client boot in PXE 

2.1.1 Step 1

   The client, wishing to remote boot an operating system image, broadcasts a
   DHCPDISCOVER packet as per the DHCP protocol. This packet is transmitted
   to acquire an IP address. The client also sends PXE protocol specific
   information along with this packet. The following PXE specific information is
   transmitted as DHCP options.

   * Client Machine Identifier - UUID (DHCP Option#61).
   * PXE Client Class Identifier (DHCP option #60 -
     "PXEClient:Arch:xxxxx:UNDI:yyyzzz")

2.1.2 Step 2

   A DHCP server responds to the above DHCPDISCOVER packet by sending a
   DHCPOFFER packet that contains the IP Address allocated to the client. In
   a PXE remote boot, the DHCP server also sends a special tag (option 60,
   with the value set to the string "PXEClient") to identify that it is
   capable of configuring a PXE client.
















Expires  Aug  26, 1999                                               [Page 2]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999


2.1.3 Step 3

   At this time, the PXE client may receive DHCPOFFER messages from several
   DHCP servers. However, the PXE client gives preference to servers whose
   replies contain the option tag 60 ("PXEClient"). When the PXE client
   receives such an offer, it implies that the PXE client has to engage in
   more transactions with the DHCP server after completion of the dynamic IP
   address acquisition. Once an IP address is acquired, the client contacts a
   special service (known as "PXE service") running on the DHCP server. "PXE 
   service" is listening on the UDP port 4011 for such requests. The PXE 
   client sends a DHCPREQUEST packet along with the following DHCP option tags
   (as specified in step 1).

   * Client machine identifier - UUID (DHCP Option#61).
   * PXE Client Class Identifier (DHCP option #60 -
     "PXEClient:Arch:xxxxx:UNDI:yyyzzz")


2.1.4 Step 4

   "PXE service" (that is running on the DHCP server) receives the above
   DHCPREQUEST packet directed to port 4011. The response DHCP ACK packet for
   this request includes the following information that the client needs to
   access/locate the boot servers.

   * Information on how to locate boot servers. This option specifies whether
     the boot servers could be discovered by a broadcast DHCP packet, a
     multicast packet or by unicasting a packet to the IP address from a
     list. 

   * The multicast discovery address that the client can use to locate the
     boot servers if the multicast discovery option is enabled through the
     previous option.

   * A menu prompt that the client displays to the user. Also, a timeout
     value in seconds is included in this option. The client has to display
     this menu for this timeout period before a default action is taken.

   * A list of menu items, which describe the types of boot servers
     available. The client typically displays this list to the user and lets
     the user select the boot server of their choice.

   * A list of boot server types and their IP addresses. This option is
     useful if a boot server cannot be located by broadcast or multicast
     discovery. In this case, the client is told the IP address(es) of the
     boot server type that it wants.

   The actual formats of all the option tags in this step are described in
   Appendix A.




Expires  Aug  26, 1999                                               [Page 3]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999


2.1.5 Step 5

   The client displays the menu prompt that it received from the previous
   step and lets the user pick a boot server type. Once the user makes a
   selection, the client tries to locate a boot server of that type. This is
   done by sending a DHCPREQUEST packet with the same information as in Step
   1 along with the type of the boot server it is trying to discover. 

   The discovery method by which this is done is determined by the option
   received through the previous step. That option could specify a multicast
   discovery, in which case, the client sends a multicast DHCP REQUEST packet to
   port 4011. If there is no response to the multicast discovery, then the
   client tries to broadcast the same request to the DHCP server port (port 67).
   If there is no response to this request as well, then the client tries to
   unicast the request to port 4011 using the list of IP addresses (one after
   another) obtained through step 4.

   The DHCPREQUEST packet that the client sends out contains the following
   information.

   * Client UUID (DHCP option #61)
   * PXE Client Class Identifier Tag (DHCP option #60)
   * PXE_BOOT_ITEM tag embedded in vendor specific information option (DHCP
     option #43)

2.1.6 Step 6

   Boot servers receiving the above mentioned packet MUST respond if
   they have boot image files for the boot server type defined in the
   PXE_BOOT_ITEM tag and the client system architecture defined in the
   class identifier tag. If the above conditions are satisfied, the server
   responds with a DHCPACK packet containing the following information.

   * PXE Client Class Identifier (DHCP option #60 - "PXEClient")
   * Several MTFTP related options embedded in vendor specific information
     option #43. These are described more in detail in the internet
     draft "Multicast TFTP in the Intel PXE Remote Boot Environment" [work in
     progress]
   * PXE_BOOT_ITEM tag embedded in vendor specific information option (DHCP
     option #43)
   * Boot file name specified in the fixed DHCP header bootfile portion

2.1.7 Step 7

   The client, on receiving the response mentioned above, contacts the (m)TFTP
   service on the boot server which sent the reply and downloads the boot
   file. If the Multicast TFTP option is chosen by the client, then the
   client follows the guidelines provided in the internet draft "Multicast TFTP
   in the Intel PXE Remote Boot Environment"




Expires  Aug  26, 1999                                               [Page 4]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999


Appendix A. PXE Related DHCP Options Definitions

A.1 PXE Class Identifier

   This option identifies PXE clients. This option also identifies the client
   system's architecture and the version of the Universal Network Driver
   Interface (UNDI) provided by the client.

   The code for this option is 60 and its length is 32 octets long.

   This option is of the form 
     "PXEClient:Arch:xxxxx:UNDI:yyyzzz", where
      xxxxx = Client System Architecture (5 octets long, value 0 to 65535)
      yyy = UNDI Major Version Number (3 octets long, value 0 to 255)
      zzz = UNDI Minor Version Number (3 octets long, value 0 to 255)

    Code   Len   32-octet String
   +-----+-----+-----+-----+-----+-----+-----+-----+
   | 60  | 32  |  PXEClient:Arch:xxxxx:UNDI:yyyzzz |
   +-----+-----+-----+-----+-----+-----+-----+-----+


A.2 PXE Client Machine Identifier (UUID)

   This option uniquely identifies a client machine. A 16-byte universally
   unique identifier (UUID) is used for this purpose [5]. A server can uniquely
   identify a client using this UUID and provide customized service.

   The code for this option is 61 and its length is 17, including the type
   identifier that appears before the UUID. PXE requires a type-identifier
   value of zero.

    Code   Len   Type   16-octet Identifier
   +-----+-----+-----+-----+-----+-----+-----+-----+
   | 61  | 17  |  0  |  o1 |  o2 | . . . .   | o16 |
   +-----+-----+-----+-----+-----+-----+-----+-----+


A.3 PXE Related DHCP options contained in DHCP Vendor specific information
    Option

   The DHCP vendor specific information option is used by clients and servers
   to exchange vendor specific information. The information is an opaque
   object of n octets. The Encapsulated vendor-specific options field MUST
   be encoded as a sequence of code/length/value fields of identical syntax
   to the DHCP options field.

    Code   Len   Vendor-specific information
   +-----+-----+-----+-----+---
   |  43 |  n  |  i1 |  i2 | ...
   +-----+-----+-----+-----+---


Expires  Aug  26, 1999                                               [Page 5]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999


   Within this vendor specific information, we have several code/length/value
   fields to specify the PXE related configuration information.


A.3.1 PXE_DISCOVERY_CONTROL

   This option specifies the different methods by which a client can discover
   boot servers.

   The code for this option is 6 and its length is 1.

    Code   Len   PXE_DISCOVERY_CONTROL
   +-----+-----+-----+
   |  6  |  1  |  b1 |
   +-----+-----+-----+


   The individual bits in this octet (bit 0 is the least significant bit) are
   defined as follows:

     Bit 0 - If set, broadcast discovery of servers is NOT allowed.
     Bit 1 - If set, multicast discovery of servers is NOT allowed.
     Bit 2 - If set, only use and/or accept replies from servers in the list
             defined by PXE_BOOT_SERVERS tag (defined in A.3.3)

   If this tag is not supplied, all bits are assumed to be 0.

A.3.2 DISCOVERY_MCAST_ADDR

   This option specifies the multicast IP address that is used by the client
   to discover boot servers. The client sends DHCPREQUEST packets to this
   multicast address.

   The code for this option is 7 and its length is 4.

    Code   Len   DISCOVERY_MCAST_ADDR
   +-----+-----+-----+-----+-----+-----+
   |  7  |  4  |  m1 |  m2 |  m3 |  m4 |
   +-----+-----+-----+-----+-----+-----+

A.3.3 PXE_BOOT_SERVERS

   This option specifies a list of boot server types and their IP addresses.

   The code for this option is 8 and its length is variable. It is basically
   a list containing multiple entries of the following 3 elements.

   * boot server type (2 octets long)
   * number of IP addresses (1 octet long) supporting the above type.
   * IP addresses of those servers ([4 * number of IP addresses] octets long).



Expires  Aug  26, 1999                                               [Page 6]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999


    Code   Len      type1   count        'n1' IP addresses
   +-----+-----+-----+-----+-----+-----..-----+-----..----+---
   |  8  |  v  |  t1 |  t2 |  n1 | IP addr 1  | IP addr 2 | . .
   +-----+-----+-----+-----+-----+-----..-----+-----..----+---

       type2    count        'n2' IP addresses
   +-----+-----+-----+-----..-----+-----..----+---
   |  t1 |  t2 |  n2 | IP addr 1  | IP addr 2 | . .
   +-----+-----+-----+-----..-----+-----..----+---

A.3.4 PXE_BOOT_MENU

   This option specifies a string description for each boot server type
   specified in option #8 above. The client MUST display this list to the user
   on request to provide the user with descriptions of the boot server types.

   The code for this option is 9 and its length is variable. It is  a list
   containing multiple entries of the following 3 elements.

   * boot server type (2 octets long)
   * length of the description string (1 octet long)
   * string describing the boot server type ('n' octets long).

    Code   Len      type1  str-len        description
   +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
   |  9  |  v  |  t1 |  t2 |  n1 | n1 octets of description .. | 
   +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

        type2  str-len          description
   +-----+-----+-----+-----+-----+-----+-----+-----+
   |  t1 |  t2 |  n2 | n2 octets of description .. | 
   +-----+-----+-----+-----+-----+-----+-----+-----+

A.3.5 PXE_MENU_PROMPT

   This option specifies the prompt message that the client can display to the
   user before proceeding with the remote boot. This option controls how the
   information obtained through the tag PXE_BOOT_MENU is presented to the user
   and the duration for which it is displayed on the screen.

   The code for this option is 10 and its length is variable.

    Code   Len timeout   Prompt String
   +-----+-----+-----+-----+-----+-----+-----+-----+
   | 10  |  v  |  t  |  prompt string ..  
   +-----+-----+-----+-----+-----+-----+-----+-----+







Expires  Aug  26, 1999                                               [Page 7]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999


   If the user presses the key <F8>, the prompt string and the menu obtained
   through tag #8 "PXE_BOOT_MENU" are displayed. The prompt is followed by the
   number of seconds remaining before the first item in the "PXE_BOOT_MENU" is
   automatically selected. If this option #10 is not returned, the menu will be
   displayed without prompt and timeout. Similarly, if the timeout is 255, the
   menu and the prompt will be displayed indefinitely till there is a user
   interaction. If the timeout is zero, the client automatically selects the
   first item in the menu. 

A.3.6 PXE_BOOT_ITEM

   This option specifies the boot server type that the client is discovering
   and also the "layer" number of the boot image that is requested. "Layer 0"
   always indicates the first bootfile for a particular boot server type.

   The code for this option is 71 and its length is 4.

    Code   Len   Boot Server Type   Layer #
   +-----+-----+--------+--------+-----+-----+
   | 71  |  4  |   t1   |   t2   |  n1 |  n2 |
   +-----+-----+--------+--------+-----+-----+




References:

   [1] Preboot Execution Environment (PXE) Specification Version 2.0
       ftp://download.intel.com/ial/wfm/pxespec.pdf

   [2] Intel's Wired for Management Initiative,
       URL:http://developer.intel.com/ial/wfm/index.htm

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

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

   [5] CAE Specification
       DCE 1.1: Remote Procedure Call
       Document Number: C706
       Universal Unique Identifier Appendix
       Copyright (c) 1997 The Open Group 
       http://www.opengroup.org/onlinepubs/9629399/toc.htm








Expires  Aug  26, 1999                                               [Page 8]
<draft-viswanathan-remote_boot-protocol-01.txt >                 Feb 26, 1999



Author's Address

               Vish Viswanathan
               Intel Corporation, MS JF3-206
               5200 NE Elam Young Pkwy
               Hillsboro, OR  97124

               Phone: (503) 264-9693
               Email: vish.viswanathan@intel.com











































Expires  Aug  26, 1999                                               [Page 9]