home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Diskless-HOWTO < prev    next >
Text File  |  1999-05-17  |  251KB  |  6,535 lines

  1.   Diskless Nodes HOW-TO document for Linux
  2.   Robert Nemkin        buci@math.klte.hu , Al Dev (Alavoor
  3.   Vasudevan) - Maintainer of this HOWTO alavoor@yahoo.com ,
  4.   Markus Gutschke markus+etherboot@gutschke.com , Ken Yap
  5.   ken.yap@acm.org , Zurⁿck zu Gero gero@gkminix.han.de
  6.   v1.0, 13 May 1999
  7.  
  8.   This document describes how to set up a diskless Linux box. As tech¡
  9.   nology is advancing rapidly, networkcards are becoming cheaper and
  10.   much faster - 100 MBits ethernet is standard now and in about 1 to 2
  11.   years 1000 MBits i.e. 1GigBits ethernet cards will become a industry
  12.   standard.  With high-speed network cards, remote access will become as
  13.   fast as the local disk access which will make diskless nodes a viable
  14.   alternative to workstations in local LAN. Also diskless nodes elimi¡
  15.   nates the cost of software upgrades and system administration costs
  16.   like backup, recovery which will be centralized on the server side.
  17.   Diskless nodes also enable "sharing/optimization" of centralised
  18.   server CPU, memory, hard-disk, tape and cdrom resources. Diskless
  19.   nodes provides mobility for the users i.e., users can log on from any
  20.   one of diskless nodes and are not tied to one workstation.  Diskless
  21.   Linux box completely eliminates the need for local floppy disk, cdrom
  22.   drive, tape drive and hard-disk. Diskless nodes JUST has a network
  23.   card, 8MB RAM, a low-end cpu and a very simple mother-board which does
  24.   not have any interface sockets/slots for harddisks, modem, cdrom,
  25.   floppy etc..  With Diskless linux nodes you can run programs on remote
  26.   Linux 64 CPU SMP box or even on Linux super-computer!  Diskless nodes
  27.   lowers the "Total Cost of Ownership" of the computer system.  This
  28.   document is copy¡righted by Robert Nemkin and other authors as listed
  29.   above. Copyright policy is GPL.  Thanks to Bela Kis        bkis@car¡
  30.   tan.math.klte.hu for translating this initial document v0.0.3 (which
  31.   was a mini-howto) to English.
  32.   ______________________________________________________________________
  33.  
  34.   Table of Contents
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Other Formats of this Document
  68.  
  69.   2. Introduction to Network Booting and Etherboot
  70.  
  71.      2.1 What is Network booting?
  72.      2.2 How does it work
  73.      2.3 Netbooting in Practice
  74.      2.4 Uses of Network booting
  75.      2.5 For more information
  76.  
  77.   3. Begin setup
  78.  
  79.      3.1 Document Changes
  80.      3.2 How to set up a diskless Linux box
  81.      3.3 Related documents
  82.      3.4 How does it work?
  83.      3.5 Hardware
  84.  
  85.   4. Fundamental ideas
  86.  
  87.      4.1 Setting up the PC
  88.      4.2 Setting up a bootpd on the server
  89.      4.3 Configure the bootpd on the server
  90.      4.4 Understanding tftp
  91.      4.5 Kernel Image
  92.      4.6 Setting up a minimal Linux configuration on the remote server
  93.      4.7 Configuring the tftp server
  94.      4.8 Final work
  95.      4.9 Net Loader
  96.      4.10 RH5 configuration
  97.      4.11 Gotchas and caveats
  98.      4.12 X-terminal
  99.  
  100.   5. Trouble shooting
  101.  
  102.      5.1 Memory and diskspace requirements; speed
  103.      5.2 Possible errors
  104.      5.3 Errors and possible further expansions of this document
  105.  
  106.   6. EEPROM Burners and Memory chips
  107.  
  108.      6.1 List of EEPROM Burner manufacturers
  109.      6.2 Non-Volatile Memory chips
  110.  
  111.   7. Etherboot
  112.  
  113.      7.1 Introduction
  114.         7.1.1 What hardware is supported?
  115.         7.1.2 Availability of this document
  116.         7.1.3 Getting help
  117.      7.2 Unpacking, compiling and testing the package
  118.         7.2.1 Unpacking the distribution
  119.         7.2.2 Compiling the ROM images
  120.         7.2.3 Testing the ROM images
  121.      7.3 Setting up a diskless boot
  122.         7.3.1 Making a tagged image
  123.         7.3.2 Compiling a custom kernel
  124.         7.3.3 Setting up a bootp daemon
  125.         7.3.4 Setting up a DHCP daemon
  126.         7.3.5 Setting up a tftp daemon
  127.      7.4 Testing the network booting
  128.         7.4.1 Setting up a NFS root filesystem
  129.         7.4.2 Swap over NFS
  130.      7.5 Booting DOS
  131.      7.6 Making an Etherboot EPROM or EEPROM
  132.         7.6.1 Choosing the EPROM
  133.         7.6.2 Enabling the EPROM
  134.         7.6.3 Size and speed of the EPROM
  135.      7.7 Troubleshooting tips
  136.      7.8 Acknowledgements
  137.      7.9 Copyright
  138.  
  139.   8. Netboot
  140.  
  141.      8.1 Introduction
  142.      8.2 README
  143.         8.2.1 Copyright Notice, Acknowledgements
  144.         8.2.2 Overview
  145.         8.2.3 Features
  146.         8.2.4 Installation
  147.         8.2.5 Mailing list
  148.         8.2.6 Disclaimer
  149.      8.3 Download Netboot
  150.      8.4 Netboot useful links
  151.      8.5 RFC 951
  152.      8.6 RFC 1533
  153.      8.7 RFC 1350
  154.      8.8 Install Instructions
  155.      8.9 Troubleshoot Problems
  156.  
  157.  
  158.   ______________________________________________________________________
  159.  
  160.   1.  Other Formats of this Document
  161.  
  162.   This document is published in 10 different formats namely - DVI,
  163.   Postscript, Latex, LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-
  164.   text, Unix man pages and SGML.
  165.  
  166.   ╖  You can get this HOWTO document as a single file tar ball in HTML,
  167.      DVI, Postscript or SGML formats from -
  168.      <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/>
  169.  
  170.   ╖  Plain text format is in:
  171.      <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO>
  172.  
  173.   ╖  Translations to other languages like French, German, Spanish,
  174.      Chinese, Japanese are in
  175.      <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO> Any help from you to
  176.      translate to other languages is welcome.
  177.  
  178.      The document is written using a tool called "SGML tool" which can
  179.      be got from - <http://www.xs4all.nl/~cg/sgmltools/> Compiling the
  180.      source you will get the following commands like
  181.  
  182.   ╖  sgml2html databasehowto.sgml     (to generate html file)
  183.  
  184.   ╖  sgml2rtf  databasehowto.sgml     (to generate RTF file)
  185.  
  186.   ╖  sgml2latex databasehowto.sgml    (to generate latex file)
  187.  
  188.   This document is located at -
  189.  
  190.   ╖  <http://sunsite.unc.edu/LDP/HOWTO/Diskless-HOWTO.html>
  191.  
  192.   Also you can find this document at the following mirrors sites -
  193.  
  194.   ╖  <http://www.caldera.com/LDP/HOWTO/Diskless-HOWTO.html>
  195.  
  196.   ╖  <http://www.WGS.com/LDP/HOWTO/Diskless-HOWTO.html>
  197.  
  198.  
  199.   ╖  <http://www.cc.gatech.edu/linux/LDP/HOWTO/Diskless-HOWTO.html>
  200.  
  201.   ╖  <http://www.redhat.com/linux-info/ldp/HOWTO/Diskless-HOWTO.html>
  202.  
  203.   ╖  Other mirror sites near you (network-address-wise) can be found at
  204.      <http://sunsite.unc.edu/LDP/hmirrors.html> select a site and go to
  205.      directory /LDP/HOWTO/Diskless-HOWTO.html
  206.  
  207.  
  208.   In order to view the document in dvi format, use the xdvi program. The
  209.   xdvi program is located in tetex-xdvi*.rpm package in Redhat Linux
  210.   which can be located through ControlPanel | Applications | Publishing
  211.   | TeX menu buttons.
  212.  
  213.  
  214.                To read dvi document give the command -
  215.                        xdvi -geometry 80x90 howto.dvi
  216.                And resize the window with mouse. See man page on xdvi.
  217.                To navigate use Arrow keys, Page Up, Page Down keys, also
  218.                you can use 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' letter
  219.                keys to move up, down, center, next page, previous page etc.
  220.                To turn off expert menu press 'x'.
  221.  
  222.  
  223.  
  224.  
  225.   You can read postscript file using the program 'gv' (ghostview) or The
  226.   ghostscript program is in ghostscript*.rpm package and gv program is
  227.   in gv*.rpm package in Redhat Linux which can be located through Con¡
  228.   trolPanel | Applications | Graphics menu buttons. The gv program is
  229.   much more user friendly than ghostscript.  Also ghostscript and gv are
  230.   available on other platforms like OS/2, Windows 95 and NT, you view
  231.   this document even on those platforms.
  232.  
  233.  
  234.                To read postscript document give the command -
  235.                        gv howto.ps
  236.  
  237.                To use ghostscript give -
  238.                        ghostscript howto.ps
  239.  
  240.  
  241.  
  242.  
  243.   2.  Introduction to Network Booting and Etherboot
  244.  
  245.   This chapter is written by Ken Yap and explains how to bootstrap your
  246.   computer from a program stored in non-volatile memory without
  247.   accessing your hard disk. It is an ideal technique for maintaining and
  248.   configure a farm of linux boxes
  249.  
  250.   2.1.  What is Network booting?
  251.  
  252.  
  253.   Network booting is an old idea. The central idea is that the computer
  254.   has some bootstrap code in non-volatile memory, e.g. a ROM chip, that
  255.   will allow it to contact a server and obtain system files over a
  256.   network link. One goal is to avoid the use of a hard disk for booting.
  257.   There are various reasons for doing this. One is to reduce the cost of
  258.   maintaining software on many different machines.  With network booting
  259.   the files are held at a central server and can be updated at one
  260.   location.  Another goal is to use computers in locations where hard
  261.   disks are not robust enough. For example this might be a computer on a
  262.   factory floor where a hard disk might be too fragile.  Finally another
  263.   goal is to have a system that can be switched between different
  264.   operating systems without having to reload the software.  Network
  265.   booting often co-exists with disk booting. For example, a system could
  266.   run Windows from disk but sometimes boot Linux from the network. There
  267.   are some interesting applications of this technique.  For example: a
  268.   friend of mine uses this to reload Windows over the network. When a
  269.   Windows installation becomes corrupted, as it often does, the sysadmin
  270.   can reload a fresh installation by booting Linux over the network and
  271.   letting the automatic script format the disk and copy a fresh Windows
  272.   installation onto it.
  273.  
  274.  
  275.  
  276.   2.2.  How does it work
  277.  
  278.   In order to boot over the network, the computer must get 1. an
  279.   identity, 2. an operating system image and 3. usually, a working
  280.   filesystem.
  281.  
  282.   Consider a diskless computer (DC) that has a network boot ROM. It may
  283.   be one of several identical DCs. How can we distinguish this computer
  284.   from others? There is one piece of information that is unique to that
  285.   computer (actually its network adapter) and that is its Ethernet
  286.   address. Every Ethernet adapter in the world has a unique 48 bit
  287.   Ethernet address because every Ethernet hardware manufacturer has been
  288.   assigned blocks of addresses. By convention these addresses are
  289.   written as hex digits with colons separating each group of two digits,
  290.   for example: 00:60:08:C7:A3:D8.
  291.  
  292.   The protocols used for obtaining an IP address, given an Ethernet
  293.   address, are called Boot Protocol (BOOTP) and Dynamic Host
  294.   Configuration Protocol (DHCP). DHCP is an evolution of BOOTP. In our
  295.   discussion, unless otherwise stated, anything that applies to BOOTP
  296.   also applies to DHCP. (Actually it's a small lie that BOOTP and DHCP
  297.   only translate Ethernet addresses. In their foresight, the designers
  298.   made provision for BOOTP and DHCP to work with any kind of hardware
  299.   address. But Ethernet is what most people will be using.)
  300.  
  301.   An example of a BOOTP exchange goes like this:
  302.  
  303.   DC: Hello, my hardware address is 00:60:08:C7:A3:D8, please give me my
  304.   IP address.
  305.  
  306.   BOOTP server: (Looks up address in database.) Your name is aldebaran,
  307.   your IP address is 192.168.1.100, your server is 192.168.1.1, the file
  308.   you are supposed to boot from is /tftpboot/vmlinux.nb (and a few other
  309.   pieces of information).
  310.  
  311.   You may wonder how the DC found the address of the BOOTP server in the
  312.   first place. The answer is that it didn't. The BOOTP request was
  313.   broadcast on the local network and any BOOTP server that can answer
  314.   the request will.
  315.  
  316.   After obtaining an IP address, the DC must download an operating
  317.   system image and execute it. Another Internet protocol is used here,
  318.   called Trivial File Transfer Protocol (TFTP). TFTP is like a cut-down
  319.   version of FTP---there is no authentication, and it runs over User
  320.   Datagram Protocol (UDP) instead of Transmission Control Protocol
  321.   (TCP). UDP was chosen instead of TCP for simplicity. The
  322.   implementation of UDP on the DC can be small so the code is easy to
  323.   fit on a ROM. Because UDP is a block oriented, as opposed to a stream
  324.   oriented, protocol, the transfer goes block by block, like this:
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.   DC: Give me block 1 of /tftpboot/vmlinux.nb.
  332.   TFTP server: Here it is.
  333.   DC: Give me block 2.
  334.  
  335.  
  336.  
  337.  
  338.  
  339.   and so on, until the whole file is transferred. Handshaking is a
  340.   simple acknowledge each block scheme, and packet loss is handled by
  341.   retransmit on timeout. When all blocks have been received, the network
  342.   boot ROM hands control to the operating system image at the entry
  343.   point.
  344.  
  345.   Finally, in order to run an operating system, a root filesystem must
  346.   be provided. The protocol used by Linux and other Unixes is normally
  347.   Network File System (NFS), although other choices are possible. In
  348.   this case the code does not have to reside in the ROM but can be part
  349.   of the operating system we just downloaded. However the operating
  350.   system must be capable of running with a root filesystem that is a
  351.   NFS, instead of a real disk. Linux has the required configuration
  352.   variables to build a version that can do so.
  353.  
  354.  
  355.  
  356.  
  357.   2.3.  Netbooting in Practice
  358.  
  359.   Besides commercial boot ROMs, there are two sources for free packages
  360.   for network booting. They are Etherboot and Netboot. Both can be found
  361.   through the Etherboot home page. First you have to ascertain that your
  362.   network card is supported by Etherboot or Netboot. Eventually you have
  363.   to find a person who is willing to put the code on an EPROM (Erasable
  364.   Programmable Read Only Memory) for you but in the beginning you can do
  365.   network booting from a floppy.
  366.  
  367.   To create a boot floppy, a special boot block is provided in the
  368.   distribution. This small 512 byte program loads the disk blocks
  369.   following it on the floppy into memory and starts execution. Thus to
  370.   make a boot floppy, one has only to concatenate the boot block with
  371.   the Etherboot binary containing the driver for one's network card like
  372.   this:
  373.  
  374.   cat floppyload.bin 3c509.lzrom > /dev/fd0
  375.  
  376.   Before you put in the network boot floppy, you have to set up three
  377.   services on Linux: BOOTP (or DHCP), TFTP and NFS. You don't have to
  378.   set up all three at once, you can do them step by step, making sure
  379.   each step works before going on to the next.
  380.  
  381.   I assume you have installed the bootpd server from a distribution or
  382.   by compiling from source. You then have to ensure that this server is
  383.   waiting for bootp requests. There are two ways to do this: one is to
  384.   start bootpd as a network service that is always listening when the
  385.   computer is up, and the other is to start it from inetd. For the
  386.   latter, /etc/inetd.conf should contain a line like this:
  387.  
  388.   bootps dgram udp wait root /usr/sbin/tcpd bootpd
  389.  
  390.   If you had to modify /etc/inetd.conf, then you need to restart inetd
  391.   by sending the process a HUP signal.
  392.  
  393.   Next, you need to give bootp a database to map Ethernet addresses to
  394.   IP addresses. This database is in /etc/bootptab. It contains lines of
  395.   the following form:
  396.  
  397.   aldebaran.foo.com:ha=006008C7A3D8:ip=192.168.1.100:bf=/tftpboot/vmlinuz.nb
  398.  
  399.   Other information can be specified but we will start simple.
  400.  
  401.   Now boot the DC with the floppy and it should detect your Ethernet
  402.   card and broadcast a BOOTP request. If all goes well, the server
  403.   should respond to the DC with the information required. Since
  404.   /tftpboot/vmlinux.nb doesn't exist yet, it will fail when it tries to
  405.   load the file.  Now you need to compile a special kernel, one that has
  406.   the option for mounting the root filesystem from NFS turned on. You
  407.   also need to enable the option to get the IP address of the kernel
  408.   from the original BOOTP reply. You also need to compile the Linux
  409.   driver for your network adapter into the kernel instead of loading it
  410.   as a module. It is possible to download an initial ramdisk so that
  411.   module loading works but this is something you can do later.
  412.  
  413.   You cannot install the zImage resulting from the kernel compilation
  414.   directly. It has to be turned into a tagged image. A tagged image is a
  415.   normal kernel image with a special header that tells the network
  416.   bootloader where the bytes go in memory and at what address to start
  417.   the program. You use a program called mknbi-linux to create this
  418.   tagged image. This utility can be found in the Etherboot distribution.
  419.   After you have generated the image, put it in the /tftpboot directory
  420.   under the name specified in /etc/bootptab. Make sure to make this file
  421.   world readable because the tftp server does not have special
  422.   privileges.
  423.  
  424.   For TFTP, I assume that you installed tftpd from a distribution or by
  425.   compiling from source. Tftpd is normally started up from inetd with a
  426.   line like this in /etc/inetd.conf.
  427.  
  428.   tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -s /tftpboot
  429.  
  430.   Again, restart inetd with a HUP signal and you can retry the boot and
  431.   this time it should download the kernel image and start it. You will
  432.   find that the boot will continue until the point where it tries to
  433.   mount a root filesystem. At this point you must configure and export
  434.   NFS partitions to proceed.
  435.  
  436.   For various reasons, it's not a good idea to use the root filesystem
  437.   of the server as the root filesystem of the DCs. One is simply that
  438.   there are various configuration files there and the DC will get the
  439.   wrong information that way. Another is security. It's dangerous to
  440.   allow write access (and write access is needed for the root
  441.   filesystem, for various reasons) to your server's root. However the
  442.   good news is that a root filesystem for the DC is not very large, only
  443.   about 30 MB and a lot of this can be shared between multiple DCs.
  444.  
  445.   Ideally, to construct a root filesystem, you have to know what files
  446.   your operating system distribution is expecting to see there. Critical
  447.   to booting are device files, files in /sbin and /etc. You can bypass a
  448.   lot of the hard work by making a copy of an existing root filesystem
  449.   and modifying some files for the DC. In the Etherboot distribution,
  450.   there is a tutorial and links to a couple of shell scripts that will
  451.   create such a DC root filesystem from an existing server root
  452.   filesystem. There are also troubleshooting tips in the Etherboot
  453.   documentation as this is often the trickiest part of the setup.
  454.  
  455.   The customised Linux kernel for the DC expects to see the root
  456.   filesystem at /tftpboot/(IP address of the DC), for example:
  457.   /tftpboot/192.168.1.100 in the case above. This can be changed when
  458.   configuring the kernel, if desired.
  459.  
  460.   Now create or edit /etc/exports on the server and put in a line of the
  461.   following form:
  462.  
  463.   /tftpboot/192.168.1.100 aldebaran.foo.com(rw,no_root_squash)
  464.  
  465.   The rw access is needed for various system services. The
  466.   no_root_squash attribute prevents the NFS system from mapping root's
  467.   ID to another one. If this is not specified, then various daemons and
  468.   loggers will be unhappy.
  469.  
  470.   Start or restart the NFS services (rpc.portmap and rpc.mountd) and
  471.   retry the diskless boot.  If you are successful, the kernel should be
  472.   able to mount a root filesystem and boot all the way to a login
  473.   prompt. Most likely, you will find several things misconfigured. Most
  474.   Linux distributions are oriented towards disked operation and require
  475.   a little modification to suit diskless booting. The most common
  476.   failing is reliance on files under /usr during the boot process, which
  477.   is normally imported from a server late in the boot process. Two
  478.   possible solutions are: 1. Provide the few required files under a
  479.   small /usr directory on the root filesystem, which will then be
  480.   overlaid when /usr is imported, and 2. Modify the paths to look for
  481.   the files in the root filesystem. The files to edit are under
  482.   /tftpboot/192.168.1.100 (remember, this is the root directory of the
  483.   DC).
  484.  
  485.   You may wish to mount other directories from the server, such as /usr
  486.   (which can be exported read-only).
  487.  
  488.   When you are satisfied that you can boot over the network without any
  489.   problems, you may wish to put the code on an EPROM. An EPROM
  490.   programmer starts at around $100 US, and is not a cost effective
  491.   investment for a hobbyist who uses it sporadically. Occasionally one
  492.   will appear on the used market at a bargain price, the main caveat
  493.   being to ensure that the software to drive it is available. A
  494.   proficient electronics hobbyist could build one using one of the
  495.   several free designs published on the Internet, but for the majority
  496.   of readers, the best solution is to make the acquaintance of someone
  497.   who has access to one, perhaps someone in an electronics hobbyist
  498.   group or working in the electronics industry.
  499.  
  500.   A short note on EPROM technology: The bits of an EPROM are programmed
  501.   by injecting electrons with an elevated voltage into the floating gate
  502.   of a field-effect transistor where a 0 bit is desired. The electrons
  503.   trapped there cause that transistor to conduct, reading as 0. To erase
  504.   the EPROM, the trapped electrons are given enough energy to escape the
  505.   floating gate by bombarding the chip with ultraviolet radiation
  506.   through the quartz window. To prevent slow erasure over a period of
  507.   years from sunlight and fluorescent lights, this quartz window is
  508.   covered with an opaque label in normal use.
  509.  
  510.   There is another technology, called EEPROM or Electrically Erasable
  511.   PROM, sometimes called Flash PROM. Here the bits are cleared by an
  512.   electrical signal. This obviates the need for an ultraviolet eraser if
  513.   the EPROM is to be reused, but requires additional circuitry to
  514.   support the erase phase. If one is handy with electronics, there is a
  515.   contributed circuit design and driver software for an EEPROM board in
  516.   the Etherboot distribution. The board is plugged into any spare ISA
  517.   bus slot on a PC and boots a network card plugged into some other
  518.   slot.
  519.  
  520.   2.4.  Uses of Network booting
  521.  
  522.   X-terminals are one natural use of network booting. The lack of a disk
  523.   in the terminal makes it quieter and contributes to a pleasant working
  524.   environment. The machine should ideally have 16MB of memory or more
  525.   and the best video card you can find for it. This is an ideal use for
  526.   a high-end 486 or low-end Pentium that has been obsoleted by hardware
  527.   advances.  Other people have used network booting for clusters of
  528.   machines where the usage is light on the DC and does not warrant a
  529.   disk, e.g. a cluster of classroom machines.
  530.  
  531.   2.5.  For more information
  532.  
  533.   Your first stop should be the Etherboot home page:
  534.   <http://www.slug.org.au/etherboot/>
  535.  
  536.   There you will find links to other resources, including a mailing list
  537.   you can subscribe to, where problems and solutions are discussed.
  538.  
  539.   3.  Begin setup
  540.  
  541.  
  542.   3.1.  Document Changes
  543.  
  544.   Following are the history of changes to this document:
  545.  
  546.   ╖  v0.0.3 12 Sep 1996: Some minor error fixes
  547.  
  548.   ╖  v1.0.0 13 May 1999: Added some useful URLs. Changed this HOWTO to
  549.      main HOWTO from mini-howto. Also rewrote this HOWTO using SGML
  550.      tool. Added more chapters written by Ken Yap, Robert Nemkin.
  551.  
  552.   3.2.  How to set up a diskless Linux box
  553.  
  554.   This document is about setting up a diskless Linux box. Sometimes it
  555.   might be necessary to run Linux on PC's which have neither hard disks
  556.   nor floppy drives. If a network, another Unix system with bootp, tftp,
  557.   an NFS server, and an eprom burner is available then it is possible to
  558.   set up and operate Linux without hard/floppy disks.
  559.  
  560.  
  561.   3.3.  Related documents
  562.  
  563.  
  564.   ╖  NFS-root Mini Howto
  565.  
  566.   ╖  Linux NET-2/3-HOWTO by Terry Dawson, 94004531@postoffice.csu.edu.au
  567.  
  568.   ╖  /usr/src/linux/README about configuring and compiling new kernels
  569.  
  570.   3.4.  How does it work?
  571.  
  572.  
  573.   ╖  1.Diskless computer (DC) broadcasts MAC address with bootp: Who am
  574.      I?
  575.  
  576.   ╖  2.Bootp or DHCP server on S looks up DB: Your IP address is
  577.      X.X.X.X, your server is S, your boot file is vmlinuz.myname, etc.
  578.  
  579.   ╖  3.DC asks to load file from TFTP server on S: Please give me
  580.      vmlinuz.myname
  581.  
  582.   ╖  4.S: Here you are (/tftpboot/vmlinuz.myname)
  583.  
  584.      DC thinks a while (booting Linux).
  585.  
  586.   ╖  5.DC: Please let me mount / with NFS
  587.  
  588.   ╖  6.S: Here is your root FS (/tftpboot/IPnumber). (In 2.2 kernels,
  589.      /tftpboot/domainname.)
  590.  
  591.   ╖  7.DC: Please let me mount other NFSes (/usr, /home/, etc)
  592.  
  593.   ╖  8.S: Here you are
  594.  
  595.   ╖  9.DC: Runs intended application
  596.  
  597.      Network boot ROM contains code to do 1 and 3.
  598.  
  599.  
  600.   3.5.  Hardware
  601.  
  602.   Whatever is described here was checked on the following configuration
  603.  
  604.   ╖  Sun-OS 4.1.3 as boot server
  605.  
  606.   ╖  Slackware 2.3 + Linux 1.2.8 + wd 8013 ethercard.
  607.  
  608.   ╖  Working Ethernet lan
  609.  
  610.   4.  Fundamental ideas
  611.  
  612.   The fundamental idea is as follows: the PC will get its IP address
  613.   from the boot server via the bootp protocol, using 0.0.0.0 as the
  614.   initial IP address and its kernel via the tftp protocol.  (-- Booting
  615.   across segments (via router) not a simple question, so either put both
  616.   the server and the diskless boxes on the same lan segment or configure
  617.   an UDP helper address in your router to the address of the server.
  618.   Refer to your router product manual for further info.--)
  619.  
  620.   For this follow the steps below.
  621.  
  622.   4.1.  Setting up the PC
  623.  
  624.   Get the nfsboot package (the package is available from your favourite
  625.   linux mirror site in the /pub/Linux/system/Linux-boot directory). It
  626.   contains a booteprom image for the wd8013 card which can be directly
  627.   burned in.
  628.  
  629.   There are alternative ways to prepare the PC:
  630.  
  631.  
  632.   ╖  If your machine is not quite diskless, then you may use the little
  633.      DOS program, or
  634.  
  635.   ╖  The binary floppy image contained in the same package.  If you
  636.      choose the latter option you must write the image onto a floppy by
  637.      the dd command.
  638.  
  639.   These images contain a bootp and tftp client.  You need to prepare a
  640.   linux kernel too, which contains the nfs-root option.
  641.  
  642.  
  643.   ╖  If you are using the latest stable kernel, linux-1.2.13, then you
  644.      need to patch the kernel with the patchfile included in the nfsboot
  645.      package  (-- Refer to patch(1)--)
  646.  
  647.   ╖  If you try to use the latest, but unstable kernel from the
  648.      linux-1.3.x series, then you have to configure in the nfs-root
  649.      option.
  650.  
  651.      You may or may not configure block device (floppy or hard disk)
  652.      support, but you must configure tcp/ip support, wd ethernet card
  653.      support, nfs filesystem support. Then recompile the kernel as
  654.      usual.
  655.  
  656.   4.2.  Setting up a bootpd on the server
  657.  
  658.   It can be found in package bootpd-2.4.tar.gz (which can be found on
  659.   your favourite linux mirror site in the
  660.   /pub/Linux/system/Network/boot.net directory). Get the package,
  661.   compile and install it. If your other Unix box happens to be a
  662.   Slackware Linux then you may skip this step for the standard
  663.   distributions contain a bootpd. The daemon can be run either directly
  664.   by issuing command
  665.  
  666.  
  667.        ______________________________________________________________________
  668.               bootpd -s
  669.        ______________________________________________________________________
  670.  
  671.  
  672.  
  673.  
  674.   or by using inetd. In this case you need to edit:
  675.  
  676.  
  677.  
  678.        ╖  /etc/inetd.conf to remove the hashmark from the start of these
  679.        lines:
  680.        ______________________________________________________________________
  681.        # tftp   dgram   udp     wait    root    /usr/sbin/in.tftpd     tftpd /export
  682.        # bootps dgram   udp     wait    root    /usr/sbin/in.bootpd    bootpd
  683.        ______________________________________________________________________
  684.  
  685.        ╖  insert or uncomment the following two lines in /etc/services:
  686.        ______________________________________________________________________
  687.        bootps          67/tcp          # BOOTP server
  688.        tftp            69/udp          # TFTP server
  689.        ______________________________________________________________________
  690.  
  691.        ╖  restart inetd by
  692.        ______________________________________________________________________
  693.               kill -HUP <process id of inetd>.
  694.        ______________________________________________________________________
  695.  
  696.  
  697.  
  698.  
  699.  
  700.   4.3.  Configure the bootpd on the server
  701.  
  702.   First of all, bootpd have a config file called bootptab which usually
  703.   resides in /etc. You must modify it by inserting the IP addresses of
  704.   your gateway, dns server, and the ethernet address(es) of your
  705.   diskless machine(s).  An example /etc/bootptab:
  706.  
  707.  
  708.  
  709.        ______________________________________________________________________
  710.          global.prof:\
  711.                  :sm=255.255.255.0:\
  712.                  :ds=192.168.1.5:\
  713.                  :gw=192.168.1.19:\
  714.                  :ht=ethernet:\
  715.                  :bf=linux:
  716.          machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140:
  717.          machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141:
  718.          machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142:
  719.        ______________________________________________________________________
  720.  
  721.  
  722.  
  723.  
  724.   global.prof is a general template for host entries, where
  725.  
  726.  
  727.   ╖  sm field contains the subnet mask
  728.  
  729.   ╖  ds field contains the address of the Domain Name Server
  730.  
  731.   ╖  gw field contains the default gateway address
  732.  
  733.   ╖  ht field contains the lan media hardware type
  734.  
  735.   ╖  bf field contains the name of the boot file
  736.  
  737.   After this, every machine must have a line:
  738.  
  739.  
  740.   ╖  the first field contains the host name,
  741.  
  742.   ╖  hd field contains the directory of the bootfile,
  743.  
  744.   ╖  the global template can be included with the tc field,
  745.  
  746.   ╖  ha field contains the hardvare address of the ethernet card,
  747.  
  748.   ╖  ip field contains the assigned ip address.
  749.  
  750.  
  751.   4.4.  Understanding tftp
  752.  
  753.   TFTP (Trivial File Transfer Protocol) is a file transfer protocol,
  754.   such as ftp, but it's much simpler to help coding it in EPROMs. TFTP
  755.   can be used in two ways:
  756.  
  757.  
  758.   ╖  simple tftp: means that the client can acces to your whole file
  759.      system. It's simpler but it's a big security hole (anyone can get
  760.      your password file via tftp).
  761.  
  762.   ╖  secure tftp: the tftp server uses a chroot.2 system call to change
  763.      it's own root directory. Anything outside the new root directory
  764.      will be completelly inaccessible. Because of the chroot dir becomes
  765.      the new root dir, the hd filed in the bootptab must reflect the new
  766.      situation. For example: when using insecure tftp, the hd field
  767.      contains the full path to the boot directory:
  768.      /export/root/machine1.  When using secure tftp whith /export as
  769.      root dir, then /export becomes / and the hd field must be
  770.      /root/machine1.
  771.  
  772.   Almost every Unix implementation contains tfpt server, probably you
  773.   don't need to install your own one.
  774.  
  775.   Install tftpd, make sure it's active in /etc/inetd.conf, typical line
  776.  
  777.   tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /tftpboot
  778.  
  779.   4.5.  Kernel Image
  780.  
  781.   You must compile a kernel for the DC that includes NFS support and NIC
  782.   driver compiled in (not modules). Answer yes to Root file system on
  783.   NFS? and BOOTP support?
  784.  
  785.   After building the kernel, run mknbi-linux from the Etherboot
  786.   distribution on it. Install this tagged image as /tftpboot/(bf
  787.   attribute in bootptab).
  788.  
  789.  
  790.  
  791.  
  792.  
  793.   4.6.  Setting up a minimal Linux configuration on the remote server
  794.  
  795.   This may contain packages a, ap, n, and x of the Slackware
  796.   distribution. To install more is OK; however the above packages
  797.   suffice for the purposes of a diskless X terminal. For the
  798.   installation you need a working Linux system. Find some disk space on
  799.   the remote machine and export it read-write. Mount the exported
  800.   directory onto somewhere (e.g. /mnt) on the file system of the Linux
  801.   box. Start Linux setup and change the root option in the setup from /
  802.   to /mnt. Then setup the above packages as usual. If you want to run no
  803.   more than one diskless Linux then no changes are needed. On the other
  804.   hand, if you plan to use more than one diskless machine then the above
  805.   setup will not work because some files and directories must be private
  806.   to the machines. The problem can be bypassed by moving the /usr (it
  807.   contains no private data) and then create a separate subdir for each
  808.   diskless machine. For example, if /export/linux/machine1 were mounted
  809.   to /mnt then the directory structure after the initial setup will look
  810.   like
  811.  
  812.  
  813.        ______________________________________________________________________
  814.               /export/linux/machine1/bin
  815.               /export/linux/machine1/sbin
  816.               /export/linux/machine1/lib
  817.               /export/linux/machine1/etc
  818.               /export/linux/machine1/var
  819.               /export/linux/machine1/usr
  820.        ______________________________________________________________________
  821.  
  822.  
  823.  
  824.  
  825.   After the changes you will have
  826.  
  827.  
  828.        ______________________________________________________________________
  829.               /export/linux/machine1/bin
  830.               /export/linux/machine1/sbin
  831.               /export/linux/machine1/lib
  832.               /export/linux/machine1/etc
  833.               /export/linux/machine1/var
  834.               /export/linux/usr
  835.        ______________________________________________________________________
  836.  
  837.  
  838.  
  839.  
  840.   Now create the subdirectories for the other machines. Assume for now
  841.   that your diskless machines are called machine1, machine2, machine3,
  842.   etc.; then you may use the following bash script to setup the other
  843.   directories
  844.  
  845.  
  846.  
  847.        ______________________________________________________________________
  848.               cd /export/linux
  849.               for x in machine2 machine3 ; do
  850.                       mkdir $x; cd $x
  851.                       (cd ../machine1; tar cf - *) | tar xvf -
  852.               done
  853.        ______________________________________________________________________
  854.  
  855.  
  856.  
  857.  
  858.  
  859.   Then do the following export:
  860.  
  861.   ╖  /export/linux/usr        readonly for everyone.
  862.  
  863.   ╖  /export/liunx/machine1   only to machine1 with rw,root rights.
  864.  
  865.   ╖  /export/liunx/machine2   only to machine2 with rw,root rights.
  866.  
  867.   ╖  /export/liunx/machine3   only to machine3 with rw,root rights.
  868.  
  869.      as follows (-- the format of this example follows the SunOs 4.1.3
  870.      exports file syntax--) :
  871.  
  872.  
  873.  
  874.        ______________________________________________________________________
  875.               # This file is /etc/export
  876.               # for remote linux X terminals by Buci
  877.               # this line is only once
  878.               /export/root/usr             -access=linuxnet
  879.               # these lines once for every host
  880.               /export/root/machine1       rw=machine1,root=machine1
  881.               /export/root/machine2       rw=machine2,root=machine2
  882.               /export/root/machine3       rw=machine3,root=machine3
  883.        ______________________________________________________________________
  884.  
  885.  
  886.  
  887.  
  888.   Don't forget to run exportfs -a.
  889.  
  890.  
  891.   4.7.  Configuring the tftp server
  892.  
  893.   Now it is time to configure the tftp server. If you do not need secure
  894.   tftp then everything is quite simple for your clients can be booted
  895.   from the /export directory.
  896.  
  897.   If a secure tftp is used then you can either make a full /export/linux
  898.   directory structure under /tftpboot (with a single real kernel and
  899.   symbolic links for the other machines), or let the /export directory
  900.   be the boot directory of the secure tftpd. Or, if you have a separate
  901.   tftpboot directory then, similarly, you need only the original
  902.   directory structure with a single kernel and symbolic links for the
  903.   others. You can achieve this setup by typing the following:
  904.  
  905.  
  906.        ______________________________________________________________________
  907.             mkdir -p /tftpboot/export/linux/machine1
  908.             cd /tftpboot/export/linux/machine1
  909.             cp /export/linux/machine1/<name of the kernel> .
  910.        ______________________________________________________________________
  911.  
  912.  
  913.  
  914.  
  915.   Then type the following:
  916.  
  917.  
  918.        ______________________________________________________________________
  919.                mkdir -p /tftpboot/export/linux/machine2
  920.                cd ../machine2
  921.                ln -s ../machine2/<name of the kernel>
  922.        ______________________________________________________________________
  923.  
  924.  
  925.   4.8.  Final work
  926.  
  927.   Finally, you must insert
  928.  
  929.  
  930.        ______________________________________________________________________
  931.                /sbin/mount nfs_server:/export/linux/usr /usr
  932.        ______________________________________________________________________
  933.  
  934.  
  935.  
  936.  
  937.   as the first line of
  938.  
  939.  
  940.        ______________________________________________________________________
  941.                /export/linux/<machinex>/etc/rc.d/rc.S
  942.        ______________________________________________________________________
  943.          where <machinex> stands for machine1, machine2, etc.
  944.  
  945.  
  946.  
  947.  
  948.   4.9.  Net Loader
  949.  
  950.   A small program that runs as a BIOS extension, usually on an EPROM on
  951.   the NIC. It handles the BOOTP query and TFTP loading and then
  952.   transfers control to the loaded image.
  953.  
  954.   It uses TCP/IP protocols but the loaded image doesn't have to be
  955.   Linux. The loaded image can be anything, even DOG.
  956.  
  957.   There are two free implementations of TCP/IP net loaders: Etherboot
  958.   <http://www.slug.org.au/etherboot/> and Netboot
  959.   <http://www.han.de/~gero/netboot.html> : Etherboot uses built-in
  960.   drivers while Netboot uses Packet drivers.
  961.  
  962.   They can also be loaded from a floppy for testing and for temporary
  963.   setups.
  964.  
  965.   4.10.  RH5 configuration
  966.  
  967.   The DC requests to mount /tftpboot/(IP address of DC) (in 2.1 and
  968.   above: /tftpboot/(name of DC in bootptab) ) as its / by NFS from
  969.   server. You must export this from the server (rw, no_root_squash)
  970.   because the DC wants to write on it (log files, etc).
  971.  
  972.   The / must contain /sbin, /bin, /lib, /etc, /var, /tmp, /root, /dev
  973.   and /proc.
  974.  
  975.   /sbin, /bin, /lib/ can be a copy of an existing RH5 system. They can
  976.   be shared between all DCs. But hard links only. BTW, don't link to
  977.   server originals.
  978.  
  979.   /etc, /var and /dev should be non-sharable copies. Customise
  980.   /etc/sysconfig/network, /etc/sysconfig/network-scripts/ifcfg-eth0,
  981.   /etc/fstab, /etc/conf.modules, and others. Turn off all network
  982.   services you don't need. Remove all stuff you don't need from /var,
  983.   e.g. RPM db, lpd files.
  984.  
  985.   /root and /proc should just exist. /tmp should exist and be mode 1777.
  986.  
  987.   You probably want to create /usr and /home mount points. /usr can be
  988.   mounted ro.
  989.  
  990.  
  991.   About 10 MB per DC plus about 15 MB of shared files should be
  992.   sufficient. BTW: if your DCs are quite similar, the kernel image can
  993.   also be shared.
  994.  
  995.   Here is an illustrative script to create the first root filesystem.
  996.  
  997.  
  998.        #!/bin/sh
  999.        if [ $# != 1 ]
  1000.        then
  1001.                echo Usage: $0 client-IP-addr
  1002.                exit 1
  1003.        fi
  1004.  
  1005.        cd /
  1006.  
  1007.        umask 022
  1008.  
  1009.        mkdir -p /tftpboot/$1
  1010.  
  1011.        # just make these ones
  1012.        for d in home mnt proc tmp usr
  1013.        do
  1014.                mkdir /tftpboot/$1/$d
  1015.                done
  1016.  
  1017.                chmod 1777 /tftpboot/$1/tmp
  1018.  
  1019.                touch /tftpboot/$1/fastboot
  1020.                chattr +i /tftpboot/$1/fastboot
  1021.  
  1022.                # copy these ones
  1023.                cp -a bin lib sbin dev etc root var /tftpboot/$1
  1024.  
  1025.        cat <<EOF
  1026.        Now, in /tftpboot/$1/etc, edit
  1027.  
  1028.                        sysconfig/network
  1029.                        sysconfig/network-scripts/ifcfg-eth0
  1030.                        fstab
  1031.                        conf.modules
  1032.  
  1033.        and configure
  1034.  
  1035.                        rc.d/rc3.d
  1036.        EOF
  1037.  
  1038.  
  1039.  
  1040.  
  1041.   Here is an illustrative script to duplicate the root filesystem
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.   #!/bin/sh
  1058.   if [ $# != 2 ]
  1059.   then
  1060.           echo Usage: $0 olddir newdir
  1061.           exit 1
  1062.   fi
  1063.  
  1064.   cd /tftpboot
  1065.  
  1066.   if [ ! -d $1 ]
  1067.   then
  1068.           echo $1 is not a directory
  1069.           exit 1
  1070.   fi
  1071.  
  1072.   umask 022
  1073.  
  1074.   mkdir -p $2
  1075.  
  1076.   # just make these ones
  1077.   for d in home mnt proc tmp usr
  1078.   do
  1079.           mkdir $2/$d
  1080.   done
  1081.  
  1082.   chmod 1777 $2/tmp
  1083.  
  1084.   touch $2/fastboot
  1085.   chattr +i $2/fastboot
  1086.  
  1087.   # link these ones
  1088.   for d in bin lib sbin
  1089.   do
  1090.           (cd $1; find $d -print | cpio -pl ../$2)
  1091.   done
  1092.  
  1093.   # copy these ones
  1094.   for d in dev etc root var
  1095.   do
  1096.           cp -a $1/$d $2
  1097.   done
  1098.  
  1099.   cat <<EOF
  1100.   Now, in /tftpboot/$2/etc, edit
  1101.  
  1102.           sysconfig/network
  1103.           sysconfig/network-scripts/ifcfg-eth0
  1104.           fstab (maybe)
  1105.           conf.modules (maybe)
  1106.  
  1107.   and configure
  1108.  
  1109.           rc.d/rc3.d
  1110.   EOF
  1111.  
  1112.  
  1113.  
  1114.  
  1115.   4.11.  Gotchas and caveats
  1116.  
  1117.   RH5 wants to fsck the root FS. I stopped this with a /fastboot. But
  1118.   init script wants to delete it, so I did chattr +i /fastboot
  1119.  
  1120.   /etc/localtime is a link to TZ file in /usr/share/... I made it a
  1121.   copy.
  1122.  
  1123.   Turn off /etc/rc.d/rc6.d/K97network or it will disable the network
  1124.   before root FS is done with.
  1125.  
  1126.   X server wants to write into /usr/X11R6/lib/X11/xkb/compiled. I made
  1127.   this a link to /etc/X11/kbd/compiled
  1128.  
  1129.   Remember your DC will keep appending to log files so have logrotate or
  1130.   something deal with them at regular intervals.
  1131.  
  1132.   4.12.  X-terminal
  1133.  
  1134.   On the server, make sure the DC is matched by a clause in
  1135.   /etc/X11/xdm/Xaccess and comment out the :0 in /etc/X11/xdm/Xservers.
  1136.   Then make sure that xdm is run from the init scripts.
  1137.  
  1138.   On the client, run X -query server
  1139.  
  1140.   You will get the xdm login box and then all your X clients will run on
  1141.   the server.
  1142.  
  1143.   For other applications use - you could use diskless technique for
  1144.   netboot routers, print servers (but should not be spooling print
  1145.   server), standalone apps, etc.
  1146.  
  1147.  
  1148.   5.  Trouble shooting
  1149.  
  1150.  
  1151.   5.1.  Memory and diskspace requirements; speed
  1152.  
  1153.  
  1154.   ╖  I tested this for only Slackware 2.3; for other
  1155.      distributions/versions the following numbers may vary.
  1156.  
  1157.   ╖  Diskspace: 28MB + 6.5MB/machine
  1158.  
  1159.   ╖  RAM: I am using X on 8 MB. For only 4MB swap is needed, I guess,
  1160.      which can be created -- separately for each machine -- in /tmp. Do
  1161.      not forget to run mkswap.
  1162.  
  1163.   ╖  Speed: I had no problems on a 486 DX2/66 with 8 Megs.
  1164.  
  1165.   5.2.  Possible errors
  1166.  
  1167.  
  1168.   ╖  I found a strange error: in the /dev subdirectory SunOS corrupted
  1169.      the device entries so I needed to rerun MAKEDEV by mounting the
  1170.      subdirectory onto a disk based Linux box.  (The reason was the
  1171.      differences between the linux nfs and the SunOs nfs: both use 32
  1172.      bit for the Major and Minor device number, but linux uses 16 bit
  1173.      wide fields for both, SunOs uses 14 bit wide field for Major and 18
  1174.      bit wide filed for Minor device number.)
  1175.  
  1176.   ╖  When the diskless linux gets booted, there is only one route
  1177.      included in the routing table to the tftp server, so you need to
  1178.      set up correct routing tables. You have two choices here:
  1179.  
  1180.   ╖  Configure every rc.S for every machine by hand
  1181.  
  1182.   ╖  Use a bootp client package and write a generalized setup script
  1183.  
  1184.   5.3.  Errors and possible further expansions of this document
  1185.  
  1186.  
  1187.   ╖  Correct citation of related documents.
  1188.  
  1189.   ╖  SunOs is BSD based. Need to include SVR4 (e.g. Solaris) based
  1190.      server configuration.
  1191.  
  1192.   ╖  Although Linux is quite similar to SunOs as bootp/tftp server, a
  1193.      linux based server example might be usefull.
  1194.  
  1195.   ╖  Update this document to the current etherboot package.
  1196.  
  1197.   ╖  Show the differences between the nfs root patched kernel version
  1198.      1.2.13 and the newest 1.3.x kernel, which contains the nfs-root
  1199.      patch.
  1200.  
  1201.   ╖  Need to try other ethercards than wd8013
  1202.  
  1203.   ╖  Include configuration information for bootpc, a bootp client for
  1204.      linux to set up the correct rooting tables.
  1205.  
  1206.   ╖  Typos and other errors: please, report to buci@math.klte.hu Thank
  1207.      you.
  1208.  
  1209.   6.  EEPROM Burners and Memory chips
  1210.  
  1211.  
  1212.   6.1.  List of EEPROM Burner manufacturers
  1213.  
  1214.   For a list of EPROM burner manufacturers visit the Yahoo site and go
  1215.   to economy->company->Hardware->Peripherals->Device programmers. Click
  1216.   on this site
  1217.  
  1218.   ╖  Yahoo URL for EPROMs at
  1219.      <http://dir.yahoo.com/Business_and_Economy/Companies/Computers/Hardware/Peripherals/Device_Programmers/>
  1220.  
  1221.  
  1222.   ╖  Advanced Research Technology B.V <http://www.artbv.nl/ > -
  1223.      development, production and sales of electronic programmer
  1224.      equipment; development of hard- and software.
  1225.  
  1226.   ╖  Advin Systems Inc. <http://www.advin.com > - PC-based device
  1227.      programmers that support the latest in package types and device
  1228.      technologies.
  1229.  
  1230.   ╖  Andromeda Research Labs <http://www.arlabs.com > - manufactures a
  1231.      portable eprom and device programming system.
  1232.  
  1233.   ╖  B and C Microsystems, Inc <http://www.bcmicro.com/> - offers test
  1234.      and duplication/programming equipment for PCMCIA (PC) Cards,
  1235.      ISA/PCI Cards, SIMMs, Memory Devices (including FLASH), PLDs.
  1236.  
  1237.   ╖  BP Microsystems <http://www.bpmicro.com/ > - Device Programmers.
  1238.  
  1239.   ╖  Bytek <http://www.bytek.com > - designs, develops, manufactures and
  1240.      markets micro-processor-based, modular electronic systems used to
  1241.      program and test semiconductor devices. Product line includes the
  1242.      ChipBurner.
  1243.  
  1244.   ╖  Concentrated Programming Ltd <http://www.logicaldevices.com/ > -
  1245.      offers a full range of device programming solutions.
  1246.  
  1247.   ╖  Dataman Programmmers Ltd. <http://www.dataman.com/ > - manufacture
  1248.      of hand-help EPROM programmer/emulator. Also sell PC-based
  1249.      programmers, and Gang-Pro programmers.
  1250.  
  1251.   ╖  General Device Instruments <http://www.generaldevice.com/ > - IC
  1252.      Device programmers. Universal and Gang programmers for Pld, Flash,
  1253.      microcontrollers, Proms, EEproms, Memory, Epld, Mach and many other
  1254.      ic devices.
  1255.   ╖  HI-LO System Research Co., Ltd. <http://hilosystems.com.tw > -
  1256.      manufacturer of universal and gang device programmers.
  1257.  
  1258.   ╖  ICE Technology <http://www.icetech.com/ > - EPROM and universal
  1259.      device programmers which support memories, microcontrollers, and
  1260.      programmable logic devices.
  1261.  
  1262.   ╖  Iceprom <http://www.inabyte.com/iceprom.html > - in-circuit
  1263.      erasable programmable read-only memory.
  1264.  
  1265.   ╖  Incept Ltd. <http://www.incept.ie >
  1266.  
  1267.   ╖  International Microsystems Inc <http://www.imtest.com > - High
  1268.      speed reliable gang programmer. (PROM, FLASH, Microcontroller,
  1269.      PCMCIA memory card).
  1270.  
  1271.   ╖  JED Microprocessors Pty. Ltd. <http://www.jedmicro.com.au > - plugs
  1272.      into a PC printer port D25 connector, and programs any 28-pin or
  1273.      32-pin EPROM and FLASH device.
  1274.  
  1275.   ╖  Logical Devices, Inc <http://www.logicaldevices.com > - device
  1276.      programming for PLDs, FPGAs, PROMs, microcontrollers. Producers of
  1277.      CUPL compiler for programmable logic and the ALLPRO and Chipmaster
  1278.      device programmer.
  1279.  
  1280.   ╖  MCL Systems <http://www.mcl.dk > - new method not only for
  1281.      programming but also for developing your new hardware with
  1282.      Integrated Controller Unit. And you don't need to be an expert.
  1283.  
  1284.   ╖  MQP Electronics <http://www.mqp.com > - manufacturer of universal
  1285.      device programmers, gang programmers, production software, and
  1286.      package converters. High thoughput and reliability.
  1287.  
  1288.   ╖  Needham's Electronics <http://www.quiknet.com/~needhams/ > -
  1289.      manufacturer of device programmers.
  1290.  
  1291.   ╖  NP Programming Services <http://www.npps.com/ > - provides
  1292.      programming for memory and logic parts.
  1293.  
  1294.   ╖  Program Automation, Inc. <http://www.progauto.com > - independent
  1295.      service company specializing in high volume PROM programming,
  1296.      including flash I/Cs.
  1297.  
  1298.   ╖  Stag Programmers Inc <http://www.stagusa.com > - manufacturer of
  1299.      prom and logic programmers, production handling equipment and UV
  1300.      erasers.
  1301.  
  1302.   ╖  Sunrise Electronics <http://www.sunriseelectronics.com > -
  1303.      universal device programmers, gang and in-circuit programmers with
  1304.      life time support.
  1305.  
  1306.   ╖  System General Co. <http://www.sg.com.tw > - Device Programmer,
  1307.      EPROM Writer and IC Tester
  1308.  
  1309.   ╖  Tribal Microsystems <http://www.tribalmicro.com > - universal and
  1310.      gang device programmers, 8051 and EPROM emulators, test and burn-in
  1311.      sockets and production sockets.
  1312.  
  1313.   ╖  Universal Device Programmers <http://www.xeltek.com/ >
  1314.  
  1315.  
  1316.   6.2.  Non-Volatile Memory chips
  1317.  
  1318.   This chapter gives brief descriptions of memory chips.
  1319.  
  1320.  
  1321.   ╖  PROM: Pronounced prom, an acronym for programmable read-only
  1322.      memory. A PROM is a memory chip on which data can be written only
  1323.      once. Once a program has been written onto a PROM, it remains there
  1324.      forever. Unlike RAM, PROMs retain their contents when the computer
  1325.      is turned off.  The difference between a PROM and a ROM (read-only
  1326.      memory) is that a PROM is manufactured as blank memory, whereas a
  1327.      ROM is programmed during the manufacturing process. To write data
  1328.      onto a PROM chip, you need a special device called a PROM
  1329.      programmer or PROM burner. The process of programming a PROM is
  1330.      sometimes called burning the PROM.  An EPROM (erasable programmable
  1331.      read-only memory) is a special type of PROM that can be erased by
  1332.      exposing it to ultraviolet light. Once it is erased, it can be
  1333.      reprogrammed. An EEPROM is similar to a PROM, but requires only
  1334.      electricity to be erased.
  1335.  
  1336.   ╖  EPROM: Acronym for erasable programmable read-only memory, and
  1337.      pronounced ee-prom, EPROM is a special type of memory that retains
  1338.      its contents until it is exposed to ultraviolet light. The
  1339.      ultraviolet light clears its contents, making it possible to
  1340.      reprogram the memory. To write to and erase an EPROM, you need a
  1341.      special device called a PROM programmer or PROM burner.  An EPROM
  1342.      differs from a PROM in that a PROM can be written to only once and
  1343.      cannot be erased. EPROMs are used widely in personal computers
  1344.      because they enable the manufacturer to change the contents of the
  1345.      PROM before the computer is actually shipped. This means that bugs
  1346.      can be removed and new versions installed shortly before delivery.
  1347.  
  1348.   ╖  EEPROM: Acronym for electrically erasable programmable read-only
  1349.      memory. Pronounced double-e-prom or e-e-prom, an EEPROM is a
  1350.      special type of PROM that can be erased by exposing it to an
  1351.      electrical charge. Like other types of PROM, EEPROM retains its
  1352.      contents even when the power is turned off. Also like other types
  1353.      of ROM, EEPROM is not as fast as RAM.  EEPROM is similar to flash
  1354.      memory (sometimes called flash EEPROM). The principal difference is
  1355.      that EEPROM requires data to be written or erased one byte at a
  1356.      time whereas flash memory allows data to be written or erased in
  1357.      blocks. This makes flash memory faster.
  1358.  
  1359.   ╖  FRAM: Short for Ferroelectric Random Access Memory, a type of non-
  1360.      volatile memory developed by Ramtron International Corporation.
  1361.      FRAM combines the access speed of DRAM and SRAM with the non-
  1362.      volatility of ROM. Because of its high speed, it is replacing
  1363.      EEPROM in many devices. The term FRAM itself is a trademark of
  1364.      Ramtron.
  1365.  
  1366.   ╖  NVRAM: Abbreviation of Non-Volatile Random Access Memory, a type of
  1367.      memory that retains its contents when power is turned off. One type
  1368.      of NVRAM is SRAM that is made non-volatile by connecting it to a
  1369.      constant power source such as a battery. Another type of NVRAM uses
  1370.      EEPROM chips to save its contents when power is turned off. In this
  1371.      case, NVRAM is composed of a combination of SRAM and EEPROM chips.
  1372.  
  1373.   ╖  Bubble Memory: A type of non-volatile memory composed of a thin
  1374.      layer of material that can be easily magnetized in only one
  1375.      direction. When a magnetic field is applied to circular area of
  1376.      this substance that is not magnetized in the same direction, the
  1377.      area is reduced to a smaller circle, or bubble.  It was once widely
  1378.      believed that bubble memory would become one of the leading memory
  1379.      technologies, but these promises have not been fulfilled. Other
  1380.      non-volatile memory types, such as EEPROM, are both faster and less
  1381.      expensive than bubble memory.
  1382.  
  1383.   ╖  Flash Memory: A special type of EEPROM that can be erased and
  1384.      reprogrammed in blocks instead of one byte at a time. Many modern
  1385.      PCs have their BIOS stored on a flash memory chip so that it can
  1386.      easily be updated if necessary. Such a BIOS is sometimes called a
  1387.      flash BIOS. Flash memory is also popular in modems because it
  1388.      enables the modem manufacturer to support new protocols as they
  1389.      become standardized.
  1390.  
  1391.   7.  Etherboot
  1392.  
  1393.  
  1394.   7.1.  Introduction
  1395.  
  1396.   This is the README file for the Etherboot package. This document
  1397.   explains how to install, configure and use the Etherboot package.  The
  1398.   instructions here apply to version 4.0 of Etherboot.
  1399.  
  1400.   Etherboot is a package for creating ROM images that can download code
  1401.   over the network to be executed on an x86 computer. Typically the
  1402.   computer is diskless and the code is Linux, but these are not the only
  1403.   possibilities. The code uses the bootp, tftp and NFS Internet
  1404.   Protocols.
  1405.  
  1406.  
  1407.   7.1.1.  What hardware is supported?
  1408.  
  1409.  
  1410.   Etherboot supports the following network hardware (in no particular
  1411.   order): 3c503, 3c507, 3c509, 3c905b, NE1000, NE2000 (also the PCI
  1412.   cards, with the nepci driver), WD8003, WD8013, SMC8216/8416, Lance
  1413.   based cards such as the NE2100 and NI6510 (also the PCI Lance cards),
  1414.   Crystal CS89x0, Intel EtherExpress Pro, SMC 83c170 EPIC/100, SMC9000,
  1415.   Realtek 8139, NI5210, Schneider and Koch G16, and Tiara (Fujitsu
  1416.   Lancard). All Etherboot drivers are autoprobing, which means they
  1417.   attempt to detect the hardware addresses at which the card is
  1418.   installed. It's fairly easy to write a driver if you are familiar with
  1419.   Ethernet hardware interfacing. Please contact me
  1420.   <mailto:ken.yap@acm.org> for more information if you are interested in
  1421.   doing so or are interested in having a driver written.
  1422.  
  1423.  
  1424.   7.1.2.  Availability of this document
  1425.  
  1426.  
  1427.   This document and related documents are also kept online at the
  1428.   Etherboot Home Page <http://www.slug.org.au/etherboot/>.  This will in
  1429.   general have the latest distributions and documentation.
  1430.  
  1431.  
  1432.  
  1433.   For a talk/tutorial type introduction to what Etherboot does and how
  1434.   to set it up, see my SLUG talk <diskless.html>. You may wish to review
  1435.   this before reading further.
  1436.  
  1437.  
  1438.  
  1439.   An older version of this README, which is now out of date, can be
  1440.   accessed via this link <old-README.html>.
  1441.  
  1442.  
  1443.   7.1.3.  Getting help
  1444.  
  1445.  
  1446.   There is a mailing list for all netbooting related issues. To
  1447.   subscribe follow the instructions on the Etherboot home page
  1448.   <http://www.slug.org.au/etherboot/>.
  1449.  
  1450.  
  1451.  
  1452.  
  1453.   With the exception of the following section, the information on
  1454.   diskless booting is not specific to Etherboot but can be used for the
  1455.   Netboot package also.
  1456.  
  1457.  
  1458.   7.2.  Unpacking, compiling and testing the package
  1459.  
  1460.  
  1461.   This section is Etherboot specific.
  1462.  
  1463.  
  1464.   7.2.1.  Unpacking the distribution
  1465.  
  1466.  
  1467.   Unpack the distribution using gunzip and tar, using either of the
  1468.   following commands:
  1469.  
  1470.  
  1471.  
  1472.  
  1473.   ______________________________________________________________________
  1474.           tar zxvf etherboot-4.0.tar.gz
  1475.           gunzip < etherboot-4.0.tar.gz | tar xvf -
  1476.   ______________________________________________________________________
  1477.  
  1478.  
  1479.  
  1480.  
  1481.   7.2.2.  Compiling the ROM images
  1482.  
  1483.  
  1484.   Precompiled ROM images are provided in the bin/ directory but you may
  1485.   wish to review the options compiled in and make your own versions. For
  1486.   the 32 bit version you need a recent release of gcc and the binutils
  1487.   tools. This package was compiled with the tools from a RedHat 5.2
  1488.   distribution but it should work with any recent Linux distribution.
  1489.   For the 16 bit version you need the bcc tools from the Embedded Linux
  1490.   Kernel Subset (ELKS) project, for more details see the notes on 16 bit
  1491.   Etherboot <16.html>. You need the 16 bit version only if you intend to
  1492.   run Etherboot on a 286 or 086/088 PC.
  1493.  
  1494.  
  1495.  
  1496.   Assuming you have decided to make the 32 bit version, you only have to
  1497.   go to src-32/, edit the options in Config and say make. This will
  1498.   create all the ROM images available. The .lzrom images are the same as
  1499.   the .rom images. Since the .lzrom images are smaller and work exactly
  1500.   the same, there is no real reason to use .rom images any more, unless
  1501.   you are nervous about compression algorithm patents. We believe the
  1502.   algorithm used does not infringe patents, having been in public use
  1503.   for some time, but we do not know all the legal ramifications. See
  1504.   here <COPYING_compressor.html> for more details.
  1505.  
  1506.  
  1507.  
  1508.   Here is a brief description of the options available:
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.   ______________________________________________________________________
  1520.   Basic options:
  1521.  
  1522.   -DDHCP_SUPPORT  - Use DHCP instead of BOOTP (default on)
  1523.   -DIMAGE_MENU    - Allow to interactively chose between different
  1524.                     bootimages; read vendortags.html for further
  1525.                     information.
  1526.   -DMOTD          - Display message of the day; read vendortags.html
  1527.                     for further information.
  1528.   -DANSIESC       - evaluate a subset of common ANSI escape sequences
  1529.                     when displaying the message of the day; this
  1530.                     probably does not make sense unless you also
  1531.                     define -DMOTD or at least -DIMAGE_MENU.
  1532.                     Combining this option with -DSERIAL_CONSOLE
  1533.                     is a waste of EPROM space.
  1534.   -DGFX           - support extensions to the ANSI escape sequences for
  1535.                     displaying graphics (icons or logos); this
  1536.                     requires -DANSIESC
  1537.   -DASK_BOOT=n    - Ask "Boot from Network or from Local? " at startup,
  1538.                     timeout after n seconds (0 = no timeout); this
  1539.                     can be done in a more generic way by using the
  1540.                     IMAGE_MENU, but it requires that the "bootp"
  1541.                     server is accessible, even when booting locally.
  1542.   -DANS_DEFAULT=ANS_NETWORK
  1543.                   - Assume Network to previous question
  1544.                     (alternative: ANS_LOCAL) on timeout or Return key
  1545.                     See etherboot.h for prompt and answer strings.
  1546.   -DEMERGENCYDISKBOOT
  1547.                   - if no BOOTP server can be found, then boot from
  1548.                     local disk. The accessibility of the TFTP server
  1549.                     has no effect, though! So configure your BOOTP
  1550.                     server properly.
  1551.  
  1552.   Basic options only on Etherboot/32:
  1553.  
  1554.   -DPASSWD        - enable password protection for boot images; this
  1555.                     requires -DIMAGE_MENU
  1556.   -DUSRPARMS      - allow the user to interactively edit parameters
  1557.                     that are passed to the booted kernel; you should
  1558.                     probably enable -DPASSWD as well; this feature
  1559.                     requires -DIMAGE_MENU
  1560.   -DFLOPPY        - boot from floppy/hd if bootimage matches the
  1561.                     pattern "/dev/[fh]d*"; if you do not have
  1562.                     enough space in the EPROM, then disable this
  1563.                     feature and use "mknbi-blkdev" for booting
  1564.                     from a local blockdevice.
  1565.   -DCONFIG_PCI_DIRECT
  1566.                   - define this for PCI BIOSes that do not implement
  1567.                     BIOS32 or not correctly
  1568.  
  1569.   These options should normally not need to be touched:
  1570.  
  1571.   -DNOINT19H      - Take control as soon as BIOS detects the ROM
  1572.                     Normally hooks onto INT19H
  1573.   -DMOVEROM       - if your motherboard does not cache adapter memory
  1574.                     space, then this option can speed up loading of
  1575.                     compressed BOOT-Prom images. It has no effect on
  1576.                     uncompressed images. Unless you are very tight on
  1577.                     free space, you will usually want to define this
  1578.                     option.
  1579.   -DDELIMITERLINES - print a line of = characters at the start
  1580.                     and also just before starting an image.
  1581.   -DSIZEINDICATOR - update a running total of the amount of code
  1582.                     loaded so far, in kilobytes
  1583.   -DT509HACK      - send two bootp packets before waiting for a
  1584.                     reply to the first. Makes a 3c509 do bootp
  1585.                     quicker
  1586.   -DT503_AUI      - Use AUI by default on 3c503 cards.
  1587.  
  1588.   These options are only for a serial console for Etherboot/32:
  1589.  
  1590.   -DSERIAL_CONSOLE- use a serial line for input and output
  1591.   -DCOMPORT       - 0x0 for COM1, 0x1 for COM2 etc
  1592.   -DCOMPARM       - configuration for COMPORT, save values:
  1593.                      0xe3 == 9600/8n1, 0xa3 == 2400/8n1
  1594.   ______________________________________________________________________
  1595.  
  1596.  
  1597.  
  1598.  
  1599.   7.2.3.  Testing the ROM images
  1600.  
  1601.  
  1602.   You can test the image with a floppy before burning an EPROM. On Linux
  1603.   just put a blank floppy in fd0 and say make card.fd0 where card is the
  1604.   name of your network card and it will copy a bootable image onto the
  1605.   floppy. If you wish to do this by hand, it's easy, just prepend
  1606.   floppyload.bin to card.rom (or card.lzrom) and write this combined
  1607.   binary to the floppy raw, i.e. starting at the boot block. Like this:
  1608.  
  1609.  
  1610.  
  1611.  
  1612.   ______________________________________________________________________
  1613.           cat floppyload.bin 3c509.lzrom > /dev/fd0
  1614.   ______________________________________________________________________
  1615.  
  1616.  
  1617.  
  1618.   When you boot with this floppy it will load the Etherboot ROM image
  1619.   from floppy and execute it. It should be able to detect your card. To
  1620.   get the bootrom to acquire an IP address and load the intended code,
  1621.   you need to set up bootp, tftp and NFS services, which we will discuss
  1622.   next.
  1623.  
  1624.  
  1625.  
  1626.   We suggest you continue to use floppy booting until you have completed
  1627.   the setup of the server and are satisfied that diskless booting works.
  1628.  
  1629.  
  1630.   7.3.  Setting up a diskless boot
  1631.  
  1632.  
  1633.   In this section I assume you want to boot a Linux kernel. Booting a
  1634.   DOS kernel is similar, the main differences being in the way you set
  1635.   up the tagged image.
  1636.  
  1637.  
  1638.   7.3.1.  Making a tagged image
  1639.  
  1640.  
  1641.   Etherboot expects to download a tagged image <spec.html> containing
  1642.   the code to be executed. Briefly explained, a tagged image is a
  1643.   wrapper around the pieces of code or data that need to be put in
  1644.   various places in the computer's memory. It contains a directory
  1645.   telling how large the pieces are and where they go in memory. It also
  1646.   says where to start execution.
  1647.  
  1648.  
  1649.  
  1650.  
  1651.   A tagged image is created using a utility program. The utility program
  1652.   is specific to the kernel you want to load. The version for Linux is
  1653.   called mknbi-linux and that for DOS is mknbi-dos. These utilities are
  1654.   found in the netboot-<version> directory of the distribution.
  1655.  
  1656.  
  1657.   7.3.2.  Compiling a custom kernel
  1658.  
  1659.  
  1660.   You will probably have to compile a custom kernel because the kernel
  1661.   needs to have the "Root file system on NFS" option compiled in.  You
  1662.   should also select "BOOTP support". "RARP support" is not needed.  In
  1663.   2.2 kernels you have to enable the "Kernel Autoconfig" option to
  1664.   access the BOOTP support question.  And unless you are using an initrd
  1665.   (initial ramdisk) you will probably have to compile in the driver for
  1666.   your network card too. For details, see the file
  1667.   /usr/src/linux/Documentation/nfsroot.txt in a Linux kernel source
  1668.   distribution.
  1669.  
  1670.  
  1671.  
  1672.   After you have compiled the custom kernel, make the tagged image,
  1673.   typically like this:
  1674.  
  1675.  
  1676.   ______________________________________________________________________
  1677.           mknbi -x -k zImage -o /tftpboot/vmlinuz.xterm
  1678.   ______________________________________________________________________
  1679.  
  1680.  
  1681.  
  1682.   Then put the tagged image in where the tftp daemon expects to find it,
  1683.   typically /tftpboot. Make sure it is world-readable because typically
  1684.   the tftp daemon runs as an unprivileged user.
  1685.  
  1686.  
  1687.   7.3.3.  Setting up a bootp daemon
  1688.  
  1689.  
  1690.   Now set up a bootp daemon. In RedHat 5.2 this means installing the
  1691.   bootp RPM package, making sure that the bootps service is active in
  1692.   /etc/inetd.conf,  and editing /etc/bootptab. The essential pieces of
  1693.   information you need to put in bootptab are:
  1694.  
  1695.  
  1696.   1. The domain name of the machine.
  1697.  
  1698.   2. The Ethernet (MAC) address of the network card, which you generally
  1699.      obtain from a sticker on the card, a configuration program for the
  1700.      card, or in the last resort, from watching the output of Etherboot
  1701.      or from the packets sent from the card when trying to boot, using
  1702.      the debug option of bootpd.
  1703.  
  1704.   3. The name of the tagged image file, relative to the tftpboot
  1705.      directory.
  1706.  
  1707.   4. The IP address you intend to give it.
  1708.  
  1709.   5. The IP addresses of various servers. You will need at least the
  1710.      tftp server's address.
  1711.  
  1712.  
  1713.  
  1714.   Here is an example of a /etc/bootptab for the bootpd supplied with
  1715.   RedHat Linux 5.2 and probably many versions of Unix:
  1716.  
  1717.   ______________________________________________________________________
  1718.   .default:\
  1719.           :ht=ethernet:\
  1720.           :hd=/tftpboot:bf=null:\
  1721.           :ds=nameserver:\
  1722.           :hn:to=36000:
  1723.   xterm.ken.net.au:tc=.default:ha=08002BB7F380:ip=192.168.26.100:bf=vmlinuz.xterm
  1724.   ______________________________________________________________________
  1725.  
  1726.  
  1727.  
  1728.   The first entry sets up some common defaults which applies to all
  1729.   succeeding entries which can be "included" using the tc=.default
  1730.   attribute. The first field is the domain name of the machine. The ha
  1731.   attribute is the Ethernet address.  The ip attribute is self-
  1732.   explanatory. The bf field specifies the tagged image filename. For
  1733.   more details, consult the bootptab man page.
  1734.  
  1735.  
  1736.  
  1737.   Please note that if you use the ef (extension file) attribute to be
  1738.   able to send more configuration data to the diskless machine, you must
  1739.   run bootpef everytime bootptab is modified.
  1740.  
  1741.  
  1742.  
  1743.   If you are on a local network that is not directly connected to the
  1744.   Internet, you can use the "private" IP addresses 192.168.x.y (or in
  1745.   the other ranges mentioned in RFC1918
  1746.   <http://ds.internic.net/rfc/rfc1918.txt>). Otherwise please ask either
  1747.   your network administrator or your Internet service provider for your
  1748.   own IP address(es).
  1749.  
  1750.  
  1751.   7.3.4.  Setting up a DHCP daemon
  1752.  
  1753.  
  1754.   As an alternative to bootp, you could set up a DHCP server which has
  1755.   the advantage of automating the handing out of IP addresses. However
  1756.   the kernel may still do a bootp request to find the IP address for
  1757.   mounting the NFS filesystem. You may then wish to investigate the
  1758.   option in mknbi-linux which tells the kernel to take the address from
  1759.   the initial DHCP reply.
  1760.  
  1761.  
  1762.  
  1763.   More information about DHCP can be found at the DHCP FAQ Web Page
  1764.   <http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html>.
  1765.  
  1766.  
  1767.   7.3.5.  Setting up a tftp daemon
  1768.  
  1769.  
  1770.   Now set up a tftp daemon. In RedHat 5.2 this means installing the tftp
  1771.   RPM package and making sure that the tftp service is active in
  1772.   /etc/inetd.conf. You probably want to use the secure (-s) option so
  1773.   that files can only be fetched from /tftpboot or people may be able to
  1774.   fetch arbitrary files from your server.
  1775.  
  1776.  
  1777.   7.4.  Testing the network booting
  1778.  
  1779.  
  1780.   Now when you start up Etherboot, it should obtain an IP address and
  1781.   print out what it received. If you do not get this to work, turn on
  1782.   debugging in bootpd and see if any query was received. If not, check
  1783.   your network hardware (cables, etc). If a query was received, check if
  1784.   bootpd was able to give an answer. If not, then the Ethernet address
  1785.   was not found in /etc/bootptab. If a reply was sent, then only faulty
  1786.   hardware or a bug in Etherboot would prevent it being received by
  1787.   Etherboot.
  1788.  
  1789.  
  1790.  
  1791.   Assuming an IP address was received, the next thing Etherboot tries to
  1792.   do is load a file using tftp. Check your system logs to see if a tftp
  1793.   daemon was started up and a file requested. Generally if you run tftpd
  1794.   under tcpwrapper security, a log entry will be generated. If not, it
  1795.   could be a path problem or file permission problem (the file needs to
  1796.   be readable by tftpd). Fix the problem.
  1797.  
  1798.  
  1799.  
  1800.   After the tagged image is loaded, Etherboot will jump to it. If it
  1801.   crashes here, check that the image is a tagged image. If it executes
  1802.   and stops at the point where it's trying to mount the NFS root, then
  1803.   you need to check that you have the "root on NFS" option compiled in
  1804.   and that you have compiled in the network card driver.
  1805.  
  1806.  
  1807.   7.4.1.  Setting up a NFS root filesystem
  1808.  
  1809.  
  1810.   Now you need to set up a NFS root filesystem for the diskless
  1811.   computer.  Typically this is under /tftpboot/<ip address of computer>.
  1812.   (In 2.1 and presumably future kernels, this should be /tftpboot/<name
  1813.   of computer in bootptab>). This needs to contain a complete root
  1814.   filesystem that will make the kernel boot happily.  This means, for
  1815.   most kernels, it should contain /dev, /proc, /etc, /sbin, /bin, /tmp
  1816.   and /var. The details vary from distribution to distribution.  Being
  1817.   lazy I just make a copy of the necessary files from an existing RedHat
  1818.   5.2 filesystem and modify some key files appropriately. You can find a
  1819.   description in my tutorial <diskless.html> and some shell scripts to
  1820.   copy the files. Since the amount of disk space needed is relatively
  1821.   small in these days of large disks, I don't bother to throw out things
  1822.   that may not be needed.
  1823.  
  1824.  
  1825.  
  1826.   Warning: Do not attempt to reuse the root filesystem of your server,
  1827.   whether by exporting it directly or by making hard links (symbolic
  1828.   links will not work). First of all, the configuration files will
  1829.   contain information pertaining to the server, not the client, so your
  1830.   client will get the wrong information. Secondly, this is a security
  1831.   risk. NFS is already not totally safe, but this way you are directly
  1832.   exposing your server root to clients. Even if you make hard links, the
  1833.   clients could (maliciously or accidentally) overwrite key binaries,
  1834.   making the server unusable. Don't try to save a few megabytes of disk
  1835.   space this way. You can however share some directories between
  1836.   clients, typically /sbin, /bin and /lib.  The sample scripts in the
  1837.   tutorial show you how.
  1838.  
  1839.  
  1840.  
  1841.   The root filesystem should be exported rw and no_root_squash because
  1842.   the various processes need to be root and need to write to log files
  1843.   in the root partition. You may wish to export /usr and /home
  1844.   filesystems to the diskless computer also. These do not need
  1845.   no_root_squash permission. Be aware that the RedHat 5.2 distribution
  1846.   has a few "bugs" relating to symlinks and so forth for diskless
  1847.   booting.  These are mentioned in the tutorial. Other distributions may
  1848.   have similar problems.
  1849.   7.4.2.  Swap over NFS
  1850.  
  1851.  
  1852.   Swap over NFS can be arranged but you have to patch the kernel source.
  1853.   There is a patch for kernels in the contrib/ directory for 2.0.x
  1854.   kernels. Hopefully this will make it into future kernels. Be aware
  1855.   that opinions are divided on NFS swap.  Some people think it's a bad
  1856.   thing because it just kills the network if you have lots of diskless
  1857.   computers and that you shouldn't be running into a swap regime on a
  1858.   diskless computer anyway. Some other people like having a bit of
  1859.   insurance.
  1860.  
  1861.  
  1862.  
  1863.   There are patches in the contrib directory for NFS swap but for up to
  1864.   date patches, try here < http://www.math1.rwth-aachen.de/~heine/nfs-
  1865.   swap/>.
  1866.  
  1867.  
  1868.  
  1869.   Also have a look at the NBD
  1870.   <http://atrey.karlin.mff.cuni.cz/~pavel/nbd/nbd.html> Network Block
  1871.   Device web page for swapping over that. This requires a 2.1 or 2.2
  1872.   kernel.
  1873.  
  1874.  
  1875.   7.5.  Booting DOS
  1876.  
  1877.  
  1878.   What about DOS? The deal with DOS is that one is loading a virtual
  1879.   floppy called A: into extended memory and then booting from this
  1880.   floppy.  So you have to capture an image of a bootable DOS floppy
  1881.   first.  Some more details can be found in the mknbi-dos directory.
  1882.  
  1883.  
  1884.  
  1885.   I have booted DOS (both M$ and DR versions) diskless this way. Note
  1886.   that extended memory is used so that rules out 086/088 computers but
  1887.   286s are ok. See this document <atnetboot.html> for more details.
  1888.  
  1889.  
  1890.  
  1891.   If you were thinking of booting a Windows machine via the network, it
  1892.   seems (I'm not masochistic enough to do this) the problem is not the
  1893.   network booting but the mounting of a file system over NetBIOS
  1894.   (Windows does not do remote mounts of root filesystems over NetBIOS on
  1895.   TCP). So that rules out a Samba server. It appears to be possible over
  1896.   a Netware server, for which Linux has workalikes. But then what do you
  1897.   do about the networking stack? This situation may change with with
  1898.   future Samba developments. But you will still have problems with
  1899.   pathnames and the usual Windows hassles. Do you really want to do
  1900.   this?  In the Web page for Etherboot
  1901.   <http://www.slug.org.au/etherboot/>, there is a link to someone's Web
  1902.   page explaining how this was done with a commercial TCP/IP boot ROM.
  1903.  
  1904.  
  1905.   7.6.  Making an Etherboot EPROM or EEPROM
  1906.  
  1907.  
  1908.   Assuming you have satisfactorily set up your server environment, you
  1909.   may now wish to put the Etherboot onto an EPROM or EEPROM. Naturally
  1910.   this assumes access to hardware to burn (and possibly erase) EPROMs.
  1911.   An alternative is to use an EEPROM card. There is a schematic and PCB
  1912.   artwork for such a card in the distribution. This EEPROM card plugs
  1913.   onto the ISA bus and can be reprogrammed with software.
  1914.  
  1915.   7.6.1.  Choosing the EPROM
  1916.  
  1917.  
  1918.   Most network cards come with a blank (E)EPROM socket even though it is
  1919.   seldom used. When it is used, it is typically filled with a
  1920.   proprietary EPROM from the network card manufacturer. You can put an
  1921.   Etherboot EPROM there instead.
  1922.  
  1923.  
  1924.   7.6.2.  Enabling the EPROM
  1925.  
  1926.  
  1927.   First you must discover how to enable the EPROM socket on your card.
  1928.   Typically the EPROM is not enabled at the factory and a jumper or a
  1929.   soft configuration is used to turn it on.
  1930.  
  1931.  
  1932.   7.6.3.  Size and speed of the EPROM
  1933.  
  1934.  
  1935.   Secondly, you must discover what size and speed of EPROM is needed.
  1936.   This can be difficult as network card manufacturers often neglect to
  1937.   provide this information.
  1938.  
  1939.  
  1940.  
  1941.   The smallest EPROM that is accepted by network cards is an 8K EPROM
  1942.   (2764). Some cards will even go up to 64KB EPROMs (27512). You want to
  1943.   use the smallest EPROM you can so that you don't take up more of the
  1944.   upper memory area than needed as other extensions BIOSes may need the
  1945.   space.  However you also want to get a good price for the EPROM.
  1946.   Currently the 32KB and 64KB EPROMs (27256 and 27512) seem to be the
  1947.   cheapest per unit. Smaller EPROMs appear to be more expensive because
  1948.   they are out of mainstream production.
  1949.  
  1950.  
  1951.  
  1952.   If you cannot find out from the documentation what capacity of EPROM
  1953.   your card takes, you could do it by trial and error. Take an ROM with
  1954.   some data on it (say a character generator ROM) and plug it into the
  1955.   socket. Be careful not to use an extension BIOS for this test because
  1956.   it may be detected and activated and prevent you from booting your
  1957.   computer.  Using the debug program under DOS, dump various regions of
  1958.   the memory space. Say you discover that you can see the data in a
  1959.   memory window from CC00:0 to CC00:3FFF (= 4000 hex = 16384 decimal
  1960.   locations). This indicates that a 16 KB EPROM is needed. However if
  1961.   you see an alias in parts of the memory space, say the region from
  1962.   CC00:0 to CC00:1FFF is duplicated in CC00:2000 to CC00:3FFF, then you
  1963.   have put an 8 KB EPROM into a 16 KB slot and you need to try a larger
  1964.   EPROM.
  1965.  
  1966.  
  1967.  
  1968.   Note that because pinouts for 28 pin EPROMs are upward compatible
  1969.   after a fashion, you can probably use a larger capacity EPROM in a
  1970.   slot intended for a smaller one. The higher address lines will
  1971.   probably be held high so you will need to burn the image in the upper
  1972.   half or upper quarter of the larger EPROM, as the case may be. However
  1973.   you should double check the voltages on the pins armed with data sheet
  1974.   and a meter because CMOS EPROMs don't like floating pins.
  1975.  
  1976.  
  1977.  
  1978.   The speed of the EPROM needed depends on how it is connected to the
  1979.   computer bus.  If the EPROM is directly connected to the computer bus,
  1980.   as in the case of many cheap NE2000 clones, then you will probably
  1981.   have to get an EPROM that is at least as fast as the ROMs used for the
  1982.   main BIOS. This is typically 150 ns. Some network cards mediate access
  1983.   to the EPROM via an ASIC and this ASIC may insert wait states so that
  1984.   slower EPROMs can be used. Incidentally the slowness of the EPROM
  1985.   doesn't affect Etherboot execution speed much because Etherboot copies
  1986.   itself to RAM before executing. I'm told Netboot does the same thing.
  1987.  
  1988.  
  1989.   7.7.  Troubleshooting tips
  1990.  
  1991.  
  1992.  
  1993.   ╖  Floppy boot doesn't work. Have you copied the ROM image (with the
  1994.      floppyloader prepended) to the floppy raw? Is that size of floppy
  1995.      bootable by your computer? Are you trying to run a 32 bit Etherboot
  1996.      on a 16 bit machine (286, 086/088)? Have you selected too many
  1997.      compile time options? The real limit on Etherboot is not the size
  1998.      of the EPROM but the fact that it executes in the 32 KB region
  1999.      between 0x98000 and 0xA0000. If the sum of code, stack and bss is
  2000.      greater than 32 KB, then Etherboot might crash at unexpected
  2001.      places. You could increase the memory to 48 KB by lowering the
  2002.      RELOCADDR in the Makefile but this is outside the specifications.
  2003.      Definitely do not lower RELOCADDR below 0x94000 because various
  2004.      pieces of booting information are stored from 0x90000 upwards.
  2005.  
  2006.   ╖  Floppy version works but EPROM version doesn't work. There is a
  2007.      program called rom-scan (Linux and DOS versions) in the directory
  2008.      contrib/rom-scan which will help detect problems.
  2009.  
  2010.  
  2011.   ╖  If the EPROM is not detected at all then the contents of the EPROM
  2012.      are not visible to the BIOS. Check that you have enabled the EPROM
  2013.      with any jumpers or soft configuration settings. Check that you do
  2014.      not have any conflicts in the memory address of the EPROM and any
  2015.      other hardware.  Perhaps you have to prevent it from being mapped
  2016.      out by your BIOS settings. Or perhaps you have to shadow it with
  2017.      RAM. Maybe you put the code in the wrong half or wrong quarter of
  2018.      the EPROM. Maybe the access time of the EPROM is not low enough.
  2019.      You can also use the debug program under BIOS to examine the memory
  2020.      area in question.
  2021.  
  2022.   ╖  If rom-scan says the EPROM is present but not active, then
  2023.      something prevented the BIOS from seeing it as a valid extension
  2024.      BIOS. This could be truncation of the EPROM window, maybe you have
  2025.      a larger EPROM in a slot meant for a smaller one. Maybe there is a
  2026.      checksum error in the EPROM due to some bits not properly
  2027.      programmed or the EPROM not being fast enough. In one case that we
  2028.      know of, the 3c503 network card, the ASIC actually returns 2 bytes
  2029.      of 80 80 in the end locations of the EPROM space. This apparently
  2030.      is a kind of signature. The makerom program in Etherboot
  2031.      compensates for this, but if the pattern is not 80 80, then the
  2032.      code needs to be modified.
  2033.  
  2034.   ╖  If rom-scan says the EPROM is present and active, but BIOS does not
  2035.      see it, then perhaps the EPROM is located in an area that the BIOS
  2036.      does not scan. The range scanned is supposed to be 0xC0000 to
  2037.      0xEF800 in increments of 2 KB but I have seen some BIOSes that
  2038.      continue the scan into the 0xF0000 page.
  2039.  
  2040.  
  2041.      Note that rom-scan will also detect other extension BIOSes mounted
  2042.      on your computer, for example VGA BIOSes and SCSI adapter BIOSes.
  2043.      This is normal.
  2044.  
  2045.   ╖  Etherboot does not detect card. Are you using the right ROM image?
  2046.      Is the card properly seated in the computer? Can you see the card
  2047.      with other software? Are there any address conflicts with other
  2048.      hardware? Is the PCI id of the card one that is not known to
  2049.      Etherboot yet? In this case and where you think there is a bug in
  2050.      Etherboot, please contact the author with all details.
  2051.  
  2052.   ╖  Etherboot detects card but hangs computer after detection. Some
  2053.      cards are booby traps while they are enabled. The typical offenders
  2054.      are NE2000s which will hang the bus if any access is made to the
  2055.      reset addresses while interrupts are active. You may need to do a
  2056.      hard reset of the computer, i.e. power down and up again before
  2057.      running Etherboot.
  2058.  
  2059.   ╖  Etherboot detects card but does nothing after saying Searching for
  2060.      server. Check your network hardware. Did you select the right
  2061.      hardware interface (AUI, BNC, RJ45)? Is the cabling ok? If you have
  2062.      a Unix computer on the network and have root privileges, you could
  2063.      run tcpdump looking for broadcast packets on the bootps port. If
  2064.      the requests are getting sent out but no replies are getting back,
  2065.      check your bootpd setup. Also check if the server has a route to
  2066.      the client.
  2067.  
  2068.   ╖  Etherboot obtains IP address but fails to load file. Check the tftp
  2069.      server. Is the tagged image file installed? Is the file world
  2070.      readable? Did you put the right home directory and boot filename in
  2071.      bootptab?
  2072.  
  2073.   ╖  Etherboot loads file via tftp but Linux fails to boot. This is a
  2074.      large category. Here are some suggestions:
  2075.  
  2076.  
  2077.   ╖  You do not have a private copy of the /, /etc, /var, ...
  2078.      directories
  2079.  
  2080.   ╖  Your /dev directory is missing entries for /dev/zero and/or
  2081.      /dev/null or is sharing device entries from a server that uses
  2082.      different major and minor numbers (i.e. a server that is not
  2083.      running Linux).
  2084.  
  2085.   ╖  Your /lib directory is missing libraries (most notably libc* and/or
  2086.      libm*) or does not have the loader files ld*.so*
  2087.  
  2088.   ╖  You neglected to run ldconfig to update /etc/ldconfig.cache or you
  2089.      do not have a configuration file for ldconfig.
  2090.  
  2091.   ╖  Your /etc/inittab and/or /etc/rc.d/* files have not been customized
  2092.      for the clients.
  2093.  
  2094.   ╖  Your kernel is missing some crucial compile-time feature (such as
  2095.      NFS filesystem support, booting from the net, transname (optional),
  2096.      ELF file support, networking support, driver for your ethernet
  2097.      card).
  2098.  
  2099.   ╖  Missing init executable (in one of the directories known by the
  2100.      kernel: /etc, /sbin, ?). Remember /sbin/init must be a real file,
  2101.      not a symlink.
  2102.  
  2103.   ╖  Missing /etc/inittab
  2104.  
  2105.   ╖  Missing /dev/tty?
  2106.  
  2107.   ╖  Missing /bin/sh
  2108.  
  2109.   ╖  System programs that insist on creating/writing to files outside of
  2110.      /var (mount and /etc/mtab* is the canonical example)
  2111.  
  2112.  
  2113.      The essence is that you must provide whatever is needed in the NFS
  2114.      root filesystem that your kernel needs to boot. This is somewhat
  2115.      distribution dependent. In the discussion above I solved the
  2116.      problem by making a copy of an existing root filesystem and
  2117.      modifying a few bits.  Be aware that some, if not all,
  2118.      distributions contain bugs in their layout that hinder diskless
  2119.      mounting so you will have to fix any problems that arise. An
  2120.      example was a directory in /usr/X11R6/lib that needed to be
  2121.      writable, preventing /usr from being mounted ro.
  2122.  
  2123.   ╖  Etherboot works fine and kernel starts but network interface
  2124.      doesn't work. Check your network configuration in the OS.
  2125.      Etherboot uses polled I/O and not interrupt I/O to fetch the
  2126.      images. So the IRQ line doesn't get exercised. This manifested
  2127.      itself in one case with a NIC that could netboot but network
  2128.      programs run afterwards couldn't receive any packets. It seemed to
  2129.      be a combination of a weak NIC IRQ line and a fussy motherboard.
  2130.      But the same thing could happen if say the IRQ is not set to where
  2131.      the software is expecting it. The image will load fine with the
  2132.      wrong IRQ but the software will not run properly. This is more of
  2133.      an issue with say DOS packet drivers, where the user has to specify
  2134.      the IRQ line than with Linux, which autoprobes.
  2135.  
  2136.  
  2137.  
  2138.  
  2139.   7.8.  Acknowledgements
  2140.  
  2141.  
  2142.   The following people have contributed substantially to Etherboot. If
  2143.   you feel your name has been left out, just let me know and I will fix
  2144.   it up.
  2145.  
  2146.  
  2147.  
  2148.      Markus Gutschke
  2149.         Co-author of Etherboot. He was the person who ported the Netboot
  2150.         suite from FreeBSD. He has enhanced Etherboot with many
  2151.         features, one new driver and has contributed various utilities
  2152.         and addons.
  2153.  
  2154.  
  2155.      Gero Kuhlmann
  2156.         The mknbi utilities used by Etherboot are from Netboot.  He has
  2157.         also clarified the original specification by Jamie Honan.
  2158.  
  2159.  
  2160.      Jamie Honan
  2161.         Jamie started Netboot off by writing the first version that used
  2162.         code from a packet driver.
  2163.  
  2164.  
  2165.      Martin Renters et. al
  2166.         The original authors of Netboot on FreeBSD.
  2167.  
  2168.  
  2169.      Bruce Evans
  2170.         Created bcc compiler used by Etherboot/16.
  2171.  
  2172.  
  2173.      Rob de Bath
  2174.         Current maintainer of bcc and associated tools like as86.
  2175.  
  2176.  
  2177.      Gerd Knorr
  2178.         Contributed MASQ for making a boot floppy without DOS.
  2179.      Adam Richter
  2180.         Contributed comboot for making a boot floppy without DOS.
  2181.  
  2182.  
  2183.      Claus-Justus Heine
  2184.         Contributed patch for serial console and NFS swapping. See the
  2185.         contrib/nfs-swap directory for his Web page.
  2186.  
  2187.  
  2188.      Dickon Reed
  2189.         Contributed display of loading status and a hack for the 3c509
  2190.         card.
  2191.  
  2192.  
  2193.      David Munro
  2194.         Contributed PCI detection code originally from Linux sources.
  2195.  
  2196.  
  2197.      Charlie Brady
  2198.         Donated NE2100 card so that a driver could be written, and
  2199.         helped test the LancePCI driver. Spotted bug with 4.1 header
  2200.         code.
  2201.  
  2202.  
  2203.      Rogier Wolff
  2204.         Created Intel EtherExpressPro 100 driver and binary to hex
  2205.         converter.
  2206.  
  2207.  
  2208.      Vlag Lungu
  2209.         Contributed patches to work with DHCP. Also contributed a fix to
  2210.         match the received XID against the transmitted one, important in
  2211.         a network with many requesters.
  2212.  
  2213.  
  2214.      William Arbaugh
  2215.         Patches for eepro to work with 3.2.
  2216.  
  2217.  
  2218.      Jean Marc Lacroix
  2219.         Contributed an improved bin2intelhex.
  2220.  
  2221.  
  2222.      Jim Hague
  2223.         Contributed fixes to 3c503 driver for PIO mode, fix to makerom
  2224.         for presetting EPROM bytes, and various endian fixes.
  2225.  
  2226.  
  2227.      Andrew Coulthurst
  2228.         Contributed patch for making Intel eepro work in 4.0.
  2229.  
  2230.  
  2231.      Doug Ambrisko
  2232.         Contributed patches to start32.S from FreeBSD version to make it
  2233.         boot Windoze after answering N to Boot from Network question.
  2234.  
  2235.  
  2236.      Alex Harin
  2237.         Contributed patches for prepended loaders and makerom to make
  2238.         bootrom PnP and PCI compatible.
  2239.  
  2240.  
  2241.      Peter Dobcsanyi
  2242.         Contributed vendor and device IDs for the Netvin NE2000/PCI
  2243.         clone.
  2244.  
  2245.      adam@mudlist.eorbit.net
  2246.         Contributed RARP code as alternative to BOOTP/DHCP. Activated by
  2247.         RARP_NOT_BOOTP define.
  2248.  
  2249.  
  2250.      Daniel Engstrom
  2251.         Contributed a SMC9000 driver.
  2252.  
  2253.  
  2254.      Didier Poirot
  2255.         Contributed an Etherpower II (EPIC 100) driver.
  2256.  
  2257.  
  2258.      Martin Atkins
  2259.         Contributed mntnbi for mounting DOS NBIs.
  2260.  
  2261.  
  2262.      Atilla Bogar
  2263.         Contributed a bug fix to the bootmenu code and a patch to main.c
  2264.         to remove looping menus on failure. Also code for ARP replies
  2265.         and TFTP retransmit (#ifdefed). Cleanup of tftp and tftpd.
  2266.  
  2267.  
  2268.      Nathan R. Neulinger
  2269.         Found bug due to tu_block being declared signed short in
  2270.         arpa/tftp.h on many platforms when it should be unsigned short.
  2271.  
  2272.  
  2273.      David Sharp
  2274.         Contributed a FreeBSD driver for Tulip based cards. Ken Yap
  2275.         ported it to Etherboot. Not tested because code needs to be
  2276.         written for all the variants of the Tulip and also because no
  2277.         hardware available to me.
  2278.  
  2279.  
  2280.      Greg Beeley
  2281.         Contributed a 3c905b driver. Be sure to read the release notes
  2282.         in 3c905b.txt before using.
  2283.  
  2284.  
  2285.      Alex Nemirovsky
  2286.         Contributed patches to use BIOS call to size memory otherwise
  2287.         Etherboot was trampling on top of 640kB area, which is used by
  2288.         some extended BIOSes. Also contributed patches to pci.c to
  2289.         implement PCI bus support on BIOSes that do not implement
  2290.         BIOS32, or incorrectly.
  2291.  
  2292.  
  2293.      Guenter Knauf
  2294.         Suggested making the ASK_BOOT prompts more generic and clearer.
  2295.         (Why doesn't SGML-Tools accept üaut;?) Also contributed a
  2296.         DOS utility for extracting the identifier string and PCI IDs, if
  2297.         any, out of the boot ROM.
  2298.  
  2299.  
  2300.      Klaus Espenlaub
  2301.         Contributed various cleanup patches to the code especially in
  2302.         the bootmenu area, as well as a completely revamped start32.S.
  2303.         Also introduced Rainer Bawidamann's code, see next paragraph.
  2304.  
  2305.  
  2306.      Rainer Bawidamann
  2307.         Contributed a Realtek 8139 driver.
  2308.  
  2309.  
  2310.  
  2311.      Georg Baum
  2312.         contributed a Schneider & Koch G16 driver.
  2313.  
  2314.  
  2315.      jluke@deakin.edu.au
  2316.         sent in a fix for the WD/SMC8013 which I finally verified.
  2317.  
  2318.  
  2319.  
  2320.   7.9.  Copyright
  2321.  
  2322.  
  2323.   The boot code from FreeBSD is under the BSD license.  The netboot code
  2324.   is under the GPL. This is not a problem really: the GPL states that
  2325.   mere aggregation of another work with a GPL'ed work on a storage
  2326.   medium, e.g. an archive file, does not put the other work under the
  2327.   GPL.
  2328.  
  2329.  
  2330.  
  2331.   Send changes to this document to Ken Yap (ken.yap@acm.org).
  2332.  
  2333.   8.  Netboot
  2334.  
  2335.   This chapter was written by Zurⁿck zu Gero. The main site is at
  2336.   <http://www.han.de/~gero/netboot.html>.
  2337.  
  2338.   8.1.  Introduction
  2339.  
  2340.   What do I need it for? The following list shows just a few examples of
  2341.   what Netboot can be used for:
  2342.  
  2343.  
  2344.   ╖  Printer spooler
  2345.  
  2346.   ╖  Terminal server
  2347.  
  2348.   ╖  X11 terminal
  2349.  
  2350.   ╖  Data logging system
  2351.  
  2352.   ╖  Network-Computer (NC)
  2353.  
  2354.   ╖  Some more ....
  2355.  
  2356.   Basically Netboot can be used for any cases in which a computer should
  2357.   be utilized without having a hard disk. But also for computers with a
  2358.   hard disk Netboot can be used if you want to hold just one operating
  2359.   system on your disk and additionally want to be able to boot a
  2360.   different system over the network.
  2361.  
  2362.   What operating systems are supported? Presently Netboot can boot Linux
  2363.   and MS-DOS. Since Windows-95 is also based on MS-DOS that can be used
  2364.   as well. In the future support is also planned for OS/2 and Free-BSD.
  2365.   However, Windows-NT will never be supported. The utility programs,
  2366.   which come with Netboot should run on an UNIX like system.
  2367.  
  2368.   What do I need in order to work with netboot? Obviously first of all
  2369.   you need one (or more) computers which should get bootet.  Those are
  2370.   called clients. Netboot itself should be able to run on almost any PC
  2371.   compatible system, even with the oldest 8088 and 80286 processors.
  2372.   However, it has been optimized to run on 386 and up. Of course this
  2373.   system also needs a network card. Since Netboot uses standard DOS
  2374.   packet drivers, all network cards can be used for which packet drivers
  2375.   exist, even PCI and 100MBps cards. In case no such driver has been
  2376.   delivered with a network card it can usually be downloaded from an FTP
  2377.   server of the manufacturer, such as 3Com
  2378.   <ftp://ftp.3com.com/PUB/NETWORK-INTERFACE-CARDS/LATEST-DRIVERS>, SMC
  2379.   <ftp://ftp.smc.com/pub/nics> or Intel
  2380.   <ftp://ftp.intel.com/pub/support/enduser_reseller/etherexpress_lan_adapters>.
  2381.   In addition there are packet drivers for many popular network cards
  2382.   available for free from the Crynwr packet driver collection
  2383.   <ftp://ftp.crynwr.com/drivers>.  Next you need a system which acts as
  2384.   the server. Because Netboot uses the BOOTP and TFTP standard protocols
  2385.   this server has to be able to understand those. It doesn┤t matter if
  2386.   the server runs a UNIX like operating system or Windows-NT.
  2387.  
  2388.   What does it cost? Nothing! Netboot is given away for free and covered
  2389.   by the GNU General Public Licence
  2390.   <http://www.han.de/~gero/netboot/english/COPYING.html>.
  2391.  
  2392.   How does it work? In order to boot a computer without a hard disk a
  2393.   bootrom is necessary, which gets plugged into a socket on the network
  2394.   card. Netboot contains the full source code and executable binaries
  2395.   for such a bootrom. After poweron this bootrom queries a BOOTP server
  2396.   for the system┤s network name and boot image file name, which then
  2397.   gets loaded using the TFTP protocol. This boot image file contains the
  2398.   operating system which get executed by the bootrom after loading.
  2399.   Netboot contains all necessary utilities to build such a boot image
  2400.   file for Linux and MS-DOS.
  2401.  
  2402.   8.2.  README
  2403.  
  2404.  
  2405.   8.2.1.  Copyright Notice, Acknowledgements
  2406.  
  2407.   You are allowed to modify and redistribute this code under the terms
  2408.   of the GNU General License. By making use of this software in any way
  2409.   you are automatically agreeing to these terms.  My special thanks go
  2410.   to Jamie Honan for defining the initial bootrom specifications, to
  2411.   Markus Gutschke for enhancing mknbi-linux, and to Jens-Uwe Mager for
  2412.   explaining to me the basics of the NFS networking system and sometimes
  2413.   helping me out with his wealth of knowledge and experience.
  2414.  
  2415.  
  2416.   8.2.2.  Overview
  2417.  
  2418.   Booting a computer without a hard disk usually requires a floppy disk
  2419.   drive or a network connection in order to get the operating system
  2420.   into the RAM and up running. This package allows a diskless PC to boot
  2421.   an operating system using an IP based ethernet network. This is done
  2422.   in the following steps:
  2423.  
  2424.  
  2425.   ╖  First the operating system has to be loaded into system memory.
  2426.      This can be done using a bootrom, which loads the operating system
  2427.      image over the network. The bootrom code found in this package can
  2428.      be burned into a real EPROM, or just copied onto a floppy and then
  2429.      started from it upon bootup. Please note that the term bootrom in
  2430.      all documentation texts in this package refers to the real EPROM
  2431.      version as well as the version copied onto and started from a
  2432.      floppy disk.  For the bootrom to find the kernel image it uses the
  2433.      BOOTP protocol as defined in ``'' and ``'' to get the necessary
  2434.      boot information, and then loads the actual image using the TFTP
  2435.      protocol as defined in ``''.
  2436.  
  2437.   ╖  When the operating system starts running, it has to setup it's
  2438.      memory layout using a special boot loader, which is included into
  2439.      the boot image. Then it has to mount it's root filesystem. This can
  2440.      either be done using NFS over the network, or using a ramdisk.
  2441.  
  2442.  
  2443.   The exact specifications for this netboot process can be found here
  2444.   <http://www.han.de/~gero/netboot/english/spec.html>.
  2445.  
  2446.  
  2447.   8.2.3.  Features
  2448.  
  2449.   Booting a diskless client either from an EPROM or from a floppy
  2450.   without additional utility tools The Bootrom code can use many
  2451.   standard DOS packet drivers and therefore supports almost any PC
  2452.   network card.  Easy configuration of the bootrom under UNIX.  The
  2453.   bootrom can load a BOOTP vendor extension file in order to support
  2454.   more space for tags according to ``''.  Using the bootrom menu support
  2455.   it's possible to optionally boot different operating systems.  Even if
  2456.   there is a hard disk installed in the client computer, the bootrom can
  2457.   be used as a boot manager, since it also allows booting from any
  2458.   partition.  Cross-gateway booting Bootrom runs on any 80x86 processor
  2459.   but is optimized for the 386+.  Able to boot different operating
  2460.   system. Currently supported are Linux and MS-DOS.
  2461.  
  2462.  
  2463.   8.2.4.  Installation
  2464.  
  2465.   See the file ``'' for installation instructions. If you have any
  2466.   problems installing or running the programs see the file ``''.
  2467.  
  2468.  
  2469.   8.2.5.  Mailing list
  2470.  
  2471.   There exists a mailing list devoted to network booting. To subscribe
  2472.   simply send a mail with the line
  2473.  
  2474.   subscribe netboot
  2475.  
  2476.   in it's body to majordomo@baghira.han.de
  2477.  
  2478.   The subject in the mail header doesn't matter. This mailing list is
  2479.   intended to be a general discussion forum about any aspect of network
  2480.   booting. Any new versions of this Netboot package will also get
  2481.   announced on that mailing list. After subscribing to it, you can send
  2482.   messages into the list by writing a mail to netboot@baghira.han.de.
  2483.  
  2484.  
  2485.   8.2.6.  Disclaimer
  2486.  
  2487.   The software in this package heavily interacts with hardware and
  2488.   software not only on the local system, but also on the boot server.
  2489.   Use it at your own risk. I cannot be held responsible for any damage
  2490.   done by this software.
  2491.  
  2492.   8.3.  Download Netboot
  2493.  
  2494.   You can download netboot version 0.9 from
  2495.   <http://www.han.de/~gero/netboot/files/netboot-0.9.0e.tar.gz> and
  2496.   netboot version 0.8.1 from
  2497.   <http://www.han.de/~gero/netboot/english/download.html>
  2498.  
  2499.   8.4.  Netboot useful links
  2500.  
  2501.   Netboot mailing list archive is at
  2502.   <http://www.han.de/~gero/netboot/archive/maillist.html>
  2503.  
  2504.  
  2505.   ╖  3com drivers at  <http://support.3com.com/infodeli/tools/nic>
  2506.  
  2507.   ╖  Accton drivers at here
  2508.      <http://www.accton.com/accton/drivers/adapter.html>
  2509.   ╖  Artisoft <http://www.artisoft.com>
  2510.  
  2511.   ╖  CNET <http://www.cnet.com.tw>
  2512.  
  2513.   ╖  Compaq <http://www.compaq.com/support/networking>
  2514.  
  2515.   ╖  D-Link <http://www.dlink.com>
  2516.  
  2517.   ╖  Microdyne <http://www.mcdy.com/marketin/prodman/prodcat.htm>
  2518.  
  2519.   ╖  Many NE2000 PCI cards are based on Realtek chipsets. Get drivers
  2520.      here <http://www.realtek.com.tw/cn/driver/driver.htm>
  2521.  
  2522.   ╖  Standard Microsystems Corp <http://www.smc.com/support.html>
  2523.  
  2524.   ╖  Surecom <http://www.sure-com.net>
  2525.  
  2526.   ╖  Thomas Conrad corp
  2527.      <http://www.compaq.com/support/networking/OutOfProduction.html>
  2528.  
  2529.   ╖  Winbond <http://www.winbond.com.tw>
  2530.  
  2531.   ╖  Xircom <http://www.xircom.com>
  2532.  
  2533.  
  2534.  
  2535.   ╖  Webopaedia page <http://www.sandybay.com/pc-
  2536.      web/network_interface_card_NIC.htm> on network cards
  2537.  
  2538.   ╖  Jargon's driver page
  2539.      <http://www.evitech.fi/~jarnomn/files/drivers/net_d.html> with many
  2540.      drivers for older network cards.
  2541.  
  2542.   ╖  Etherboot <http://www.slug.org.au/etherboot/> This is a project
  2543.      similar to Netbot but based on the BSD bootrom code.
  2544.  
  2545.   ╖  How to make an X Window Terminal
  2546.      <http://www.menet.umn.edu/~kaszeta/unix/xterminal/index.html> out
  2547.      of your old or outdated PC.
  2548.  
  2549.   ╖  List of jumper settings <http://www.slug.org.au/NIC/index.html> for
  2550.      various network cards. This page also contains many other good
  2551.      links.
  2552.  
  2553.   ╖  Freefire <http://sites.inka.de/lina/freefire-l/tools.html> is the
  2554.      home page of the Freefire project, which lists many resources for
  2555.      network security issues.
  2556.  
  2557.   8.5.  RFC 951
  2558.  
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.   Network Working Group                   Bill Croft (Stanford University)
  2576.   Request for Comments: 951                John Gilmore (Sun Microsystems)
  2577.                                                             September 1985
  2578.  
  2579.                          BOOTSTRAP PROTOCOL (BOOTP)
  2580.  
  2581.  
  2582.   1. Status of this Memo
  2583.  
  2584.      This RFC suggests a proposed protocol for the ARPA-Internet
  2585.      community, and requests discussion and suggestions for improvements.
  2586.      Distribution of this memo is unlimited.
  2587.  
  2588.   2. Overview
  2589.  
  2590.      This RFC describes an IP/UDP bootstrap protocol (BOOTP) which allows
  2591.      a diskless client machine to discover its own IP address, the address
  2592.      of a server host, and the name of a file to be loaded into memory and
  2593.      executed.  The bootstrap operation can be thought of as consisting of
  2594.      TWO PHASES.  This RFC describes the first phase, which could be
  2595.      labeled 'address determination and bootfile selection'.  After this
  2596.      address and filename information is obtained, control passes to the
  2597.      second phase of the bootstrap where a file transfer occurs.  The file
  2598.      transfer will typically use the TFTP protocol [9], since it is
  2599.      intended that both phases reside in PROM on the client.  However
  2600.      BOOTP could also work with other protocols such as SFTP [3] or
  2601.      FTP [6].
  2602.  
  2603.      We suggest that the client's PROM software provide a way to do a
  2604.      complete bootstrap without 'user' interaction.  This is the type of
  2605.      boot that would occur during an unattended power-up.  A mechanism
  2606.      should be provided for the user to manually supply the necessary
  2607.      address and filename information to bypass the BOOTP protocol and
  2608.      enter the file transfer phase directly.  If non-volatile storage is
  2609.      available, we suggest keeping default settings there and bypassing
  2610.      the BOOTP protocol unless these settings cause the file transfer
  2611.      phase to fail.  If the cached information fails, the bootstrap should
  2612.      fall back to phase 1 and use BOOTP.
  2613.  
  2614.      Here is a brief outline of the protocol:
  2615.  
  2616.         1. A single packet exchange is performed.  Timeouts are used to
  2617.         retransmit until a reply is received.  The same packet field
  2618.         layout is used in both directions.  Fixed length fields of maximum
  2619.         reasonable length are used to simplify structure definition and
  2620.         parsing.
  2621.  
  2622.         2. An 'opcode' field exists with two values.  The client
  2623.         broadcasts a 'bootrequest' packet.  The server then answers with a
  2624.         'bootreply' packet.  The bootrequest contains the client's
  2625.         hardware address and its IP address, if known.
  2626.  
  2627.  
  2628.   Croft & Gilmore                                                 [Page 1]
  2629.  
  2630.  
  2631.   RFC 951                                                   September 1985
  2632.   Bootstrap Protocol
  2633.  
  2634.  
  2635.         3. The request can optionally contain the name of the server the
  2636.         client wishes to respond.  This is so the client can force the
  2637.         boot to occur from a specific host (e.g. if multiple versions of
  2638.         the same bootfile exist or if the server is in a far distant
  2639.         net/domain).  The client does not have to deal with name / domain
  2640.         services; instead this function is pushed off to the BOOTP server.
  2641.         4. The request can optionally contain the 'generic' filename to be
  2642.         booted.  For example 'unix' or 'ethertip'.  When the server sends
  2643.         the bootreply, it replaces this field with the fully qualified
  2644.         path name of the appropriate boot file.  In determining this name,
  2645.         the server may consult his own database correlating the client's
  2646.         address and filename request, with a particular boot file
  2647.         customized for that client.  If the bootrequest filename is a null
  2648.         string, then the server returns a filename field indicating the
  2649.         'default' file to be loaded for that client.
  2650.  
  2651.         5. In the case of clients who do not know their IP addresses, the
  2652.         server must also have a database relating hardware address to IP
  2653.         address.  This client IP address is then placed into a field in
  2654.         the bootreply.
  2655.  
  2656.         6. Certain network topologies (such as Stanford's) may be such
  2657.         that a given physical cable does not have a TFTP server directly
  2658.         attached to it (e.g. all the gateways and hosts on a certain cable
  2659.         may be diskless).  With the cooperation of neighboring gateways,
  2660.         BOOTP can allow clients to boot off of servers several hops away,
  2661.         through these gateways.  See the section 'Booting Through
  2662.         Gateways' below.  This part of the protocol requires no special
  2663.         action on the part of the client.  Implementation is optional and
  2664.         requires a small amount of additional code in gateways and
  2665.         servers.
  2666.  
  2667.   3. Packet Format
  2668.  
  2669.      All numbers shown are decimal, unless indicated otherwise.  The BOOTP
  2670.      packet is enclosed in a standard IP [8] UDP [7] datagram.  For
  2671.      simplicity it is assumed that the BOOTP packet is never fragmented.
  2672.      Any numeric fields shown are packed in 'standard network byte order',
  2673.      i.e. high order bits are sent first.
  2674.  
  2675.      In the IP header of a bootrequest, the client fills in its own IP
  2676.      source address if known, otherwise zero.  When the server address is
  2677.      unknown, the IP destination address will be the 'broadcast address'
  2678.      255.255.255.255.  This address means 'broadcast on the local cable,
  2679.      (I don't know my net number)' [4].
  2680.  
  2681.  
  2682.  
  2683.   Croft & Gilmore                                                 [Page 2]
  2684.  
  2685.  
  2686.   RFC 951                                                   September 1985
  2687.   Bootstrap Protocol
  2688.  
  2689.  
  2690.      The UDP header contains source and destination port numbers.  The
  2691.      BOOTP protocol uses two reserved port numbers, 'BOOTP client' (68)
  2692.      and 'BOOTP server' (67).  The client sends requests using 'BOOTP
  2693.      server' as the destination port; this is usually a broadcast.  The
  2694.      server sends replies using 'BOOTP client' as the destination port;
  2695.      depending on the kernel or driver facilities in the server, this may
  2696.      or may not be a broadcast (this is explained further in the section
  2697.      titled 'Chicken/Egg issues' below).  The reason TWO reserved ports
  2698.      are used, is to avoid 'waking up' and scheduling the BOOTP server
  2699.      daemons, when a bootreply must be broadcast to a client.  Since the
  2700.      server and other hosts won't be listening on the 'BOOTP client' port,
  2701.      any such incoming broadcasts will be filtered out at the kernel
  2702.      level.  We could not simply allow the client to pick a 'random' port
  2703.      number for the UDP source port field; since the server reply may be
  2704.      broadcast, a randomly chosen port number could confuse other hosts
  2705.      that happened to be listening on that port.
  2706.  
  2707.      The UDP length field is set to the length of the UDP plus BOOTP
  2708.      portions of the packet.  The UDP checksum field can be set to zero by
  2709.      the client (or server) if desired, to avoid this extra overhead in a
  2710.      PROM implementation.  In the 'Packet Processing' section below the
  2711.      phrase '[UDP checksum.]' is used whenever the checksum might be
  2712.      verified/computed.
  2713.  
  2714.         FIELD   BYTES   DESCRIPTION
  2715.         -----   -----   -----------
  2716.  
  2717.            op      1       packet op code / message type.
  2718.                            1 = BOOTREQUEST, 2 = BOOTREPLY
  2719.  
  2720.            htype   1       hardware address type,
  2721.                            see ARP section in "Assigned Numbers" RFC.
  2722.                            '1' = 10mb ethernet
  2723.  
  2724.            hlen    1       hardware address length
  2725.                            (eg '6' for 10mb ethernet).
  2726.  
  2727.            hops    1       client sets to zero,
  2728.                            optionally used by gateways
  2729.                            in cross-gateway booting.
  2730.  
  2731.            xid     4       transaction ID, a random number,
  2732.                            used to match this boot request with the
  2733.                            responses it generates.
  2734.  
  2735.            secs    2       filled in by client, seconds elapsed since
  2736.                            client started trying to boot.
  2737.  
  2738.  
  2739.   Croft & Gilmore                                                 [Page 3]
  2740.  
  2741.  
  2742.   RFC 951                                                   September 1985
  2743.   Bootstrap Protocol
  2744.  
  2745.  
  2746.            --      2       unused
  2747.  
  2748.            ciaddr  4       client IP address;
  2749.                            filled in by client in bootrequest if known.
  2750.  
  2751.            yiaddr  4       'your' (client) IP address;
  2752.                            filled by server if client doesn't
  2753.                            know its own address (ciaddr was 0).
  2754.  
  2755.            siaddr  4       server IP address;
  2756.                            returned in bootreply by server.
  2757.  
  2758.            giaddr  4       gateway IP address,
  2759.                            used in optional cross-gateway booting.
  2760.  
  2761.            chaddr  16      client hardware address,
  2762.                            filled in by client.
  2763.  
  2764.            sname   64      optional server host name,
  2765.                            null terminated string.
  2766.  
  2767.            file    128     boot file name, null terminated string;
  2768.                            'generic' name or null in bootrequest,
  2769.                            fully qualified directory-path
  2770.                            name in bootreply.
  2771.  
  2772.            vend    64      optional vendor-specific area,
  2773.                            e.g. could be hardware type/serial on request,
  2774.                            or 'capability' / remote file system handle
  2775.                            on reply.  This info may be set aside for use
  2776.                            by a third phase bootstrap or kernel.
  2777.  
  2778.   4. Chicken / Egg Issues
  2779.  
  2780.      How can the server send an IP datagram to the client, if the client
  2781.      doesnt know its own IP address (yet)?  Whenever a bootreply is being
  2782.      sent, the transmitting machine performs the following operations:
  2783.  
  2784.         1. If the client knows its own IP address ('ciaddr' field is
  2785.         nonzero), then the IP can be sent 'as normal', since the client
  2786.         will respond to ARPs [5].
  2787.  
  2788.         2. If the client does not yet know its IP address (ciaddr zero),
  2789.         then the client cannot respond to ARPs sent by the transmitter of
  2790.         the bootreply.  There are two options:
  2791.  
  2792.            a. If the transmitter has the necessary kernel or driver hooks
  2793.  
  2794.  
  2795.   Croft & Gilmore                                                 [Page 4]
  2796.  
  2797.  
  2798.   RFC 951                                                   September 1985
  2799.   Bootstrap Protocol
  2800.  
  2801.  
  2802.            to 'manually' construct an ARP address cache entry, then it can
  2803.            fill in an entry using the 'chaddr' and 'yiaddr' fields.  Of
  2804.            course, this entry should have a timeout on it, just like any
  2805.            other entry made by the normal ARP code itself.  The
  2806.            transmitter of the bootreply can then simply send the bootreply
  2807.            to the client's IP address.  UNIX (4.2 BSD) has this
  2808.            capability.
  2809.  
  2810.            b. If the transmitter lacks these kernel hooks, it can simply
  2811.            send the bootreply to the IP broadcast address on the
  2812.            appropriate interface.  This is only one additional broadcast
  2813.            over the previous case.
  2814.  
  2815.   5. Client Use of ARP
  2816.  
  2817.      The client PROM must contain a simple implementation of ARP, e.g. the
  2818.      address cache could be just one entry in size.  This will allow a
  2819.      second-phase-only boot (TFTP) to be performed when the client knows
  2820.      the IP addresses and bootfile name.
  2821.  
  2822.      Any time the client is expecting to receive a TFTP or BOOTP reply, it
  2823.      should be prepared to answer an ARP request for its own IP to
  2824.      hardware address mapping (if known).
  2825.  
  2826.      Since the bootreply will contain (in the hardware encapsulation) the
  2827.      hardware source address of the server/gateway, the client MAY be able
  2828.      to avoid sending an ARP request for the server/gateway IP address to
  2829.      be used in the following TFTP phase.  However this should be treated
  2830.      only as a special case, since it is desirable to still allow a
  2831.      second-phase-only boot as described above.
  2832.  
  2833.   6. Comparison to RARP
  2834.  
  2835.      An earlier protocol, Reverse Address Resolution Protocol (RARP) [1]
  2836.      was proposed to allow a client to determine its IP address, given
  2837.      that it knew its hardware address.  However RARP had the disadvantage
  2838.      that it was a hardware link level protocol (not IP/UDP based).  This
  2839.      means that RARP could only be implemented on hosts containing special
  2840.      kernel or driver modifications to access these 'raw' packets.  Since
  2841.      there are many network kernels existent now, with each source
  2842.      maintained by different organizations, a boot protocol that does not
  2843.      require kernel modifications is a decided advantage.
  2844.  
  2845.      BOOTP provides this hardware to IP address lookup function, in
  2846.      addition to the other useful features described in the sections
  2847.      above.
  2848.  
  2849.  
  2850.  
  2851.   Croft & Gilmore                                                 [Page 5]
  2852.  
  2853.  
  2854.   RFC 951                                                   September 1985
  2855.   Bootstrap Protocol
  2856.  
  2857.  
  2858.   7. Packet Processing
  2859.  
  2860.      7.1. Client Transmission
  2861.  
  2862.         Before setting up the packet for the first time, it is a good idea
  2863.         to clear the entire packet buffer to all zeros; this will place
  2864.         all fields in their default state.  The client then creates a
  2865.         packet with the following fields.
  2866.  
  2867.         The IP destination address is set to 255.255.255.255.  (the
  2868.         broadcast address) or to the server's IP address (if known).  The
  2869.         IP source address and 'ciaddr' are set to the client's IP address
  2870.         if known, else 0.  The UDP header is set with the proper length;
  2871.         source port = 'BOOTP client' port destination port = 'BOOTP
  2872.         server' port.
  2873.  
  2874.         'op' is set to '1', BOOTREQUEST.  'htype' is set to the hardware
  2875.         address type as assigned in the ARP section of the "Assigned
  2876.         Numbers" RFC. 'hlen' is set to the length of the hardware address,
  2877.         e.g. '6' for 10mb ethernet.
  2878.  
  2879.         'xid' is set to a 'random' transaction id.  'secs' is set to the
  2880.         number of seconds that have elapsed since the client has started
  2881.         booting.  This will let the servers know how long a client has
  2882.         been trying.  As the number gets larger, certain servers may feel
  2883.         more 'sympathetic' towards a client they don't normally service.
  2884.         If a client lacks a suitable clock, it could construct a rough
  2885.         estimate using a loop timer.  Or it could choose to simply send
  2886.         this field as always a fixed value, say 100 seconds.
  2887.  
  2888.         If the client knows its IP address, 'ciaddr' (and the IP source
  2889.         address) are set to this value.  'chaddr' is filled in with the
  2890.         client's hardware address.
  2891.  
  2892.         If the client wishes to restrict booting to a particular server
  2893.         name, it may place a null-terminated string in 'sname'.  The name
  2894.         used should be any of the allowable names or nicknames of the
  2895.         desired host.
  2896.  
  2897.         The client has several options for filling the 'file' name field.
  2898.         If left null, the meaning is 'I want to boot the default file for
  2899.         my machine'.  A null file name can also mean 'I am only interested
  2900.         in finding out client/server/gateway IP addresses, I dont care
  2901.         about file names'.
  2902.  
  2903.         The field can also be a 'generic' name such as 'unix' or
  2904.  
  2905.   Croft & Gilmore                                                 [Page 6]
  2906.  
  2907.  
  2908.   RFC 951                                                   September 1985
  2909.   Bootstrap Protocol
  2910.  
  2911.  
  2912.         'gateway'; this means 'boot the named program configured for my
  2913.         machine'.  Finally the field can be a fully directory qualified
  2914.         path name.
  2915.  
  2916.         The 'vend' field can be filled in by the client with
  2917.         vendor-specific strings or structures.  For example the machine
  2918.         hardware type or serial number may be placed here.  However the
  2919.         operation of the BOOTP server should not DEPEND on this
  2920.         information existing.
  2921.  
  2922.         If the 'vend' field is used, it is recommended that a 4 byte
  2923.         'magic number' be the first item within 'vend'.  This lets a
  2924.         server determine what kind of information it is seeing in this
  2925.         field.  Numbers can be assigned by the usual 'magic number'
  2926.         process --you pick one and it's magic.  A different magic number
  2927.         could be used for bootreply's than bootrequest's to allow the
  2928.         client to take special action with the reply information.
  2929.  
  2930.         [UDP checksum.]
  2931.  
  2932.      7.2. Client Retransmission Strategy
  2933.  
  2934.         If no reply is received for a certain length of time, the client
  2935.         should retransmit the request.  The time interval must be chosen
  2936.         carefully so as not to flood the network.  Consider the case of a
  2937.         cable containing 100 machines that are just coming up after a
  2938.         power failure.  Simply retransmitting the request every four
  2939.         seconds will inundate the net.
  2940.  
  2941.         As a possible strategy, you might consider backing off
  2942.         exponentially, similar to the way ethernet backs off on a
  2943.         collision.  So for example if the first packet is at time 0:00,
  2944.         the second would be at :04, then :08, then :16, then :32, then
  2945.         :64.  You should also randomize each time; this would be done
  2946.         similar to the ethernet specification by starting with a mask and
  2947.         'and'ing that with with a random number to get the first backoff.
  2948.         On each succeeding backoff, the mask is increased in length by one
  2949.         bit.  This doubles the average delay on each backoff.
  2950.  
  2951.         After the 'average' backoff reaches about 60 seconds, it should be
  2952.         increased no further, but still randomized.
  2953.  
  2954.         Before each retransmission, the client should update the 'secs'
  2955.         field. [UDP checksum.]
  2956.  
  2957.  
  2958.  
  2959.  
  2960.  
  2961.   Croft & Gilmore                                                 [Page 7]
  2962.  
  2963.  
  2964.   RFC 951                                                   September 1985
  2965.   Bootstrap Protocol
  2966.  
  2967.  
  2968.      7.3. Server Receives BOOTREQUEST
  2969.  
  2970.         [UDP checksum.]  If the UDP destination port does not match the
  2971.         'BOOTP server' port, discard the packet.
  2972.  
  2973.         If the server name field (sname) is null (no particular server
  2974.         specified), or sname is specified and matches our name or
  2975.         nickname, then continue with packet processing.
  2976.  
  2977.         If the sname field is specified, but does not match 'us', then
  2978.         there are several options:
  2979.  
  2980.            1. You may choose to simply discard this packet.
  2981.  
  2982.            2. If a name lookup on sname shows it to be on this same cable,
  2983.            discard the packet.
  2984.  
  2985.            3. If sname is on a different net, you may choose to forward
  2986.            the packet to that address.  If so, check the 'giaddr' (gateway
  2987.            address) field.  If 'giaddr' is zero, fill it in with my
  2988.            address or the address of a gateway that can be used to get to
  2989.            that net.  Then forward the packet.
  2990.  
  2991.         If the client IP address (ciaddr) is zero, then the client does
  2992.         not know its own IP address.  Attempt to lookup the client
  2993.         hardware address (chaddr, hlen, htype) in our database.  If no
  2994.         match is found, discard the packet.  Otherwise we now have an IP
  2995.         address for this client; fill it into the 'yiaddr' (your IP
  2996.         address) field.
  2997.  
  2998.         We now check the boot file name field (file).  The field will be
  2999.         null if the client is not interested in filenames, or wants the
  3000.         default bootfile.  If the field is non-null, it is used as a
  3001.         lookup key in a database, along with the client's IP address.  If
  3002.         there is a default file or generic file (possibly indexed by the
  3003.         client address) or a fully-specified path name that matches, then
  3004.         replace the 'file' field with the fully-specified path name of the
  3005.         selected boot file.  If the field is non-null and no match was
  3006.         found, then the client is asking for a file we dont have; discard
  3007.         the packet, perhaps some other BOOTP server will have it.
  3008.  
  3009.         The 'vend' vendor-specific data field should now be checked and if
  3010.         a recognized type of data is provided, client-specific actions
  3011.         should be taken, and a response placed in the 'vend' data field of
  3012.         the reply packet.  For example, a workstation client could provide
  3013.  
  3014.  
  3015.  
  3016.  
  3017.   Croft & Gilmore                                                 [Page 8]
  3018.  
  3019.  
  3020.   RFC 951                                                   September 1985
  3021.   Bootstrap Protocol
  3022.  
  3023.  
  3024.         an authentication key and receive from the server a capability for
  3025.         remote file access, or a set of configuration options, which can
  3026.         be passed to the operating system that will shortly be booted in.
  3027.  
  3028.         Place my (server) IP address in the 'siaddr' field.  Set the 'op'
  3029.         field to BOOTREPLY.  The UDP destination port is set to 'BOOTP
  3030.         client'.  If the client address 'ciaddr' is nonzero, send the
  3031.         packet there; else if the gateway address 'giaddr' is nonzero, set
  3032.         the UDP destination port to 'BOOTP server' and send the packet to
  3033.         'giaddr'; else the client is on one of our cables but it doesnt
  3034.         know its own IP address yet --use a method described in the 'Egg'
  3035.         section above to send it to the client. If 'Egg' is used and we
  3036.         have multiple interfaces on this host, use the 'yiaddr' (your IP
  3037.         address) field to figure out which net (cable/interface) to send
  3038.         the packet to.  [UDP checksum.]
  3039.  
  3040.      7.4. Server/Gateway Receives BOOTREPLY
  3041.  
  3042.         [UDP checksum.]  If 'yiaddr' (your [the client's] IP address)
  3043.         refers to one of our cables, use one of the 'Egg' methods above to
  3044.         forward it to the client.  Be sure to send it to the 'BOOTP
  3045.         client' UDP destination port.
  3046.  
  3047.      7.5. Client Reception
  3048.  
  3049.         Don't forget to process ARP requests for my own IP address (if I
  3050.         know it).  [UDP checksum.]  The client should discard incoming
  3051.         packets that: are not IP/UDPs addressed to the boot port; are not
  3052.         BOOTREPLYs; do not match my IP address (if I know it) or my
  3053.         hardware address; do not match my transaction id.  Otherwise we
  3054.         have received a successful reply. 'yiaddr' will contain my IP
  3055.         address, if I didnt know it before.  'file' is the name of the
  3056.         file name to TFTP 'read request'.  The server address is in
  3057.         'siaddr'.  If 'giaddr' (gateway address) is nonzero, then the
  3058.         packets should be forwarded there first, in order to get to the
  3059.         server.
  3060.  
  3061.   8. Booting Through Gateways
  3062.  
  3063.      This part of the protocol is optional and requires some additional
  3064.      code in cooperating gateways and servers, but it allows cross-gateway
  3065.      booting.  This is mainly useful when gateways are diskless machines.
  3066.      Gateways containing disks (e.g. a UNIX machine acting as a gateway),
  3067.      might as well run their own BOOTP/TFTP servers.
  3068.  
  3069.      Gateways listening to broadcast BOOTREQUESTs may decide to forward or
  3070.      rebroadcast these requests 'when appropriate'.  For example, the
  3071.  
  3072.  
  3073.   Croft & Gilmore                                                 [Page 9]
  3074.  
  3075.  
  3076.   RFC 951                                                   September 1985
  3077.   Bootstrap Protocol
  3078.  
  3079.  
  3080.      gateway could have, as part of his configuration tables, a list of
  3081.      other networks or hosts to receive a copy of any broadcast
  3082.      BOOTREQUESTs.  Even though a 'hops' field exists, it is a poor idea
  3083.      to simply globally rebroadcast the requests, since broadcast loops
  3084.      will almost certainly occur.
  3085.  
  3086.      The forwarding could begin immediately, or wait until the 'secs'
  3087.      (seconds client has been trying) field passes a certain threshold.
  3088.  
  3089.      If a gateway does decide to forward the request, it should look at
  3090.      the 'giaddr' (gateway IP address) field.  If zero, it should plug its
  3091.      own IP address (on the receiving cable) into this field.  It may also
  3092.      use the 'hops' field to optionally control how far the packet is
  3093.      reforwarded. Hops should be incremented on each forwarding.  For
  3094.      example, if hops passes '3', the packet should probably be discarded.
  3095.      [UDP checksum.]
  3096.  
  3097.      Here we have recommended placing this special forwarding function in
  3098.      the gateways.  But that does not have to be the case.  As long as
  3099.      some 'BOOTP forwarding agent' exists on the net with the booting
  3100.      client, the agent can do the forwarding when appropriate.  Thus this
  3101.      service may or may not be co-located with the gateway.
  3102.  
  3103.      In the case of a forwarding agent not located in the gateway, the
  3104.      agent could save himself some work by plugging the broadcast address
  3105.      of the interface receiving the bootrequest into the 'giaddr' field.
  3106.      Thus the reply would get forwarded using normal gateways, not
  3107.      involving the forwarding agent.  Of course the disadvantage here is
  3108.      that you lose the ability to use the 'Egg' non-broadcast method of
  3109.      sending the reply, causing extra overhead for every host on the
  3110.      client cable.
  3111.  
  3112.   9. Sample BOOTP Server Database
  3113.  
  3114.      As a suggestion, we show a sample text file database that the BOOTP
  3115.      server program might use.  The database has two sections, delimited
  3116.      by a line containing an percent in column 1.  The first section
  3117.      contains a 'default directory' and mappings from generic names to
  3118.      directory/pathnames.  The first generic name in this section is the
  3119.      'default file' you get when the bootrequest contains a null 'file'
  3120.      string.
  3121.  
  3122.      The second section maps hardware addresstype/address into an
  3123.      ipaddress. Optionally you can also overide the default generic name
  3124.      by supplying a ipaddress specific genericname.  A 'suffix' item is
  3125.      also an option; if supplied, any generic names specified by the
  3126.      client will be accessed by first appending 'suffix' to the 'pathname'
  3127.  
  3128.  
  3129.   Croft & Gilmore                                                [Page 10]
  3130.  
  3131.  
  3132.   RFC 951                                                   September 1985
  3133.   Bootstrap Protocol
  3134.  
  3135.  
  3136.      appropriate to that generic name.  If that file is not found, then
  3137.      the plain 'pathname' will be tried.  This 'suffix' option allows a
  3138.      whole set of custom generics to be setup without a lot of effort.
  3139.      Below is shown the general format; fields are delimited by one or
  3140.      more spaces or tabs; trailing empty fields may be omitted; blank
  3141.      lines and lines beginning with '#' are ignored.
  3142.  
  3143.         # comment line
  3144.  
  3145.         homedirectory
  3146.         genericname1    pathname1
  3147.         genericname2    pathname2
  3148.         ...
  3149.  
  3150.         % end of generic names, start of address mappings
  3151.  
  3152.         hostname1 hardwaretype hardwareaddr1 ipaddr1 genericname suffix
  3153.         hostname2 hardwaretype hardwareaddr2 ipaddr2 genericname suffix
  3154.         ...
  3155.  
  3156.      Here is a specific example.  Note the 'hardwaretype' number is the
  3157.      same as that shown in the ARP section of the 'Assigned Numbers' RFC.
  3158.      The 'hardwaretype' and 'ipaddr' numbers are in decimal;
  3159.      'hardwareaddr' is in hex.
  3160.  
  3161.         # last updated by smith
  3162.  
  3163.         /usr/boot
  3164.         vmunix          vmunix
  3165.         tip             ethertip
  3166.         watch           /usr/diag/etherwatch
  3167.         gate            gate.
  3168.  
  3169.         % end of generic names, start of address mappings
  3170.  
  3171.         hamilton        1 02.60.8c.06.34.98     36.19.0.5
  3172.         burr            1 02.60.8c.34.11.78     36.44.0.12
  3173.         101-gateway     1 02.60.8c.23.ab.35     36.44.0.32      gate 101
  3174.         mjh-gateway     1 02.60.8c.12.32.bc     36.42.0.64      gate mjh
  3175.         welch-tipa      1 02.60.8c.22.65.32     36.47.0.14      tip
  3176.         welch-tipb      1 02.60.8c.12.15.c8     36.46.0.12      tip
  3177.  
  3178.      In the example above, if 'mjh-gateway' does a default boot, it will
  3179.      get the file '/usr/boot/gate.mjh'.
  3180.  
  3181.  
  3182.  
  3183.  
  3184.  
  3185.   Croft & Gilmore                                                [Page 11]
  3186.  
  3187.  
  3188.   RFC 951                                                   September 1985
  3189.   Bootstrap Protocol
  3190.  
  3191.  
  3192.   10. Acknowledgements
  3193.  
  3194.      Ross Finlayson (et. al.) produced two earlier RFC's discussing TFTP
  3195.      bootstraping [2] using RARP [1].
  3196.  
  3197.      We would also like to acknowledge the previous work and comments of
  3198.      Noel Chiappa, Bob Lyon, Jeff Mogul, Mark Lewis, and David Plummer.
  3199.  
  3200.   REFERENCES
  3201.  
  3202.      1.  Ross Finlayson, Timothy Mann, Jeffrey Mogul, Marvin Theimer.  A
  3203.          Reverse Address Resolution Protocol.  RFC 903, NIC, June, 1984.
  3204.  
  3205.      2.  Ross Finlayson.  Bootstrap Loading using TFTP.  RFC 906, NIC,
  3206.          June, 1984.
  3207.  
  3208.      3.  Mark Lottor.  Simple File Transfer Protocol.  RFC 913, NIC,
  3209.          September, 1984.
  3210.  
  3211.      4.  Jeffrey Mogul.  Broadcasting Internet Packets.  RFC 919, NIC,
  3212.          October, 1984.
  3213.  
  3214.      5.  David Plummer.  An Ethernet Address Resolution Protocol.  RFC
  3215.          826, NIC, September, 1982.
  3216.  
  3217.      6.  Jon Postel.  File Transfer Protocol.  RFC 765, NIC, June, 1980.
  3218.  
  3219.      7.  Jon Postel.  User Datagram Protocol.  RFC 768, NIC, August, 1980.
  3220.  
  3221.      8.  Jon Postel.  Internet Protocol.  RFC 791, NIC, September, 1981.
  3222.  
  3223.      9.  K. R. Sollins, Noel Chiappa.  The TFTP Protocol.  RFC 783, NIC,
  3224.          June, 1981.
  3225.  
  3226.  
  3227.   Croft & Gilmore                                                [Page 12]
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.   8.6.  RFC 1533
  3236.  
  3237.  
  3238.  
  3239.  
  3240.  
  3241.  
  3242.  
  3243.  
  3244.  
  3245.  
  3246.  
  3247.  
  3248.  
  3249.  
  3250.  
  3251.  
  3252.  
  3253.  
  3254.  
  3255.  
  3256.  
  3257.  
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.   Network Working Group                                       S. Alexander
  3302.   Request for Comments: 1533                      Lachman Technology, Inc.
  3303.   Obsoletes: 1497, 1395, 1084, 1048                               R. Droms
  3304.   Category: Standards Track                            Bucknell University
  3305.                                                               October 1993
  3306.  
  3307.  
  3308.                  DHCP Options and BOOTP Vendor Extensions
  3309.  
  3310.   Status of this Memo
  3311.  
  3312.      This RFC specifies an Internet standards track protocol for the
  3313.      Internet community, and requests discussion and suggestions for
  3314.      improvements.  Please refer to the current edition of the "Internet
  3315.      Official Protocol Standards" for the standardization state and status
  3316.      of this protocol.  Distribution of this memo is unlimited.
  3317.  
  3318.   Abstract
  3319.  
  3320.      The Dynamic Host Configuration Protocol (DHCP) [1] provides a
  3321.      framework for passing configuration information to hosts on a TCP/IP
  3322.      network.  Configuration parameters and other control information are
  3323.      carried in tagged data items that are stored in the "options" field
  3324.      of the DHCP message.  The data items themselves are also called
  3325.      "options."
  3326.  
  3327.      This document specifies the current set of DHCP options.  This
  3328.      document will be periodically updated as new options are defined.
  3329.       Each superseding document will include the entire current list of
  3330.      valid options.
  3331.  
  3332.      All of the vendor information extensions defined in RFC 1497 [2] may
  3333.      be used as DHCP options.  The definitions given in RFC 1497 are
  3334.      included in this document, which supersedes RFC 1497.  All of the
  3335.      DHCP options defined in this document, except for those specific to
  3336.      DHCP as defined in section 9, may be used as BOOTP vendor information
  3337.      extensions.
  3338.  
  3339.   Table of Contents
  3340.  
  3341.       1.  Introduction ..............................................  2
  3342.       2.  BOOTP Extension/DHCP Option Field Format ..................  2
  3343.       3.  RFC 1497 Vendor Extensions ................................  3
  3344.       4.  IP Layer Parameters per Host .............................. 10
  3345.       5.  IP Layer Parameters per Interface ........................  13
  3346.       6.  Link Layer Parameters per Interface ....................... 16
  3347.       7.  TCP Parameters ............................................ 17
  3348.       8.  Application and Service Parameters ........................ 18
  3349.  
  3350.  
  3351.  
  3352.   Alexander & Droms                                               [Page 1]
  3353.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3354.  
  3355.  
  3356.       9.  DHCP Extensions ........................................... 23
  3357.      10.  Extensions ................................................ 27
  3358.      11.  Acknowledgements .......................................... 28
  3359.      12.  References ................................................ 28
  3360.      13.  Security Considerations ................................... 19
  3361.      14.  Authors' Addresses ........................................ 30
  3362.  
  3363.   1. Introduction
  3364.  
  3365.      This document specifies options for use with both the Dynamic Host
  3366.      Configuration Protocol and the Bootstrap Protocol.
  3367.      The full description of DHCP packet formats may be found in the DHCP
  3368.      specification document [1], and the full description of BOOTP packet
  3369.      formats may be found in the BOOTP specification document [3].  This
  3370.      document defines the format of information in the last field of DHCP
  3371.      packets ('options') and of BOOTP packets ('vend').  The remainder of
  3372.      this section defines a generalized use of this area for giving
  3373.      information useful to a wide class of machines, operating systems and
  3374.      configurations. Sites with a single DHCP or BOOTP server that is
  3375.      shared among heterogeneous clients may choose to define other, site-
  3376.      specific formats for the use of the 'options' field.
  3377.  
  3378.      Section 2 of this memo describes the formats of DHCP options and
  3379.      BOOTP vendor extensions.  Section 3 describes options defined in
  3380.      previous documents for use with BOOTP (all may also be used with
  3381.      DHCP).  Sections 4-8 define new options intended for use with both
  3382.      DHCP and BOOTP. Section 9 defines options used only in DHCP.
  3383.  
  3384.      References further describing most of the options defined in sections
  3385.      2-6 can be found in section 12.  The use of the options defined in
  3386.      section 9 is described in the DHCP specification [1].
  3387.  
  3388.      Information on registering new options is contained in section 10.
  3389.  
  3390.   2. BOOTP Extension/DHCP Option Field Format
  3391.  
  3392.      DHCP options have the same format as the BOOTP "vendor extensions"
  3393.      defined in RFC 1497 [2].  Options may be fixed length or variable
  3394.      length.  All options begin with a tag octet, which uniquely
  3395.      identifies the option.  Fixed-length options without data consist of
  3396.      only a tag octet.  Only options 0 and 255 are fixed length.  All
  3397.      other options are variable-length with a length octet following the
  3398.      tag octet.  The value of the length octet does not include the two
  3399.      octets specifying the tag and length.  The length octet is followed
  3400.      by "length" octets of data.  In the case of some variable-length
  3401.      options the length field is a constant but must still be specified.
  3402.  
  3403.  
  3404.  
  3405.  
  3406.   Alexander & Droms                                               [Page 2]
  3407.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3408.  
  3409.  
  3410.      Any options defined subsequent to this document should contain a
  3411.      length octet even if the length is fixed or zero.
  3412.  
  3413.      All multi-octet quantities are in network byte-order.
  3414.  
  3415.      When used with BOOTP, the first four octets of the vendor information
  3416.      field have been assigned to the "magic cookie" (as suggested in RFC
  3417.      951).  This field identifies the mode in which the succeeding data is
  3418.      to be interpreted.  The value of the magic cookie is the 4 octet
  3419.      dotted decimal 99.130.83.99 (or hexadecimal number 63.82.53.63) in
  3420.      network byte order.
  3421.  
  3422.      All of the "vendor extensions" defined in RFC 1497 are also DHCP
  3423.      options.
  3424.  
  3425.      Option codes 128 to 254 (decimal) are reserved for site-specific
  3426.      options.
  3427.  
  3428.      Except for the options in section 9, all options may be used with
  3429.      either DHCP or BOOTP.
  3430.  
  3431.      Many of these options have their default values specified in other
  3432.      documents.  In particular, RFC 1122 [4] specifies default values for
  3433.      most IP and TCP configuration parameters.
  3434.  
  3435.   3. RFC 1497 Vendor Extensions
  3436.  
  3437.      This section lists the vendor extensions as defined in RFC 1497.
  3438.      They are defined here for completeness.
  3439.  
  3440.   3.1. Pad Option
  3441.  
  3442.      The pad option can be used to cause subsequent fields to align on
  3443.      word boundaries.
  3444.  
  3445.      The code for the pad option is 0, and its length is 1 octet.
  3446.  
  3447.       Code
  3448.      +-----+
  3449.      |  0  |
  3450.      +-----+
  3451.  
  3452.  
  3453.  
  3454.  
  3455.  
  3456.  
  3457.  
  3458.  
  3459.  
  3460.  
  3461.   Alexander & Droms                                               [Page 3]
  3462.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3463.  
  3464.  
  3465.   3.2. End Option
  3466.  
  3467.      The end option marks the end of valid information in the vendor
  3468.      field.  Subsequent octets should be filled with pad options.
  3469.  
  3470.      The code for the end option is 255, and its length is 1 octet.
  3471.  
  3472.       Code
  3473.      +-----+
  3474.      | 255 |
  3475.      +-----+
  3476.  
  3477.   3.3. Subnet Mask
  3478.  
  3479.      The subnet mask option specifies the client's subnet mask as per RFC
  3480.      950 [5].
  3481.  
  3482.      If both the subnet mask and the router option are specified in a DHCP
  3483.      reply, the subnet mask option MUST be first.
  3484.  
  3485.      The code for the subnet mask option is 1, and its length is 4 octets.
  3486.  
  3487.       Code   Len        Subnet Mask
  3488.      +-----+-----+-----+-----+-----+-----+
  3489.      |  1  |  4  |  m1 |  m2 |  m3 |  m4 |
  3490.      +-----+-----+-----+-----+-----+-----+
  3491.  
  3492.   3.4. Time Offset
  3493.  
  3494.      The time offset field specifies the offset of the client's subnet in
  3495.      seconds from Coordinated Universal Time (UTC).  The offset is
  3496.      expressed as a signed 32-bit integer.
  3497.  
  3498.      The code for the time offset option is 2, and its length is 4 octets.
  3499.       Code   Len        Time Offset
  3500.      +-----+-----+-----+-----+-----+-----+
  3501.      |  2  |  4  |  n1 |  n2 |  n3 |  n4 |
  3502.      +-----+-----+-----+-----+-----+-----+
  3503.  
  3504.  
  3505.  
  3506.  
  3507.  
  3508.  
  3509.  
  3510.  
  3511.  
  3512.  
  3513.  
  3514.  
  3515.   Alexander & Droms                                               [Page 4]
  3516.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3517.  
  3518.  
  3519.   3.5. Router Option
  3520.  
  3521.      The router option specifies a list of IP addresses for routers on the
  3522.      client's subnet.  Routers SHOULD be listed in order of preference.
  3523.  
  3524.      The code for the router option is 3.  The minimum length for the
  3525.      router option is 4 octets, and the length MUST always be a multiple
  3526.      of 4.
  3527.  
  3528.       Code   Len         Address 1               Address 2
  3529.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3530.      |  3  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3531.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3532.  
  3533.   3.6. Time Server Option
  3534.  
  3535.      The time server option specifies a list of RFC 868 [6] time servers
  3536.      available to the client.  Servers SHOULD be listed in order of
  3537.      preference.
  3538.  
  3539.      The code for the time server option is 4.  The minimum length for
  3540.      this option is 4 octets, and the length MUST always be a multiple of
  3541.      4.
  3542.  
  3543.       Code   Len         Address 1               Address 2
  3544.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3545.      |  4  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3546.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3547.  
  3548.   3.7. Name Server Option
  3549.  
  3550.      The name server option specifies a list of IEN 116 [7] name servers
  3551.      available to the client.  Servers SHOULD be listed in order of
  3552.      preference.
  3553.  
  3554.      The code for the name server option is 5.  The minimum length for
  3555.      this option is 4 octets, and the length MUST always be a multiple of
  3556.      4.
  3557.  
  3558.       Code   Len         Address 1               Address 2
  3559.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3560.      |  5  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3561.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3562.  
  3563.  
  3564.  
  3565.   Alexander & Droms                                               [Page 5]
  3566.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3567.  
  3568.  
  3569.   3.8. Domain Name Server Option
  3570.  
  3571.      The domain name server option specifies a list of Domain Name System
  3572.      (STD 13, RFC 1035 [8]) name servers available to the client.  Servers
  3573.      SHOULD be listed in order of preference.
  3574.  
  3575.      The code for the domain name server option is 6.  The minimum length
  3576.      for this option is 4 octets, and the length MUST always be a multiple
  3577.      of 4.
  3578.  
  3579.       Code   Len         Address 1               Address 2
  3580.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3581.      |  6  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3582.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3583.  
  3584.   3.9. Log Server Option
  3585.  
  3586.      The log server option specifies a list of MIT-LCS UDP log servers
  3587.      available to the client.  Servers SHOULD be listed in order of
  3588.      preference.
  3589.  
  3590.      The code for the log server option is 7.  The minimum length for this
  3591.      option is 4 octets, and the length MUST always be a multiple of 4.
  3592.  
  3593.       Code   Len         Address 1               Address 2
  3594.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3595.      |  7  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3596.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3597.  
  3598.   3.10. Cookie Server Option
  3599.  
  3600.      The cookie server option specifies a list of RFC 865 [9] cookie
  3601.      servers available to the client.  Servers SHOULD be listed in order
  3602.      of preference.
  3603.  
  3604.      The code for the log server option is 8.  The minimum length for this
  3605.      option is 4 octets, and the length MUST always be a multiple of 4.
  3606.  
  3607.       Code   Len         Address 1               Address 2
  3608.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3609.      |  8  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3610.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3611.  
  3612.  
  3613.  
  3614.  
  3615.  
  3616.  
  3617.  
  3618.  
  3619.  
  3620.   Alexander & Droms                                               [Page 6]
  3621.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3622.  
  3623.  
  3624.   3.11. LPR Server Option
  3625.  
  3626.      The LPR server option specifies a list of RFC 1179 [10] line printer
  3627.      servers available to the client.  Servers SHOULD be listed in order
  3628.      of preference.
  3629.  
  3630.      The code for the LPR server option is 9.  The minimum length for this
  3631.      option is 4 octets, and the length MUST always be a multiple of 4.
  3632.  
  3633.       Code   Len         Address 1               Address 2
  3634.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3635.      |  9  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3636.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3637.  
  3638.   3.12. Impress Server Option
  3639.  
  3640.      The Impress server option specifies a list of Imagen Impress servers
  3641.      available to the client.  Servers SHOULD be listed in order of
  3642.      preference.
  3643.  
  3644.      The code for the Impress server option is 10.  The minimum length for
  3645.      this option is 4 octets, and the length MUST always be a multiple of
  3646.      4.
  3647.  
  3648.       Code   Len         Address 1               Address 2
  3649.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3650.      |  10 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3651.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3652.  
  3653.   3.13. Resource Location Server Option
  3654.  
  3655.      This option specifies a list of RFC 887 [11] Resource Location
  3656.      servers available to the client.  Servers SHOULD be listed in order
  3657.      of preference.
  3658.  
  3659.      The code for this option is 11.  The minimum length for this option
  3660.      is 4 octets, and the length MUST always be a multiple of 4.
  3661.  
  3662.       Code   Len         Address 1               Address 2
  3663.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3664.      |  11 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  3665.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3666.  
  3667.  
  3668.  
  3669.  
  3670.  
  3671.  
  3672.  
  3673.  
  3674.  
  3675.   Alexander & Droms                                               [Page 7]
  3676.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3677.  
  3678.  
  3679.   3.14. Host Name Option
  3680.  
  3681.      This option specifies the name of the client.  The name may or may
  3682.      not be qualified with the local domain name (see section 3.17 for the
  3683.      preferred way to retrieve the domain name).  See RFC 1035 for
  3684.      character set restrictions.
  3685.  
  3686.      The code for this option is 12, and its minimum length is 1.
  3687.  
  3688.       Code   Len                 Host Name
  3689.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3690.      |  12 |  n  |  h1 |  h2 |  h3 |  h4 |  h5 |  h6 |  ...
  3691.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  3692.  
  3693.   3.15. Boot File Size Option
  3694.  
  3695.      This option specifies the length in 512-octet blocks of the default
  3696.      boot image for the client.  The file length is specified as an
  3697.      unsigned 16-bit integer.
  3698.  
  3699.      The code for this option is 13, and its length is 2.
  3700.  
  3701.       Code   Len   File Size
  3702.      +-----+-----+-----+-----+
  3703.      |  13 |  2  |  l1 |  l2 |
  3704.      +-----+-----+-----+-----+
  3705.  
  3706.   3.16. Merit Dump File
  3707.  
  3708.      This option specifies the path-name of a file to which the client's
  3709.      core image should be dumped in the event the client crashes.  The
  3710.      path is formatted as a character string consisting of characters from
  3711.      the NVT ASCII character set.
  3712.  
  3713.      The code for this option is 14.  Its minimum length is 1.
  3714.  
  3715.       Code   Len      Dump File Pathname
  3716.      +-----+-----+-----+-----+-----+-----+---
  3717.      |  14 |  n  |  n1 |  n2 |  n3 |  n4 | ...
  3718.      +-----+-----+-----+-----+-----+-----+---
  3719.  
  3720.  
  3721.  
  3722.  
  3723.  
  3724.  
  3725.  
  3726.  
  3727.  
  3728.  
  3729.  
  3730.   Alexander & Droms                                               [Page 8]
  3731.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3732.  
  3733.  
  3734.   3.17. Domain Name
  3735.  
  3736.      This option specifies the domain name that client should use when
  3737.      resolving hostnames via the Domain Name System.
  3738.  
  3739.      The code for this option is 15.  Its minimum length is 1.
  3740.  
  3741.       Code   Len        Domain Name
  3742.      +-----+-----+-----+-----+-----+-----+--
  3743.      |  15 |  n  |  d1 |  d2 |  d3 |  d4 |  ...
  3744.      +-----+-----+-----+-----+-----+-----+--
  3745.  
  3746.   3.18. Swap Server
  3747.  
  3748.      This specifies the IP address of the client's swap server.
  3749.  
  3750.      The code for this option is 16 and its length is 4.
  3751.  
  3752.       Code   Len    Swap Server Address
  3753.      +-----+-----+-----+-----+-----+-----+
  3754.      |  16 |  n  |  a1 |  a2 |  a3 |  a4 |
  3755.      +-----+-----+-----+-----+-----+-----+
  3756.  
  3757.   3.19. Root Path
  3758.  
  3759.      This option specifies the path-name that contains the client's root
  3760.      disk.  The path is formatted as a character string consisting of
  3761.      characters from the NVT ASCII character set.
  3762.  
  3763.      The code for this option is 17.  Its minimum length is 1.
  3764.  
  3765.       Code   Len      Root Disk Pathname
  3766.      +-----+-----+-----+-----+-----+-----+---
  3767.      |  17 |  n  |  n1 |  n2 |  n3 |  n4 | ...
  3768.      +-----+-----+-----+-----+-----+-----+---
  3769.  
  3770.  
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  
  3776.  
  3777.  
  3778.  
  3779.  
  3780.  
  3781.  
  3782.  
  3783.  
  3784.  
  3785.   Alexander & Droms                                               [Page 9]
  3786.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3787.  
  3788.  
  3789.   3.20. Extensions Path
  3790.  
  3791.      A string to specify a file, retrievable via TFTP, which contains
  3792.      information which can be interpreted in the same way as the 64-octet
  3793.      vendor-extension field within the BOOTP response, with the following
  3794.      exceptions:
  3795.  
  3796.             - the length of the file is unconstrained;
  3797.             - all references to Tag 18 (i.e., instances of the
  3798.               BOOTP Extensions Path field) within the file are
  3799.               ignored.
  3800.  
  3801.      The code for this option is 18.  Its minimum length is 1.
  3802.  
  3803.       Code   Len      Extensions Pathname
  3804.      +-----+-----+-----+-----+-----+-----+---
  3805.      |  18 |  n  |  n1 |  n2 |  n3 |  n4 | ...
  3806.      +-----+-----+-----+-----+-----+-----+---
  3807.  
  3808.   4. IP Layer Parameters per Host
  3809.  
  3810.      This section details the options that affect the operation of the IP
  3811.      layer on a per-host basis.
  3812.  
  3813.   4.1. IP Forwarding Enable/Disable Option
  3814.  
  3815.      This option specifies whether the client should configure its IP
  3816.      layer for packet forwarding.  A value of 0 means disable IP
  3817.      forwarding, and a value of 1 means enable IP forwarding.
  3818.  
  3819.      The code for this option is 19, and its length is 1.
  3820.  
  3821.       Code   Len  Value
  3822.      +-----+-----+-----+
  3823.      |  19 |  1  | 0/1 |
  3824.      +-----+-----+-----+
  3825.  
  3826.  
  3827.  
  3828.  
  3829.   Alexander & Droms                                              [Page 10]
  3830.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3831.  
  3832.  
  3833.   4.2. Non-Local Source Routing Enable/Disable Option
  3834.  
  3835.      This option specifies whether the client should configure its IP
  3836.      layer to allow forwarding of datagrams with non-local source routes
  3837.      (see Section 3.3.5 of [4] for a discussion of this topic).  A value
  3838.      of 0 means disallow forwarding of such datagrams, and a value of 1
  3839.      means allow forwarding.
  3840.  
  3841.      The code for this option is 20, and its length is 1.
  3842.  
  3843.       Code   Len  Value
  3844.      +-----+-----+-----+
  3845.      |  20 |  1  | 0/1 |
  3846.      +-----+-----+-----+
  3847.  
  3848.   4.3. Policy Filter Option
  3849.  
  3850.      This option specifies policy filters for non-local source routing.
  3851.      The filters consist of a list of IP addresses and masks which specify
  3852.      destination/mask pairs with which to filter incoming source routes.
  3853.  
  3854.      Any source routed datagram whose next-hop address does not match one
  3855.      of the filters should be discarded by the client.
  3856.  
  3857.      See [4] for further information.
  3858.  
  3859.      The code for this option is 21.  The minimum length of this option is
  3860.      8, and the length MUST be a multiple of 8.
  3861.  
  3862.       Code   Len         Address 1                  Mask 1
  3863.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  3864.      |  21 |  n  |  a1 |  a2 |  a3 |  a4 |  m1 |  m2 |  m3 |  m4 |
  3865.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  3866.              Address 2                  Mask 2
  3867.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  3868.      |  a1 |  a2 |  a3 |  a4 |  m1 |  m2 |  m3 |  m4 | ...
  3869.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  3870.  
  3871.  
  3872.  
  3873.  
  3874.  
  3875.  
  3876.  
  3877.  
  3878.  
  3879.  
  3880.  
  3881.  
  3882.  
  3883.  
  3884.   Alexander & Droms                                              [Page 11]
  3885.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3886.  
  3887.  
  3888.   4.4. Maximum Datagram Reassembly Size
  3889.  
  3890.      This option specifies the maximum size datagram that the client
  3891.      should be prepared to reassemble.  The size is specified as a 16-bit
  3892.      unsigned integer.  The minimum value legal value is 576.
  3893.  
  3894.      The code for this option is 22, and its length is 2.
  3895.       Code   Len      Size
  3896.      +-----+-----+-----+-----+
  3897.      |  22 |  2  |  s1 |  s2 |
  3898.      +-----+-----+-----+-----+
  3899.  
  3900.   4.5. Default IP Time-to-live
  3901.  
  3902.      This option specifies the default time-to-live that the client should
  3903.      use on outgoing datagrams.  The TTL is specified as an octet with a
  3904.      value between 1 and 255.
  3905.  
  3906.      The code for this option is 23, and its length is 1.
  3907.  
  3908.       Code   Len   TTL
  3909.      +-----+-----+-----+
  3910.      |  23 |  1  | ttl |
  3911.      +-----+-----+-----+
  3912.  
  3913.   4.6. Path MTU Aging Timeout Option
  3914.  
  3915.      This option specifies the timeout (in seconds) to use when aging Path
  3916.      MTU values discovered by the mechanism defined in RFC 1191 [12].  The
  3917.      timeout is specified as a 32-bit unsigned integer.
  3918.  
  3919.      The code for this option is 24, and its length is 4.
  3920.  
  3921.       Code   Len           Timeout
  3922.      +-----+-----+-----+-----+-----+-----+
  3923.      |  24 |  4  |  t1 |  t2 |  t3 |  t4 |
  3924.      +-----+-----+-----+-----+-----+-----+
  3925.  
  3926.  
  3927.  
  3928.  
  3929.  
  3930.  
  3931.  
  3932.  
  3933.  
  3934.  
  3935.  
  3936.  
  3937.  
  3938.   Alexander & Droms                                              [Page 12]
  3939.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3940.  
  3941.  
  3942.   4.7. Path MTU Plateau Table Option
  3943.  
  3944.      This option specifies a table of MTU sizes to use when performing
  3945.      Path MTU Discovery as defined in RFC 1191.  The table is formatted as
  3946.      a list of 16-bit unsigned integers, ordered from smallest to largest.
  3947.      The minimum MTU value cannot be smaller than 68.
  3948.  
  3949.      The code for this option is 25.  Its minimum length is 2, and the
  3950.      length MUST be a multiple of 2.
  3951.  
  3952.       Code   Len     Size 1      Size 2
  3953.      +-----+-----+-----+-----+-----+-----+---
  3954.      |  25 |  n  |  s1 |  s2 |  s1 |  s2 | ...
  3955.      +-----+-----+-----+-----+-----+-----+---
  3956.  
  3957.   5. IP Layer Parameters per Interface
  3958.  
  3959.      This section details the options that affect the operation of the IP
  3960.      layer on a per-interface basis.  It is expected that a client can
  3961.      issue multiple requests, one per interface, in order to configure
  3962.      interfaces with their specific parameters.
  3963.  
  3964.   5.1. Interface MTU Option
  3965.  
  3966.      This option specifies the MTU to use on this interface.  The MTU is
  3967.      specified as a 16-bit unsigned integer.  The minimum legal value for
  3968.      the MTU is 68.
  3969.  
  3970.      The code for this option is 26, and its length is 2.
  3971.  
  3972.       Code   Len      MTU
  3973.      +-----+-----+-----+-----+
  3974.      |  26 |  2  |  m1 |  m2 |
  3975.      +-----+-----+-----+-----+
  3976.  
  3977.  
  3978.  
  3979.  
  3980.  
  3981.  
  3982.  
  3983.  
  3984.  
  3985.  
  3986.  
  3987.  
  3988.  
  3989.  
  3990.  
  3991.  
  3992.  
  3993.   Alexander & Droms                                              [Page 13]
  3994.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  3995.  
  3996.  
  3997.   5.2. All Subnets are Local Option
  3998.  
  3999.      This option specifies whether or not the client may assume that all
  4000.      subnets of the IP network to which the client is connected use the
  4001.      same MTU as the subnet of that network to which the client is
  4002.      directly connected.  A value of 1 indicates that all subnets share
  4003.      the same MTU.  A value of 0 means that the client should assume that
  4004.      some subnets of the directly connected network may have smaller MTUs.
  4005.  
  4006.      The code for this option is 27, and its length is 1.
  4007.  
  4008.       Code   Len  Value
  4009.      +-----+-----+-----+
  4010.      |  27 |  1  | 0/1 |
  4011.      +-----+-----+-----+
  4012.  
  4013.   5.3. Broadcast Address Option
  4014.  
  4015.      This option specifies the broadcast address in use on the client's
  4016.      subnet.  Legal values for broadcast addresses are specified in
  4017.      section 3.2.1.3 of [4].
  4018.  
  4019.      The code for this option is 28, and its length is 4.
  4020.  
  4021.       Code   Len     Broadcast Address
  4022.      +-----+-----+-----+-----+-----+-----+
  4023.      |  28 |  4  |  b1 |  b2 |  b3 |  b4 |
  4024.      +-----+-----+-----+-----+-----+-----+
  4025.  
  4026.   5.4. Perform Mask Discovery Option
  4027.      This option specifies whether or not the client should perform subnet
  4028.      mask discovery using ICMP.  A value of 0 indicates that the client
  4029.      should not perform mask discovery.  A value of 1 means that the
  4030.      client should perform mask discovery.
  4031.  
  4032.      The code for this option is 29, and its length is 1.
  4033.  
  4034.       Code   Len  Value
  4035.      +-----+-----+-----+
  4036.      |  29 |  1  | 0/1 |
  4037.      +-----+-----+-----+
  4038.  
  4039.  
  4040.  
  4041.  
  4042.  
  4043.  
  4044.  
  4045.  
  4046.  
  4047.   Alexander & Droms                                              [Page 14]
  4048.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4049.  
  4050.  
  4051.   5.5. Mask Supplier Option
  4052.  
  4053.      This option specifies whether or not the client should respond to
  4054.      subnet mask requests using ICMP.  A value of 0 indicates that the
  4055.      client should not respond.  A value of 1 means that the client should
  4056.      respond.
  4057.  
  4058.      The code for this option is 30, and its length is 1.
  4059.  
  4060.       Code   Len  Value
  4061.      +-----+-----+-----+
  4062.      |  30 |  1  | 0/1 |
  4063.      +-----+-----+-----+
  4064.  
  4065.   5.6. Perform Router Discovery Option
  4066.  
  4067.      This option specifies whether or not the client should solicit
  4068.      routers using the Router Discovery mechanism defined in RFC 1256
  4069.      [13].  A value of 0 indicates that the client should not perform
  4070.      router discovery.  A value of 1 means that the client should perform
  4071.      router discovery.
  4072.  
  4073.      The code for this option is 31, and its length is 1.
  4074.  
  4075.       Code   Len  Value
  4076.      +-----+-----+-----+
  4077.      |  31 |  1  | 0/1 |
  4078.      +-----+-----+-----+
  4079.  
  4080.   5.7. Router Solicitation Address Option
  4081.  
  4082.      This option specifies the address to which the client should transmit
  4083.      router solicitation requests.
  4084.  
  4085.      The code for this option is 32, and its length is 4.
  4086.  
  4087.       Code   Len            Address
  4088.      +-----+-----+-----+-----+-----+-----+
  4089.      |  32 |  4  |  a1 |  a2 |  a3 |  a4 |
  4090.      +-----+-----+-----+-----+-----+-----+
  4091.  
  4092.  
  4093.   Alexander & Droms                                              [Page 15]
  4094.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4095.  
  4096.  
  4097.   5.8. Static Route Option
  4098.  
  4099.      This option specifies a list of static routes that the client should
  4100.      install in its routing cache.  If multiple routes to the same
  4101.      destination are specified, they are listed in descending order of
  4102.      priority.
  4103.  
  4104.      The routes consist of a list of IP address pairs.  The first address
  4105.      is the destination address, and the second address is the router for
  4106.      the destination.
  4107.  
  4108.      The default route (0.0.0.0) is an illegal destination for a static
  4109.      route.  See section 3.5 for information about the router option.
  4110.  
  4111.      The code for this option is 33.  The minimum length of this option is
  4112.      8, and the length MUST be a multiple of 8.
  4113.  
  4114.       Code   Len         Destination 1           Router 1
  4115.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  4116.      |  33 |  n  |  d1 |  d2 |  d3 |  d4 |  r1 |  r2 |  r3 |  r4 |
  4117.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  4118.              Destination 2           Router 2
  4119.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  4120.      |  d1 |  d2 |  d3 |  d4 |  r1 |  r2 |  r3 |  r4 | ...
  4121.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  4122.  
  4123.   6. Link Layer Parameters per Interface
  4124.  
  4125.      This section lists the options that affect the operation of the data
  4126.      link layer on a per-interface basis.
  4127.  
  4128.   6.1. Trailer Encapsulation Option
  4129.  
  4130.      This option specifies whether or not the client should negotiate the
  4131.      use of trailers (RFC 893 [14]) when using the ARP protocol.  A value
  4132.      of 0 indicates that the client should not attempt to use trailers.  A
  4133.      value of 1 means that the client should attempt to use trailers.
  4134.  
  4135.      The code for this option is 34, and its length is 1.
  4136.  
  4137.       Code   Len  Value
  4138.      +-----+-----+-----+
  4139.      |  34 |  1  | 0/1 |
  4140.      +-----+-----+-----+
  4141.  
  4142.  
  4143.  
  4144.  
  4145.  
  4146.  
  4147.  
  4148.   Alexander & Droms                                              [Page 16]
  4149.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4150.  
  4151.  
  4152.   6.2. ARP Cache Timeout Option
  4153.  
  4154.      This option specifies the timeout in seconds for ARP cache entries.
  4155.      The time is specified as a 32-bit unsigned integer.
  4156.  
  4157.      The code for this option is 35, and its length is 4.
  4158.  
  4159.       Code   Len           Time
  4160.      +-----+-----+-----+-----+-----+-----+
  4161.      |  35 |  4  |  t1 |  t2 |  t3 |  t4 |
  4162.      +-----+-----+-----+-----+-----+-----+
  4163.  
  4164.   6.3. Ethernet Encapsulation Option
  4165.  
  4166.      This option specifies whether or not the client should use Ethernet
  4167.      Version 2 (RFC 894 [15]) or IEEE 802.3 (RFC 1042 [16]) encapsulation
  4168.      if the interface is an Ethernet.  A value of 0 indicates that the
  4169.      client should use RFC 894 encapsulation.  A value of 1 means that the
  4170.      client should use RFC 1042 encapsulation.
  4171.  
  4172.      The code for this option is 36, and its length is 1.
  4173.  
  4174.       Code   Len  Value
  4175.      +-----+-----+-----+
  4176.      |  36 |  1  | 0/1 |
  4177.      +-----+-----+-----+
  4178.  
  4179.   7. TCP Parameters
  4180.  
  4181.      This section lists the options that affect the operation of the TCP
  4182.      layer on a per-interface basis.
  4183.  
  4184.   7.1. TCP Default TTL Option
  4185.  
  4186.      This option specifies the default TTL that the client should use when
  4187.      sending TCP segments.  The value is represented as an 8-bit unsigned
  4188.      integer.  The minimum value is 1.
  4189.  
  4190.      The code for this option is 37, and its length is 1.
  4191.  
  4192.       Code   Len   TTL
  4193.      +-----+-----+-----+
  4194.      |  37 |  1  |  n  |
  4195.      +-----+-----+-----+
  4196.  
  4197.  
  4198.  
  4199.  
  4200.  
  4201.  
  4202.  
  4203.   Alexander & Droms                                              [Page 17]
  4204.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4205.  
  4206.  
  4207.   7.2. TCP Keepalive Interval Option
  4208.  
  4209.      This option specifies the interval (in seconds) that the client TCP
  4210.      should wait before sending a keepalive message on a TCP connection.
  4211.      The time is specified as a 32-bit unsigned integer.  A value of zero
  4212.      indicates that the client should not generate keepalive messages on
  4213.      connections unless specifically requested by an application.
  4214.  
  4215.      The code for this option is 38, and its length is 4.
  4216.  
  4217.       Code   Len           Time
  4218.      +-----+-----+-----+-----+-----+-----+
  4219.      |  38 |  4  |  t1 |  t2 |  t3 |  t4 |
  4220.      +-----+-----+-----+-----+-----+-----+
  4221.  
  4222.   7.3. TCP Keepalive Garbage Option
  4223.  
  4224.      This option specifies the whether or not the client should send TCP
  4225.      keepalive messages with a octet of garbage for compatibility with
  4226.      older implementations.  A value of 0 indicates that a garbage octet
  4227.      should not be sent. A value of 1 indicates that a garbage octet
  4228.      should be sent.
  4229.  
  4230.      The code for this option is 39, and its length is 1.
  4231.  
  4232.       Code   Len  Value
  4233.      +-----+-----+-----+
  4234.      |  39 |  1  | 0/1 |
  4235.      +-----+-----+-----+
  4236.  
  4237.   8. Application and Service Parameters
  4238.  
  4239.      This section details some miscellaneous options used to configure
  4240.      miscellaneous applications and services.
  4241.  
  4242.   8.1. Network Information Service Domain Option
  4243.  
  4244.      This option specifies the name of the client's NIS [17] domain.  The
  4245.      domain is formatted as a character string consisting of characters
  4246.      from the NVT ASCII character set.
  4247.  
  4248.      The code for this option is 40.  Its minimum length is 1.
  4249.  
  4250.       Code   Len      NIS Domain Name
  4251.      +-----+-----+-----+-----+-----+-----+---
  4252.      |  40 |  n  |  n1 |  n2 |  n3 |  n4 | ...
  4253.      +-----+-----+-----+-----+-----+-----+---
  4254.  
  4255.  
  4256.  
  4257.  
  4258.   Alexander & Droms                                              [Page 18]
  4259.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4260.  
  4261.  
  4262.   8.2. Network Information Servers Option
  4263.  
  4264.      This option specifies a list of IP addresses indicating NIS servers
  4265.      available to the client.  Servers SHOULD be listed in order of
  4266.      preference.
  4267.  
  4268.      The code for this option is 41.  Its minimum length is 4, and the
  4269.      length MUST be a multiple of 4.
  4270.  
  4271.       Code   Len         Address 1               Address 2
  4272.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  4273.      |  41 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  4274.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  4275.  
  4276.   8.3. Network Time Protocol Servers Option
  4277.  
  4278.      This option specifies a list of IP addresses indicating NTP [18]
  4279.      servers available to the client.  Servers SHOULD be listed in order
  4280.      of preference.
  4281.  
  4282.      The code for this option is 42.  Its minimum length is 4, and the
  4283.      length MUST be a multiple of 4.
  4284.  
  4285.       Code   Len         Address 1               Address 2
  4286.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  4287.      |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
  4288.      +-----+-----+-----+-----+-----+-----+-----+-----+--
  4289.  
  4290.   8.4. Vendor Specific Information
  4291.      This option is used by clients and servers to exchange vendor-
  4292.      specific information.  The information is an opaque object of n
  4293.      octets, presumably interpreted by vendor-specific code on the clients
  4294.      and servers.  The definition of this information is vendor specific.
  4295.      The vendor is indicated in the class-identifier option.  Servers not
  4296.      equipped to interpret the vendor-specific information sent by a
  4297.      client MUST ignore it (although it may be reported).  Clients which
  4298.      do not receive desired vendor-specific information SHOULD make an
  4299.      attempt to operate without it, although they may do so (and announce
  4300.      they are doing so) in a degraded mode.
  4301.  
  4302.      If a vendor potentially encodes more than one item of information in
  4303.      this option, then the vendor SHOULD encode the option using
  4304.      "Encapsulated vendor-specific options" as described below:
  4305.  
  4306.      The Encapsulated vendor-specific options field SHOULD be encoded as a
  4307.      sequence of code/length/value fields of identical syntax to the DHCP
  4308.      options field with the following exceptions:
  4309.  
  4310.  
  4311.  
  4312.   Alexander & Droms                                              [Page 19]
  4313.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4314.  
  4315.  
  4316.         1) There SHOULD NOT be a "magic cookie" field in the encapsulated
  4317.            vendor-specific extensions field.
  4318.  
  4319.         2) Codes other than 0 or 255 MAY be redefined by the vendor within
  4320.            the encapsulated vendor-specific extensions field, but SHOULD
  4321.            conform to the tag-length-value syntax defined in section 2.
  4322.  
  4323.         3) Code 255 (END), if present, signifies the end of the
  4324.            encapsulated vendor extensions, not the end of the vendor
  4325.            extensions field. If no code 255 is present, then the end of
  4326.            the enclosing vendor-specific information field is taken as the
  4327.            end of the encapsulated vendor-specific extensions field.
  4328.  
  4329.      The code for this option is 43 and its minimum length is 1.
  4330.  
  4331.      Code   Len   Vendor-specific information
  4332.      +-----+-----+-----+-----+---
  4333.      |  43 |  n  |  i1 |  i2 | ...
  4334.      +-----+-----+-----+-----+---
  4335.  
  4336.      When encapsulated vendor-specific extensions are used, the
  4337.      information bytes 1-n have the following format:
  4338.  
  4339.       Code   Len   Data item        Code   Len   Data item       Code
  4340.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  4341.      |  T1 |  n  |  d1 |  d2 | ... |  T2 |  n  |  D1 |  D2 | ... | ... |
  4342.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  4343.  
  4344.   8.5. NetBIOS over TCP/IP Name Server Option
  4345.  
  4346.      The NetBIOS name server (NBNS) option specifies a list of RFC
  4347.      1001/1002 [19] [20] NBNS name servers listed in order of preference.
  4348.  
  4349.      The code for this option is 44.  The minimum length of the option is
  4350.      4 octets, and the length must always be a multiple of 4.
  4351.  
  4352.       Code   Len           Address 1              Address 2
  4353.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
  4354.      |  44 |  n  |  a1 |  a2 |  a3 |  a4 |  b1 |  b2 |  b3 |  b4 | ...
  4355.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
  4356.  
  4357.   Alexander & Droms                                              [Page 20]
  4358.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4359.  
  4360.  
  4361.   8.6. NetBIOS over TCP/IP Datagram Distribution Server Option
  4362.  
  4363.      The NetBIOS datagram distribution server (NBDD) option specifies a
  4364.      list of RFC 1001/1002 NBDD servers listed in order of preference. The
  4365.      code for this option is 45.  The minimum length of the option is 4
  4366.      octets, and the length must always be a multiple of 4.
  4367.  
  4368.       Code   Len           Address 1              Address 2
  4369.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
  4370.      |  45 |  n  |  a1 |  a2 |  a3 |  a4 |  b1 |  b2 |  b3 |  b4 | ...
  4371.      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
  4372.  
  4373.   8.7. NetBIOS over TCP/IP Node Type Option
  4374.  
  4375.      The NetBIOS node type option allows NetBIOS over TCP/IP clients which
  4376.      are configurable to be configured as described in RFC 1001/1002.  The
  4377.      value is specified as a single octet which identifies the client type
  4378.      as follows:
  4379.  
  4380.         Value         Node Type
  4381.         -----         ---------
  4382.         0x1           B-node
  4383.         0x2           P-node
  4384.         0x4           M-node
  4385.         0x8           H-node
  4386.  
  4387.      In the above chart, the notation '0x' indicates a number in base-16
  4388.      (hexadecimal).
  4389.  
  4390.      The code for this option is 46.  The length of this option is always
  4391.      1.
  4392.  
  4393.       Code   Len  Node Type
  4394.      +-----+-----+-----------+
  4395.      |  46 |  1  | see above |
  4396.      +-----+-----+-----------+
  4397.  
  4398.  
  4399.  
  4400.  
  4401.  
  4402.  
  4403.  
  4404.  
  4405.  
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.   Alexander & Droms                                              [Page 21]
  4413.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4414.  
  4415.  
  4416.   8.8. NetBIOS over TCP/IP Scope Option
  4417.  
  4418.      The NetBIOS scope option specifies the NetBIOS over TCP/IP scope
  4419.      parameter for the client as specified in RFC 1001/1002. See [19],
  4420.      [20], and [8] for character-set restrictions.
  4421.  
  4422.      The code for this option is 47.  The minimum length of this option is
  4423.      1.
  4424.  
  4425.       Code   Len       NetBIOS Scope
  4426.      +-----+-----+-----+-----+-----+-----+----
  4427.      |  47 |  n  |  s1 |  s2 |  s3 |  s4 | ...
  4428.      +-----+-----+-----+-----+-----+-----+----
  4429.  
  4430.   8.9. X Window System Font Server Option
  4431.  
  4432.      This option specifies a list of X Window System [21] Font servers
  4433.      available to the client. Servers SHOULD be listed in order of
  4434.      preference.
  4435.  
  4436.      The code for this option is 48.  The minimum length of this option is
  4437.      4 octets, and the length MUST be a multiple of 4.
  4438.  
  4439.       Code   Len         Address 1               Address 2
  4440.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  4441.      |  48 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |   ...
  4442.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  4443.  
  4444.   8.10. X Window System Display Manager Option
  4445.  
  4446.      This option specifies a list of IP addresses of systems that are
  4447.      running the X Window System Display Manager and are available to the
  4448.      client.
  4449.  
  4450.      Addresses SHOULD be listed in order of preference.
  4451.  
  4452.      The code for the this option is 49. The minimum length of this option
  4453.      is 4, and the length MUST be a multiple of 4.
  4454.  
  4455.       Code   Len         Address 1               Address 2
  4456.  
  4457.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  4458.      |  49 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |   ...
  4459.      +-----+-----+-----+-----+-----+-----+-----+-----+---
  4460.  
  4461.  
  4462.  
  4463.  
  4464.  
  4465.  
  4466.  
  4467.   Alexander & Droms                                              [Page 22]
  4468.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4469.  
  4470.  
  4471.   9. DHCP Extensions
  4472.  
  4473.      This section details the options that are specific to DHCP.
  4474.  
  4475.   9.1. Requested IP Address
  4476.  
  4477.      This option is used in a client request (DHCPDISCOVER) to allow the
  4478.      client to request that a particular IP address be assigned.
  4479.  
  4480.      The code for this option is 50, and its length is 4.
  4481.  
  4482.       Code   Len          Address
  4483.      +-----+-----+-----+-----+-----+-----+
  4484.      |  50 |  4  |  a1 |  a2 |  a3 |  a4 |
  4485.      +-----+-----+-----+-----+-----+-----+
  4486.  
  4487.   9.2. IP Address Lease Time
  4488.  
  4489.      This option is used in a client request (DHCPDISCOVER or DHCPREQUEST)
  4490.      to allow the client to request a lease time for the IP address.  In a
  4491.      server reply (DHCPOFFER), a DHCP server uses this option to specify
  4492.      the lease time it is willing to offer.
  4493.  
  4494.      The time is in units of seconds, and is specified as a 32-bit
  4495.      unsigned integer.
  4496.  
  4497.      The code for this option is 51, and its length is 4.
  4498.  
  4499.       Code   Len         Lease Time
  4500.      +-----+-----+-----+-----+-----+-----+
  4501.      |  51 |  4  |  t1 |  t2 |  t3 |  t4 |
  4502.      +-----+-----+-----+-----+-----+-----+
  4503.  
  4504.   9.3. Option Overload
  4505.  
  4506.      This option is used to indicate that the DHCP "sname" or "file"
  4507.      fields are being overloaded by using them to carry DHCP options. A
  4508.      DHCP server inserts this option if the returned parameters will
  4509.      exceed the usual space allotted for options.
  4510.  
  4511.      If this option is present, the client interprets the specified
  4512.      additional fields after it concludes interpretation of the standard
  4513.      option fields.
  4514.  
  4515.      The code for this option is 52, and its length is 1.  Legal values
  4516.      for this option are:
  4517.  
  4518.  
  4519.  
  4520.  
  4521.  
  4522.   Alexander & Droms                                              [Page 23]
  4523.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4524.  
  4525.  
  4526.              Value   Meaning
  4527.              -----   --------
  4528.                1     the "file" field is used to hold options
  4529.                2     the "sname" field is used to hold options
  4530.                3     both fields are used to hold options
  4531.  
  4532.       Code   Len  Value
  4533.      +-----+-----+-----+
  4534.      |  52 |  1  |1/2/3|
  4535.      +-----+-----+-----+
  4536.  
  4537.   9.4. DHCP Message Type
  4538.  
  4539.      This option is used to convey the type of the DHCP message.  The code
  4540.      for this option is 53, and its length is 1.  Legal values for this
  4541.      option are:
  4542.  
  4543.              Value   Message Type
  4544.              -----   ------------
  4545.                1     DHCPDISCOVER
  4546.                2     DHCPOFFER
  4547.                3     DHCPREQUEST
  4548.                4     DHCPDECLINE
  4549.                5     DHCPACK
  4550.                6     DHCPNAK
  4551.                7     DHCPRELEASE
  4552.  
  4553.       Code   Len  Type
  4554.      +-----+-----+-----+
  4555.      |  53 |  1  | 1-7 |
  4556.      +-----+-----+-----+
  4557.  
  4558.   9.5. Server Identifier
  4559.  
  4560.      This option is used in DHCPOFFER and DHCPREQUEST messages, and may
  4561.      optionally be included in the DHCPACK and DHCPNAK messages.  DHCP
  4562.      servers include this option in the DHCPOFFER in order to allow the
  4563.      client to distinguish between lease offers.  DHCP clients indicate
  4564.      which of several lease offers is being accepted by including this
  4565.      option in a DHCPREQUEST message.
  4566.  
  4567.      The identifier is the IP address of the selected server.
  4568.  
  4569.  
  4570.  
  4571.  
  4572.  
  4573.  
  4574.  
  4575.  
  4576.  
  4577.   Alexander & Droms                                              [Page 24]
  4578.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4579.  
  4580.  
  4581.      The code for this option is 54, and its length is 4.
  4582.  
  4583.       Code   Len            Address
  4584.      +-----+-----+-----+-----+-----+-----+
  4585.      |  54 |  4  |  a1 |  a2 |  a3 |  a4 |
  4586.      +-----+-----+-----+-----+-----+-----+
  4587.  
  4588.   9.6. Parameter Request List
  4589.  
  4590.      This option is used by a DHCP client to request values for specified
  4591.      configuration parameters.  The list of requested parameters is
  4592.      specified as n octets, where each octet is a valid DHCP option code
  4593.      as defined in this document.
  4594.  
  4595.      The client MAY list the options in order of preference.  The DHCP
  4596.      server is not required to return the options in the requested order,
  4597.      but MUST try to insert the requested options in the order requested
  4598.      by the client.
  4599.  
  4600.      The code for this option is 55.  Its minimum length is 1.
  4601.  
  4602.       Code   Len   Option Codes
  4603.      +-----+-----+-----+-----+---
  4604.      |  55 |  n  |  c1 |  c2 | ...
  4605.      +-----+-----+-----+-----+---
  4606.  
  4607.   9.7. Message
  4608.  
  4609.      This option is used by a DHCP server to provide an error message to a
  4610.      DHCP client in a DHCPNAK message in the event of a failure. A client
  4611.      may use this option in a DHCPDECLINE message to indicate the why the
  4612.      client declined the offered parameters.  The message consists of n
  4613.      octets of NVT ASCII text, which the client may display on an
  4614.      available output device.
  4615.  
  4616.      The code for this option is 56 and its minimum length is 1.
  4617.  
  4618.       Code   Len     Text
  4619.      +-----+-----+-----+-----+---
  4620.      |  56 |  n  |  c1 |  c2 | ...
  4621.      +-----+-----+-----+-----+---
  4622.  
  4623.  
  4624.  
  4625.  
  4626.  
  4627.  
  4628.  
  4629.  
  4630.  
  4631.  
  4632.   Alexander & Droms                                              [Page 25]
  4633.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4634.  
  4635.  
  4636.   9.8. Maximum DHCP Message Size
  4637.  
  4638.      This option specifies the maximum length DHCP message that it is
  4639.      willing to accept.  The length is specified as an unsigned 16-bit
  4640.      integer.  A client may use the maximum DHCP message size option in
  4641.      DHCPDISCOVER or DHCPREQUEST messages, but should not use the option
  4642.      in DHCPDECLINE messages.
  4643.  
  4644.      The code for this option is 57, and its length is 2.  The minimum
  4645.      legal value is 576 octets.
  4646.  
  4647.       Code   Len     Length
  4648.      +-----+-----+-----+-----+
  4649.      |  57 |  2  |  l1 |  l2 |
  4650.      +-----+-----+-----+-----+
  4651.  
  4652.   9.9. Renewal (T1) Time Value
  4653.  
  4654.      This option specifies the time interval from address assignment until
  4655.      the client transitions to the RENEWING state.
  4656.  
  4657.      The value is in units of seconds, and is specified as a 32-bit
  4658.      unsigned integer.
  4659.  
  4660.      The code for this option is 58, and its length is 4.
  4661.  
  4662.       Code   Len         T1 Interval
  4663.      +-----+-----+-----+-----+-----+-----+
  4664.      |  58 |  4  |  t1 |  t2 |  t3 |  t4 |
  4665.      +-----+-----+-----+-----+-----+-----+
  4666.  
  4667.   9.10. Rebinding (T2) Time Value
  4668.  
  4669.      This option specifies the time interval from address assignment until
  4670.      the client transitions to the REBINDING state.
  4671.  
  4672.      The value is in units of seconds, and is specified as a 32-bit
  4673.      unsigned integer.
  4674.  
  4675.      The code for this option is 59, and its length is 4.
  4676.  
  4677.       Code   Len         T2 Interval
  4678.      +-----+-----+-----+-----+-----+-----+
  4679.      |  59 |  4  |  t1 |  t2 |  t3 |  t4 |
  4680.      +-----+-----+-----+-----+-----+-----+
  4681.  
  4682.  
  4683.  
  4684.  
  4685.  
  4686.  
  4687.   Alexander & Droms                                              [Page 26]
  4688.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4689.  
  4690.  
  4691.   9.11. Class-identifier
  4692.  
  4693.      This option is used by DHCP clients to optionally identify the type
  4694.      and configuration of a DHCP client.  The information is a string of n
  4695.      octets, interpreted by servers.  Vendors and sites may choose to
  4696.      define specific class identifiers to convey particular configuration
  4697.      or other identification information about a client.  For example, the
  4698.      identifier may encode the client's hardware configuration.  Servers
  4699.      not equipped to interpret the class-specific information sent by a
  4700.      client MUST ignore it (although it may be reported).
  4701.  
  4702.      The code for this option is 60, and its minimum length is 1.
  4703.  
  4704.      Code   Len   Class-Identifier
  4705.      +-----+-----+-----+-----+---
  4706.      |  60 |  n  |  i1 |  i2 | ...
  4707.      +-----+-----+-----+-----+---
  4708.  
  4709.   9.12. Client-identifier
  4710.  
  4711.      This option is used by DHCP clients to specify their unique
  4712.      identifier.  DHCP servers use this value to index their database of
  4713.      address bindings.  This value is expected to be unique for all
  4714.      clients in an administrative domain.
  4715.  
  4716.      Identifiers consist of a type-value pair, similar to the
  4717.  
  4718.      It is expected that this field will typically contain a hardware type
  4719.      and hardware address, but this is not required.  Current legal values
  4720.      for hardware types are defined in [22].
  4721.  
  4722.      The code for this option is 61, and its minimum length is 2.
  4723.  
  4724.      Code   Len   Type  Client-Identifier
  4725.      +-----+-----+-----+-----+-----+---
  4726.      |  61 |  n  |  t1 |  i1 |  i2 | ...
  4727.      +-----+-----+-----+-----+-----+---
  4728.  
  4729.   10. Extensions
  4730.  
  4731.      Additional generic data fields may be registered by contacting:
  4732.  
  4733.         Internet Assigned Numbers Authority (IANA)
  4734.         USC/Information Sciences Institute
  4735.         4676 Admiralty Way
  4736.         Marina del Rey, California  90292-6695
  4737.  
  4738.         or by email as: iana@isi.edu
  4739.  
  4740.  
  4741.  
  4742.   Alexander & Droms                                              [Page 27]
  4743.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4744.  
  4745.  
  4746.      Implementation specific use of undefined generic types (those in the
  4747.      range 61-127) may conflict with other implementations, and
  4748.      registration is required.
  4749.  
  4750.   11. Acknowledgements
  4751.  
  4752.      The authors would like to thank Philip Almquist for his feedback on
  4753.      this document.  The comments of the DHCP Working Group are also
  4754.      gratefully acknowledged.  In particular, Mike Carney and Jon Dreyer
  4755.      from SunSelect suggested the current format of the Vendor-specific
  4756.      Information option.
  4757.  
  4758.      RFC 1497 is based on earlier work by Philip Prindeville, with help
  4759.      from Drew Perkins, Bill Croft, and Steve Deering.
  4760.  
  4761.   12. References
  4762.  
  4763.      [1] Droms, R., "Dynamic Host Configuration Protocol", RFC 1531,
  4764.          Bucknell University, October 1993.
  4765.  
  4766.      [2] Reynolds, J., "BOOTP Vendor Information Extensions", RFC 1497,
  4767.          USC/Information Sciences Institute, August 1993.
  4768.  
  4769.      [3] Croft, W., and J. Gilmore, "Bootstrap Protocol", RFC 951,
  4770.          Stanford University and Sun Microsystems, September 1985.
  4771.  
  4772.      [4] Braden, R., Editor, "Requirements for Internet Hosts -
  4773.          Communication Layers", STD 3, RFC 1122, USC/Information Sciences
  4774.          Institute, October 1989.
  4775.  
  4776.      [5] Mogul, J., and J. Postel, "Internet Standard Subnetting
  4777.          Procedure", STD 5, RFC 950, USC/Information Sciences Institute,
  4778.          August 1985.
  4779.  
  4780.      [6] Postel, J., and K. Harrenstien, "Time Protocol", STD 26, RFC
  4781.          868, USC/Information Sciences Institute, SRI, May 1983.
  4782.  
  4783.      [7] Postel, J., "Name Server", IEN 116, USC/Information Sciences
  4784.          Institute, August 1979.
  4785.  
  4786.      [8] Mockapetris, P., "Domain Names - Implementation and
  4787.          Specification", STD 13, RFC 1035, USC/Information Sciences
  4788.          Institute, November 1987.
  4789.  
  4790.      [9] Postel, J., "Quote of the Day Protocol", STD 23, RFC 865,
  4791.          USC/Information Sciences Institute, May 1983.
  4792.  
  4793.  
  4794.  
  4795.  
  4796.  
  4797.   Alexander & Droms                                              [Page 28]
  4798.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4799.  
  4800.  
  4801.      [10] McLaughlin, L., "Line Printer Daemon Protocol", RFC 1179, The
  4802.           Wollongong Group, August 1990.
  4803.  
  4804.      [11] Accetta, M., "Resource Location Protocol", RFC 887, CMU,
  4805.           December 1983.
  4806.  
  4807.      [12] Mogul, J. and S. Deering, "Path MTU Discovery", RFC 1191,
  4808.           DECWRL,  Stanford University, November 1990.
  4809.  
  4810.      [13] Deering, S., "ICMP Router Discovery Messages", RFC 1256,
  4811.           Xerox PARC, September 1991.
  4812.  
  4813.      [14] Leffler, S. and M. Karels, "Trailer Encapsulations", RFC 893,
  4814.           U. C. Berkeley, April 1984.
  4815.  
  4816.      [15] Hornig, C., "Standard for the Transmission of IP Datagrams over
  4817.           Ethernet Networks", RFC 894, Symbolics, April 1984.
  4818.  
  4819.      [16] Postel, J. and J. Reynolds, "Standard for the Transmission of
  4820.           IP Datagrams Over IEEE 802 Networks", RFC 1042,  USC/Information
  4821.           Sciences Institute, February 1988.
  4822.  
  4823.      [17] Sun Microsystems, "System and Network Administration", March
  4824.           1990.
  4825.  
  4826.      [18] Mills, D., "Internet Time Synchronization: The Network Time
  4827.           Protocol", RFC 1305, UDEL, March 1992.
  4828.  
  4829.      [19] NetBIOS Working Group, "Protocol Standard for a NetBIOS Service
  4830.           on a TCP/UDP transport: Concepts and Methods", STD 19, RFC 1001,
  4831.           March 1987.
  4832.  
  4833.      [20] NetBIOS Working Group, "Protocol Standard for a NetBIOS Service
  4834.           on a TCP/UDP transport: Detailed Specifications", STD 19, RFC
  4835.           1002, March 1987.
  4836.  
  4837.      [21] Scheifler, R., "FYI On the X Window System", FYI 6, RFC 1198,
  4838.           MIT Laboratory for Computer Science, January 1991.
  4839.  
  4840.      [22] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1340,
  4841.           USC/Information Sciences Institute, July 1992.
  4842.  
  4843.   13. Security Considerations
  4844.  
  4845.      Security issues are not discussed in this memo.
  4846.  
  4847.  
  4848.  
  4849.  
  4850.  
  4851.  
  4852.   Alexander & Droms                                              [Page 29]
  4853.   RFC 1533        DHCP Options and BOOTP Vendor Extensions    October 1993
  4854.  
  4855.  
  4856.   14. Authors' Addresses
  4857.  
  4858.      Steve Alexander
  4859.      Lachman Technology, Inc.
  4860.      1901 North Naper Boulevard
  4861.      Naperville, IL 60563-8895
  4862.  
  4863.      Phone: (708) 505-9555 x256
  4864.      EMail: stevea@lachman.com
  4865.  
  4866.  
  4867.      Ralph Droms
  4868.      Computer Science Department
  4869.      323 Dana Engineering
  4870.      Bucknell University
  4871.      Lewisburg, PA 17837
  4872.  
  4873.      Phone: (717) 524-1145
  4874.      EMail: droms@bucknell.edu
  4875.  
  4876.  
  4877.   Alexander & Droms                                              [Page 30]
  4878.  
  4879.  
  4880.  
  4881.  
  4882.  
  4883.  
  4884.  
  4885.   8.7.  RFC 1350
  4886.  
  4887.  
  4888.  
  4889.  
  4890.  
  4891.  
  4892.  
  4893.  
  4894.  
  4895.  
  4896.  
  4897.  
  4898.  
  4899.  
  4900.  
  4901.  
  4902.  
  4903.  
  4904.  
  4905.  
  4906.  
  4907.  
  4908.  
  4909.  
  4910.  
  4911.  
  4912.  
  4913.  
  4914.  
  4915.  
  4916.  
  4917.  
  4918.  
  4919.  
  4920.  
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  
  4933.  
  4934.  
  4935.  
  4936.  
  4937.  
  4938.  
  4939.  
  4940.  
  4941.  
  4942.  
  4943.  
  4944.  
  4945.  
  4946.  
  4947.  
  4948.  
  4949.  
  4950.  
  4951.   Network Working Group                                         K. Sollins
  4952.   Request For Comments: 1350                                           MIT
  4953.   STD: 33                                                        July 1992
  4954.   Obsoletes: RFC 783
  4955.  
  4956.  
  4957.                        THE TFTP PROTOCOL (REVISION 2)
  4958.  
  4959.   Status of this Memo
  4960.  
  4961.      This RFC specifies an IAB standards track protocol for the Internet
  4962.      community, and requests discussion and suggestions for improvements.
  4963.      Please refer to the current edition of the "IAB Official Protocol
  4964.      Standards" for the standardization state and status of this protocol.
  4965.      Distribution of this memo is unlimited.
  4966.  
  4967.   Summary
  4968.  
  4969.      TFTP is a very simple protocol used to transfer files.  It is from
  4970.      this that its name comes, Trivial File Transfer Protocol or TFTP.
  4971.      Each nonterminal packet is acknowledged separately.  This document
  4972.      describes the protocol and its types of packets.  The document also
  4973.      explains the reasons behind some of the design decisions.
  4974.  
  4975.   Acknowlegements
  4976.  
  4977.      The protocol was originally designed by Noel Chiappa, and was
  4978.      redesigned by him, Bob Baldwin and Dave Clark, with comments from
  4979.      Steve Szymanski.  The current revision of the document includes
  4980.      modifications stemming from discussions with and suggestions from
  4981.      Larry Allen, Noel Chiappa, Dave Clark, Geoff Cooper, Mike Greenwald,
  4982.      Liza Martin, David Reed, Craig Milo Rogers (of USC-ISI), Kathy
  4983.      Yellick, and the author.  The acknowledgement and retransmission
  4984.      scheme was inspired by TCP, and the error mechanism was suggested by
  4985.      PARC's EFTP abort message.
  4986.  
  4987.      The May, 1992 revision to fix the "Sorcerer's Apprentice" protocol
  4988.      bug [4] and other minor document problems was done by Noel Chiappa.
  4989.  
  4990.      This research was supported by the Advanced Research Projects Agency
  4991.      of the Department of Defense and was monitored by the Office of Naval
  4992.      Research under contract number N00014-75-C-0661.
  4993.  
  4994.   1. Purpose
  4995.  
  4996.      TFTP is a simple protocol to transfer files, and therefore was named
  4997.      the Trivial File Transfer Protocol or TFTP.  It has been implemented
  4998.      on top of the Internet User Datagram protocol (UDP or Datagram) [2]
  4999.  
  5000.  
  5001.  
  5002.   Sollins                                                         [Page 1]
  5003.   RFC 1350                    TFTP Revision 2                    July 1992
  5004.  
  5005.  
  5006.      so it may be used to move files between machines on different
  5007.      networks implementing UDP.  (This should not exclude the possibility
  5008.      of implementing TFTP on top of other datagram protocols.)  It is
  5009.      designed to be small and easy to implement.  Therefore, it lacks most
  5010.      of the features of a regular FTP.  The only thing it can do is read
  5011.      and write files (or mail) from/to a remote server.  It cannot list
  5012.      directories, and currently has no provisions for user authentication.
  5013.      In common with other Internet protocols, it passes 8 bit bytes of
  5014.      data.
  5015.  
  5016.      Three modes of transfer are currently supported: netascii (This is
  5017.      ascii as defined in "USA Standard Code for Information Interchange"
  5018.      [1] with the modifications specified in "Telnet Protocol
  5019.      Specification" [3].)  Note that it is 8 bit ascii.  The term
  5020.      "netascii" will be used throughout this document to mean this
  5021.      particular version of ascii.); octet (This replaces the "binary" mode
  5022.      of previous versions of this document.) raw 8 bit bytes; mail,
  5023.      netascii characters sent to a user rather than a file.  (The mail
  5024.      mode is obsolete and should not be implemented or used.)  Additional
  5025.      modes can be defined by pairs of cooperating hosts.
  5026.  
  5027.      Reference [4] (section 4.2) should be consulted for further valuable
  5028.      directives and suggestions on TFTP.
  5029.  
  5030.   2. Overview of the Protocol
  5031.  
  5032.      Any transfer begins with a request to read or write a file, which
  5033.      also serves to request a connection.  If the server grants the
  5034.      request, the connection is opened and the file is sent in fixed
  5035.      length blocks of 512 bytes.  Each data packet contains one block of
  5036.      data, and must be acknowledged by an acknowledgment packet before the
  5037.      next packet can be sent.  A data packet of less than 512 bytes
  5038.      signals termination of a transfer.  If a packet gets lost in the
  5039.      network, the intended recipient will timeout and may retransmit his
  5040.      last packet (which may be data or an acknowledgment), thus causing
  5041.      the sender of the lost packet to retransmit that lost packet.  The
  5042.      sender has to keep just one packet on hand for retransmission, since
  5043.      the lock step acknowledgment guarantees that all older packets have
  5044.      been received.  Notice that both machines involved in a transfer are
  5045.      considered senders and receivers.  One sends data and receives
  5046.      acknowledgments, the other sends acknowledgments and receives data.
  5047.  
  5048.      Most errors cause termination of the connection.  An error is
  5049.      signalled by sending an error packet.  This packet is not
  5050.      acknowledged, and not retransmitted (i.e., a TFTP server or user may
  5051.      terminate after sending an error message), so the other end of the
  5052.      connection may not get it.  Therefore timeouts are used to detect
  5053.      such a termination when the error packet has been lost.  Errors are
  5054.  
  5055.  
  5056.  
  5057.   Sollins                                                         [Page 2]
  5058.   RFC 1350                    TFTP Revision 2                    July 1992
  5059.  
  5060.  
  5061.      caused by three types of events: not being able to satisfy the
  5062.      request (e.g., file not found, access violation, or no such user),
  5063.      receiving a packet which cannot be explained by a delay or
  5064.      duplication in the network (e.g., an incorrectly formed packet), and
  5065.      losing access to a necessary resource (e.g., disk full or access
  5066.      denied during a transfer).
  5067.  
  5068.      TFTP recognizes only one error condition that does not cause
  5069.      termination, the source port of a received packet being incorrect.
  5070.      In this case, an error packet is sent to the originating host.
  5071.  
  5072.      This protocol is very restrictive, in order to simplify
  5073.      implementation.  For example, the fixed length blocks make allocation
  5074.      straight forward, and the lock step acknowledgement provides flow
  5075.      control and eliminates the need to reorder incoming data packets.
  5076.  
  5077.   3. Relation to other Protocols
  5078.  
  5079.      As mentioned TFTP is designed to be implemented on top of the
  5080.      Datagram protocol (UDP).  Since Datagram is implemented on the
  5081.      Internet protocol, packets will have an Internet header, a Datagram
  5082.      header, and a TFTP header.  Additionally, the packets may have a
  5083.      header (LNI, ARPA header, etc.)  to allow them through the local
  5084.      transport medium.  As shown in Figure 3-1, the order of the contents
  5085.      of a packet will be: local medium header, if used, Internet header,
  5086.      Datagram header, TFTP header, followed by the remainder of the TFTP
  5087.      packet.  (This may or may not be data depending on the type of packet
  5088.      as specified in the TFTP header.)  TFTP does not specify any of the
  5089.      values in the Internet header.  On the other hand, the source and
  5090.      destination port fields of the Datagram header (its format is given
  5091.      in the appendix) are used by TFTP and the length field reflects the
  5092.      size of the TFTP packet.  The transfer identifiers (TID's) used by
  5093.      TFTP are passed to the Datagram layer to be used as ports; therefore
  5094.      they must be between 0 and 65,535.  The initialization of TID's is
  5095.      discussed in the section on initial connection protocol.
  5096.  
  5097.      The  TFTP header consists of a 2 byte opcode field which indicates
  5098.      the packet's type (e.g., DATA, ERROR, etc.)  These opcodes and  the
  5099.      formats of  the various types of packets are discussed further in the
  5100.      section on TFTP packets.
  5101.  
  5102.  
  5103.  
  5104.  
  5105.  
  5106.  
  5107.  
  5108.  
  5109.  
  5110.  
  5111.  
  5112.   Sollins                                                         [Page 3]
  5113.   RFC 1350                    TFTP Revision 2                    July 1992
  5114.  
  5115.  
  5116.             ---------------------------------------------------
  5117.            |  Local Medium  |  Internet  |  Datagram  |  TFTP  |
  5118.             ---------------------------------------------------
  5119.  
  5120.                         Figure 3-1: Order of Headers
  5121.  
  5122.  
  5123.   4. Initial Connection Protocol
  5124.  
  5125.      A transfer is established by sending a request (WRQ to write onto a
  5126.      foreign file system, or RRQ to read from it), and receiving a
  5127.      positive reply, an acknowledgment packet for write, or the first data
  5128.      packet for read.  In general an acknowledgment packet will contain
  5129.      the block number of the data packet being acknowledged.  Each data
  5130.      packet has associated with it a block number; block numbers are
  5131.      consecutive and begin with one.  Since the positive response to a
  5132.      write request is an acknowledgment packet, in this special case the
  5133.      block number will be zero.  (Normally, since an acknowledgment packet
  5134.      is acknowledging a data packet, the acknowledgment packet will
  5135.      contain the block number of the data packet being acknowledged.)  If
  5136.      the reply is an error packet, then the request has been denied.
  5137.  
  5138.      In order to create a connection, each end of the connection chooses a
  5139.      TID for itself, to be used for the duration of that connection.  The
  5140.      TID's chosen for a connection should be randomly chosen, so that the
  5141.      probability that the same number is chosen twice in immediate
  5142.      succession is very low.  Every packet has associated with it the two
  5143.      TID's of the ends of the connection, the source TID and the
  5144.      destination TID.  These TID's are handed to the supporting UDP (or
  5145.      other datagram protocol) as the source and destination ports.  A
  5146.      requesting host chooses its source TID as described above, and sends
  5147.      its initial request to the known TID 69 decimal (105 octal) on the
  5148.      serving host.  The response to the request, under normal operation,
  5149.      uses a TID chosen by the server as its source TID and the TID chosen
  5150.      for the previous message by the requestor as its destination TID.
  5151.      The two chosen TID's are then used for the remainder of the transfer.
  5152.  
  5153.      As an example, the following shows the steps used to establish a
  5154.      connection to write a file.  Note that WRQ, ACK, and DATA are the
  5155.      names of the write request, acknowledgment, and data types of packets
  5156.      respectively.  The appendix contains a similar example for reading a
  5157.      file.
  5158.  
  5159.  
  5160.  
  5161.  
  5162.  
  5163.  
  5164.  
  5165.  
  5166.  
  5167.   Sollins                                                         [Page 4]
  5168.   RFC 1350                    TFTP Revision 2                    July 1992
  5169.  
  5170.  
  5171.         1. Host A sends  a  "WRQ"  to  host  B  with  source=  A's  TID,
  5172.            destination= 69.
  5173.  
  5174.         2. Host  B  sends  a "ACK" (with block number= 0) to host A with
  5175.            source= B's TID, destination= A's TID.
  5176.  
  5177.      At this point the connection has been established and the first data
  5178.      packet can be sent by Host A with a sequence number of 1.  In the
  5179.      next step, and in all succeeding steps, the hosts should make sure
  5180.      that the source TID matches the value that was agreed on in steps 1
  5181.      and 2.  If a source TID does not match, the packet should be
  5182.      discarded as erroneously sent from somewhere else.  An error packet
  5183.      should be sent to the source of the incorrect packet, while not
  5184.      disturbing the transfer.  This can be done only if the TFTP in fact
  5185.      receives a packet with an incorrect TID.  If the supporting protocols
  5186.      do not allow it, this particular error condition will not arise.
  5187.  
  5188.      The following example demonstrates a correct operation of the
  5189.      protocol in which the above situation can occur.  Host A sends a
  5190.      request to host B. Somewhere in the network, the request packet is
  5191.      duplicated, and as a result two acknowledgments are returned to host
  5192.      A, with different TID's chosen on host B in response to the two
  5193.      requests.  When the first response arrives, host A continues the
  5194.      connection.  When the second response to the request arrives, it
  5195.      should be rejected, but there is no reason to terminate the first
  5196.      connection.  Therefore, if different TID's are chosen for the two
  5197.      connections on host B and host A checks the source TID's of the
  5198.      messages it receives, the first connection can be maintained while
  5199.      the second is rejected by returning an error packet.
  5200.  
  5201.   5. TFTP Packets
  5202.  
  5203.      TFTP supports five types of packets, all of which have been mentioned
  5204.      above:
  5205.  
  5206.             opcode  operation
  5207.               1     Read request (RRQ)
  5208.               2     Write request (WRQ)
  5209.               3     Data (DATA)
  5210.               4     Acknowledgment (ACK)
  5211.               5     Error (ERROR)
  5212.  
  5213.      The TFTP header of a packet contains the  opcode  associated  with
  5214.      that packet.
  5215.   Sollins                                                         [Page 5]
  5216.   RFC 1350                    TFTP Revision 2                    July 1992
  5217.  
  5218.  
  5219.               2 bytes     string    1 byte     string   1 byte
  5220.               ------------------------------------------------
  5221.              | Opcode |  Filename  |   0  |    Mode    |   0  |
  5222.               ------------------------------------------------
  5223.  
  5224.                          Figure 5-1: RRQ/WRQ packet
  5225.  
  5226.  
  5227.      RRQ and WRQ packets (opcodes 1 and 2 respectively) have the format
  5228.      shown in Figure 5-1.  The file name is a sequence of bytes in
  5229.      netascii terminated by a zero byte.  The mode field contains the
  5230.      string "netascii", "octet", or "mail" (or any combination of upper
  5231.      and lower case, such as "NETASCII", NetAscii", etc.) in netascii
  5232.      indicating the three modes defined in the protocol.  A host which
  5233.      receives netascii mode data must translate the data to its own
  5234.      format.  Octet mode is used to transfer a file that is in the 8-bit
  5235.      format of the machine from which the file is being transferred.  It
  5236.      is assumed that each type of machine has a single 8-bit format that
  5237.      is more common, and that that format is chosen.  For example, on a
  5238.      DEC-20, a 36 bit machine, this is four 8-bit bytes to a word with
  5239.      four bits of breakage.  If a host receives a octet file and then
  5240.      returns it, the returned file must be identical to the original.
  5241.      Mail mode uses the name of a mail recipient in place of a file and
  5242.      must begin with a WRQ.  Otherwise it is identical to netascii mode.
  5243.      The mail recipient string should be of the form "username" or
  5244.      "username@hostname".  If the second form is used, it allows the
  5245.      option of mail forwarding by a relay computer.
  5246.  
  5247.      The discussion above assumes that both the sender and recipient are
  5248.      operating in the same mode, but there is no reason that this has to
  5249.      be the case.  For example, one might build a storage server.  There
  5250.      is no reason that such a machine needs to translate netascii into its
  5251.      own form of text.  Rather, the sender might send files in netascii,
  5252.      but the storage server might simply store them without translation in
  5253.      8-bit format.  Another such situation is a problem that currently
  5254.      exists on DEC-20 systems.  Neither netascii nor octet accesses all
  5255.      the bits in a word.  One might create a special mode for such a
  5256.      machine which read all the bits in a word, but in which the receiver
  5257.      stored the information in 8-bit format.  When such a file is
  5258.      retrieved from the storage site, it must be restored to its original
  5259.      form to be useful, so the reverse mode must also be implemented.  The
  5260.      user site will have to remember some information to achieve this.  In
  5261.      both of these examples, the request packets would specify octet mode
  5262.      to the foreign host, but the local host would be in some other mode.
  5263.      No such machine or application specific modes have been specified in
  5264.      TFTP, but one would be compatible with this specification.
  5265.  
  5266.      It is also possible to define other modes for cooperating pairs of
  5267.  
  5268.  
  5269.  
  5270.   Sollins                                                         [Page 6]
  5271.   RFC 1350                    TFTP Revision 2                    July 1992
  5272.  
  5273.  
  5274.      hosts, although this must be done with care.  There is no requirement
  5275.      that any other hosts implement these.  There is no central authority
  5276.      that will define these modes or assign them names.
  5277.  
  5278.  
  5279.                      2 bytes     2 bytes      n bytes
  5280.                      ----------------------------------
  5281.                     | Opcode |   Block #  |   Data     |
  5282.                      ----------------------------------
  5283.  
  5284.                           Figure 5-2: DATA packet
  5285.  
  5286.  
  5287.      Data is actually transferred in DATA packets depicted in Figure 5-2.
  5288.      DATA packets (opcode = 3) have a block number and data field.  The
  5289.      block numbers on data packets begin with one and increase by one for
  5290.      each new block of data.  This restriction allows the program to use a
  5291.      single number to discriminate between new packets and duplicates.
  5292.      The data field is from zero to 512 bytes long.  If it is 512 bytes
  5293.      long, the block is not the last block of data; if it is from zero to
  5294.      511 bytes long, it signals the end of the transfer.  (See the section
  5295.      on Normal Termination for details.)
  5296.  
  5297.      All  packets other than duplicate ACK's and those used for
  5298.      termination are acknowledged unless a timeout occurs [4].  Sending a
  5299.      DATA packet is an acknowledgment for the first ACK packet of the
  5300.      previous DATA packet. The WRQ and DATA packets are acknowledged by
  5301.      ACK or ERROR packets, while RRQ
  5302.  
  5303.  
  5304.                            2 bytes     2 bytes
  5305.                            ---------------------
  5306.                           | Opcode |   Block #  |
  5307.                            ---------------------
  5308.  
  5309.                            Figure 5-3: ACK packet
  5310.  
  5311.  
  5312.      and ACK packets are acknowledged by  DATA  or ERROR packets.  Figure
  5313.      5-3 depicts an ACK packet; the opcode is 4.  The  block  number  in
  5314.      an  ACK echoes the block number of the DATA packet being
  5315.      acknowledged.  A WRQ is acknowledged with an ACK packet having a
  5316.      block number of zero.
  5317.  
  5318.  
  5319.  
  5320.  
  5321.  
  5322.  
  5323.  
  5324.  
  5325.   Sollins                                                         [Page 7]
  5326.   RFC 1350                    TFTP Revision 2                    July 1992
  5327.  
  5328.  
  5329.                  2 bytes     2 bytes      string    1 byte
  5330.                  -----------------------------------------
  5331.                 | Opcode |  ErrorCode |   ErrMsg   |   0  |
  5332.                  -----------------------------------------
  5333.  
  5334.                           Figure 5-4: ERROR packet
  5335.  
  5336.  
  5337.      An ERROR packet (opcode 5) takes the form depicted in Figure 5-4.  An
  5338.      ERROR packet can be the acknowledgment of any other type of packet.
  5339.      The error code is an integer indicating the nature of the error.  A
  5340.      table of values and meanings is given in the appendix.  (Note that
  5341.      several error codes have been added to this version of this
  5342.      document.) The error message is intended for human consumption, and
  5343.      should be in netascii.  Like all other strings, it is terminated with
  5344.      a zero byte.
  5345.  
  5346.   6. Normal Termination
  5347.      The end of a transfer is marked by a DATA packet that contains
  5348.      between 0 and 511 bytes of data (i.e., Datagram length < 516).  This
  5349.      packet is acknowledged by an ACK packet like all other DATA packets.
  5350.      The host acknowledging the final DATA packet may terminate its side
  5351.      of the connection on sending the final ACK.  On the other hand,
  5352.      dallying is encouraged.  This means that the host sending the final
  5353.      ACK will wait for a while before terminating in order to retransmit
  5354.      the final ACK if it has been lost.  The acknowledger will know that
  5355.      the ACK has been lost if it receives the final DATA packet again.
  5356.      The host sending the last DATA must retransmit it until the packet is
  5357.      acknowledged or the sending host times out.  If the response is an
  5358.      ACK, the transmission was completed successfully.  If the sender of
  5359.      the data times out and is not prepared to retransmit any more, the
  5360.      transfer may still have been completed successfully, after which the
  5361.      acknowledger or network may have experienced a problem.  It is also
  5362.      possible in this case that the transfer was unsuccessful.  In any
  5363.      case, the connection has been closed.
  5364.  
  5365.   7. Premature Termination
  5366.  
  5367.      If a request can not be granted, or some error occurs during the
  5368.      transfer, then an ERROR packet (opcode 5) is sent.  This is only a
  5369.      courtesy since it will not be retransmitted or acknowledged, so it
  5370.      may never be received.  Timeouts must also be used to detect errors.
  5371.  
  5372.  
  5373.  
  5374.  
  5375.  
  5376.  
  5377.  
  5378.  
  5379.   Sollins                                                         [Page 8]
  5380.   RFC 1350                    TFTP Revision 2                    July 1992
  5381.  
  5382.  
  5383.   I. Appendix
  5384.  
  5385.   Order of Headers
  5386.  
  5387.                                                     2 bytes
  5388.       ----------------------------------------------------------
  5389.      |  Local Medium  |  Internet  |  Datagram  |  TFTP Opcode  |
  5390.       ----------------------------------------------------------
  5391.  
  5392.   TFTP Formats
  5393.  
  5394.      Type   Op #     Format without header
  5395.  
  5396.             2 bytes    string   1 byte     string   1 byte
  5397.             -----------------------------------------------
  5398.      RRQ/  | 01/02 |  Filename  |   0  |    Mode    |   0  |
  5399.      WRQ    -----------------------------------------------
  5400.             2 bytes    2 bytes       n bytes
  5401.             ---------------------------------
  5402.      DATA  | 03    |   Block #  |    Data    |
  5403.             ---------------------------------
  5404.             2 bytes    2 bytes
  5405.             -------------------
  5406.      ACK   | 04    |   Block #  |
  5407.             --------------------
  5408.             2 bytes  2 bytes        string    1 byte
  5409.             ----------------------------------------
  5410.      ERROR | 05    |  ErrorCode |   ErrMsg   |   0  |
  5411.             ----------------------------------------
  5412.  
  5413.   Initial Connection Protocol for reading a file
  5414.  
  5415.      1. Host  A  sends  a  "RRQ"  to  host  B  with  source= A's TID,
  5416.         destination= 69.
  5417.  
  5418.      2. Host B sends a "DATA" (with block number= 1) to host  A  with
  5419.         source= B's TID, destination= A's TID.
  5420.  
  5421.  
  5422.  
  5423.  
  5424.  
  5425.  
  5426.  
  5427.  
  5428.  
  5429.  
  5430.  
  5431.  
  5432.  
  5433.  
  5434.   Sollins                                                         [Page 9]
  5435.   RFC 1350                    TFTP Revision 2                    July 1992
  5436.  
  5437.  
  5438.   Error Codes
  5439.  
  5440.      Value     Meaning
  5441.  
  5442.      0         Not defined, see error message (if any).
  5443.      1         File not found.
  5444.      2         Access violation.
  5445.      3         Disk full or allocation exceeded.
  5446.      4         Illegal TFTP operation.
  5447.      5         Unknown transfer ID.
  5448.      6         File already exists.
  5449.      7         No such user.
  5450.  
  5451.   Internet User Datagram Header [2]
  5452.  
  5453.      (This has been included only for convenience.  TFTP need not be
  5454.      implemented on top of the Internet User Datagram Protocol.)
  5455.  
  5456.        Format
  5457.  
  5458.       0                   1                   2                   3
  5459.       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  5460.      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5461.      |          Source Port          |       Destination Port        |
  5462.      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5463.      |            Length             |           Checksum            |
  5464.      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5465.  
  5466.  
  5467.      Values of Fields
  5468.  
  5469.  
  5470.      Source Port     Picked by originator of packet.
  5471.  
  5472.      Dest. Port      Picked by destination machine (69 for RRQ or WRQ).
  5473.  
  5474.      Length          Number of bytes in UDP packet, including UDP header.
  5475.  
  5476.      Checksum        Reference 2 describes rules for computing checksum.
  5477.                      (The implementor of this should be sure that the
  5478.                      correct algorithm is used here.)
  5479.                      Field contains zero if unused.
  5480.  
  5481.      Note: TFTP passes transfer identifiers (TID's) to the Internet User
  5482.      Datagram protocol to be used as the source and destination ports.
  5483.  
  5484.  
  5485.  
  5486.  
  5487.  
  5488.  
  5489.   Sollins                                                        [Page 10]
  5490.   RFC 1350                    TFTP Revision 2                    July 1992
  5491.  
  5492.  
  5493.   References
  5494.  
  5495.      [1]  USA Standard Code for Information Interchange, USASI X3.4-1968.
  5496.  
  5497.      [2]  Postel, J., "User Datagram  Protocol," RFC 768, USC/Information
  5498.           Sciences Institute, 28 August 1980.
  5499.  
  5500.      [3]  Postel, J., "Telnet Protocol Specification," RFC 764,
  5501.           USC/Information Sciences Institute, June, 1980.
  5502.  
  5503.      [4]  Braden, R., Editor, "Requirements for Internet Hosts --
  5504.           Application and Support", RFC 1123, USC/Information Sciences
  5505.           Institute, October 1989.
  5506.  
  5507.   Security Considerations
  5508.  
  5509.      Since TFTP includes no login or access control mechanisms, care must
  5510.      be taken in the rights granted to a TFTP server process so as not to
  5511.      violate the security of the server hosts file system.  TFTP is often
  5512.      installed with controls such that only files that have public read
  5513.      access are available via TFTP and writing files via TFTP is
  5514.      disallowed.
  5515.  
  5516.   Author's Address
  5517.  
  5518.      Karen R. Sollins
  5519.      Massachusetts Institute of Technology
  5520.      Laboratory for Computer Science
  5521.      545 Technology Square
  5522.      Cambridge, MA 02139-1986
  5523.  
  5524.      Phone: (617) 253-6006
  5525.  
  5526.      EMail: SOLLINS@LCS.MIT.EDU
  5527.  
  5528.  
  5529.  
  5530.  
  5531.  
  5532.  
  5533.  
  5534.  
  5535.  
  5536.  
  5537.  
  5538.  
  5539.  
  5540.  
  5541.  
  5542.  
  5543.  
  5544.   Sollins                                                        [Page 11]
  5545.   8.8.  Install Instructions
  5546.  
  5547.  
  5548.  
  5549.  
  5550.  
  5551.  
  5552.  
  5553.  
  5554.  
  5555.  
  5556.  
  5557.  
  5558.  
  5559.  
  5560.  
  5561.  
  5562.  
  5563.  
  5564.  
  5565.  
  5566.  
  5567.  
  5568.  
  5569.  
  5570.  
  5571.  
  5572.  
  5573.  
  5574.  
  5575.  
  5576.  
  5577.  
  5578.  
  5579.  
  5580.  
  5581.  
  5582.  
  5583.  
  5584.  
  5585.  
  5586.  
  5587.  
  5588.  
  5589.  
  5590.  
  5591.  
  5592.  
  5593.  
  5594.  
  5595.  
  5596.  
  5597.  
  5598.  
  5599.  
  5600.  
  5601.  
  5602.  
  5603.  
  5604.  
  5605.  
  5606.  
  5607.  
  5608.  
  5609.  
  5610.  
  5611.                        I N S T A L L A T I O N
  5612.  
  5613.   Overview of the installation process
  5614.   ====================================
  5615.  
  5616.   Due to it's nature this package requires at least two computer systems. One
  5617.   acts as a server, and at least one other will be setup as a diskless client.
  5618.   Therefore this installation guide is divided into four sections:
  5619.  
  5620.           1.) Compilation and installation of utility programs on the server
  5621.           2.) Create a netbootable image of the target operating system
  5622.           3.) Setup of the server
  5623.           4.) Setup of the client including building the bootrom
  5624.  
  5625.   The server has to support TCP/IP and certain protocols based on this network
  5626.   standard. Most likely this will be a Unix-type server. Though it's probably
  5627.   possible to also use servers running OS/2 or Windows-NT, for example, all
  5628.   server related programs in this package can currently only be compiled on
  5629.   a Unix-type host. This requirement is independed of the operating system
  5630.   which is later booted on the diskless client. Therefore even if you want
  5631.   to boot MS-DOS on your client(s) you need at least one Unix-type computer
  5632.   for program compilation and generation of all boot files. Lateron when all
  5633.   necessary files are built you can use any server you want.
  5634.  
  5635.   This package contains two main parts:
  5636.  
  5637.           1.) The bootrom source and binaries. This part gets installed on
  5638.               the diskless client. All binaries except for utility programs
  5639.               are already precompiled. There are no further user changeable
  5640.               or adjustable options in the sources so you don't have to have
  5641.               access to the 16 bit development tools in order to use the boot-
  5642.               rom. You can just use the binaries provided.
  5643.               In order for the bootrom to access the network card in your
  5644.               diskless client you need a driver. Currently the bootrom only
  5645.               supports so called packet drivers, which are normally used on
  5646.               MS-DOS systems to interface a network stack with the hardware.
  5647.               With this package only the packet driver binaries are required,
  5648.               so you don't need to recompile anything here as well. You can
  5649.               find precompiled packet drivers for many popular network cards
  5650.               on any SimTel FTP mirror (it's called Crynwr packet driver col-
  5651.               lection), and for those of you without internet access some of
  5652.               those packet driver binaries are included with this package.
  5653.               Another good source for a packet driver for your network card
  5654.               might be it's manufacturer. At least the well known manufacturers
  5655.               (3Com and SMC for example) provide packet drivers for their
  5656.               complete product line. Those manufacturer provided packet drivers
  5657.               are usually faster and easier to install than those from the
  5658.               Crynwr collection, and can sometimes determine the hardware
  5659.               configuration at runtime, which the Crynwr drivers can't. However,
  5660.               there is a limitation in that you can only use packet drivers
  5661.               which are COM-type executables. EXE-type programs are not
  5662.               supported yet.
  5663.  
  5664.           2.) A set of programs to generate netbootable images on the server.
  5665.               These programs are called mknbi-<os>, where <os> identifies the
  5666.               operating system which is lateron running on the diskless client.
  5667.               Currently only Linux and MS-DOS are supported.
  5668.  
  5669.   There is another requirement which should not leave unnoted. Although you
  5670.   can build a bootrom with slightly limited functionality which is less than
  5671.   16kB in size, the usual size for a bootrom will be between 16kB and 32kB.
  5672.   Therefore when you go shopping for a network card you should try to get
  5673.   one which is able to support 32kB EPROM's. This is standard on almost all
  5674.   cards from major manufacturers, but most cheap NE2000 are known to allow
  5675.   only a maximum of 16kB. Also note that some network cards from 3Com and SMC
  5676.   allow you to select ROM sizes of 32kB and more with their configuration
  5677.   programs, but can physically support only 16kB!
  5678.  
  5679.  
  5680.  
  5681.  
  5682.  
  5683.   Compilation and installation of utility programs on the server
  5684.   ==============================================================
  5685.  
  5686.  
  5687.   This package uses GNU's autoconf to configure the compilation process
  5688.   of the utility programs. You shouldn't have any problems to compile
  5689.   these programs on any Unix-type system.
  5690.  
  5691.           1.) Cd into the netboot directory and run ./configure. It's
  5692.               a configuration script generated by autoconf and checks
  5693.               for header files and system specific details. The mknbi
  5694.               utility programs contain some Intel assembler modules which
  5695.               lateron run on the diskless client. If you want to assemble
  5696.               these modules you need as86 and ld86, which you can get for
  5697.               free for Unix systems. However, there are preassembled files
  5698.               available so you actually don't need these two programs.
  5699.               configure checks for their existence and creates the Makefiles
  5700.               accordingly.
  5701.               For an explanation of the switches available to configure
  5702.               just run it with the --help option. Some additional switches
  5703.               are available:
  5704.  
  5705.                   --disable-mknbi-linux
  5706.                   --disable-mknbi-dos
  5707.  
  5708.               Choose these options if you don't want to create any of the
  5709.               corresponding mknbi utility programs. There is also another
  5710.               configure option:
  5711.  
  5712.                   --enable-bootrom
  5713.  
  5714.               Use this option only if you want to recompile the bootrom
  5715.               itself. If you want to use the precompiled binaries, you don't
  5716.               need to specify this switch. See the file INSTALL.bootrom
  5717.               about how to recompile the bootrom.
  5718.  
  5719.           2.) Check that all generated Makefiles and the config.h are correct
  5720.               for your system.
  5721.  
  5722.           3.) Compile all programs with
  5723.  
  5724.                   make clean
  5725.                   make
  5726.  
  5727.               This will compile all programs without those which you disabled
  5728.               during the configuration stage. IMPORTANT NOTE: Some Makefiles
  5729.               use ifdef, which not every make program understands. If you
  5730.               get an error from make (usually in the form: "missing delimiter")
  5731.               then get and install GNU make on your system! Especially System V
  5732.               systems are known to have this deficiency.
  5733.  
  5734.           4.) If you want to permanently install the utility programs on
  5735.               your server you can run
  5736.  
  5737.                   make install
  5738.  
  5739.               This will also install the corresponding man pages for later
  5740.               reference. However, it's perfectly ok to skip this step and
  5741.               run the mknbi program from their source directories. But please
  5742.               note that they are just called "mknbi" within their source
  5743.               directories. Therefore if you read further down to run mknbi-dos,
  5744.               you have to use "./mknbi-dos/mknbi" instead if you didn't install
  5745.               the programs using 'make install'.
  5746.  
  5747.  
  5748.  
  5749.  
  5750.  
  5751.   Create a netbootable image of the target operating system
  5752.   =========================================================
  5753.  
  5754.  
  5755.   This step of the installation process depends on which operating you
  5756.   want to boot on your diskless clients. Everything described in this
  5757.   chapter does not depend on working on a Linux system. You can use any
  5758.   UNIX type system to create the netbootable images.
  5759.  
  5760.   Linux:  With Linux you have far too many options to list them all in
  5761.           this text. Please refer to the mknbi-linux man page for all
  5762.           details. I will only describe the most common ways to setup a
  5763.           diskless Linux client here.
  5764.           First you have to decide where the Linux client is going to
  5765.           mount it's root filesystem from. This can either be a directory
  5766.           on an NFS server or a ram disk. Setup your Linux kernel accordingly.
  5767.           To use a root filesystem on an NFS server you should include TCP/IP
  5768.           network support into the kernel together with support for NFS file-
  5769.           systems. You cannot load this NFS support using a module as it has
  5770.           to be available at bootup. Additionally you also have to select
  5771.           NFSROOT support during kernel configuration. However, you don't
  5772.           need BOOTP or RARP support. Accordingly if you want to use ramdisk
  5773.           support the filesystem type you are going to use on the ramdisk has
  5774.           to be permanently compiled into the kernel. Also initrd has to be
  5775.           included in that case.
  5776.  
  5777.  
  5778.           1.) Configuring for NFS root filesystem.
  5779.  
  5780.           Next copy your Linux kernel into the current directory and run
  5781.           mknbi-linux:
  5782.  
  5783.                   mknbi-linux -d rom -i rom -k zImage -o bootImage
  5784.  
  5785.           This supposes that your kernel image is called zImage, and gives
  5786.           you a netbootable image named bootImage.
  5787.  
  5788.  
  5789.           2.) Configuring for root filesystem on ramdisk
  5790.  
  5791.           If you want to use a ramdisk as a root device you have to create
  5792.           a ramdisk image first. Probably the easiest way to setup such an
  5793.           image is to use a floppy, though you can also use the loopback
  5794.           device if you are working on a Linux host. First format the floppy
  5795.           and make a filesystem on it. Next copy all programs and files onto
  5796.           it which you want to have on the root filesystem of the diskless
  5797.           client lateron. You should then test your root floppy. To do this
  5798.           copy your kernel onto another floppy with dd and set it's root device
  5799.           to floppy using rdev:
  5800.  
  5801.                   dd if=zImage of=/dev/fd0
  5802.                   rdev /dev/fd0 /dev/fd0
  5803.  
  5804.           Now boot your diskless client using this boot disk. After the kernel
  5805.           started up, it will ask you to insert the root floppy and to press
  5806.           enter. Your root floppy will be mounted.
  5807.           If everything works as you intended, you can now create a netbootable
  5808.           image. Re-insert the root floppy into your server system (or whereever
  5809.           this netboot directory is located), and type:
  5810.  
  5811.                   dd if=/dev/fd0 of=ramImage
  5812.                   gzip -9 ramImage
  5813.                   mknbi-linux -d ram -i rom -r ramImage.gz -k zImage -o bootImage
  5814.  
  5815.           Like above this will now give you a file bootImage with the netbootable
  5816.           Linux kernel image in it.
  5817.  
  5818.  
  5819.   MS-DOS: To boot DOS on your diskless client you have to have MS-DOS Version
  5820.           5.0 or higher. Windows-95 has an internal DOS called version 7.0, so
  5821.           it should be no problem to use it as well. Older MS-DOS versions
  5822.           will definitely not work. I haven't had a chance to test any other
  5823.           DOS like Novell-DOS or DR-DOS. Give them a try, and tell me.
  5824.  
  5825.           First you have to create a directory which contains all the files
  5826.           the client will see on it's boot drive (either A: or C:). This
  5827.           can either be the root directory on a DOS floppy or any directory
  5828.           on the system on which you installed mknbi-dos. In the first case
  5829.           it has to be a floppy which contains a bootable DOS system, i.e.
  5830.           which has been created with
  5831.  
  5832.                   format a: /s
  5833.  
  5834.           on a DOS system. If the directory resides on a UNIX system, you
  5835.           have to copy the two system files msdos.sys and io.sys, which are
  5836.           part of MS-DOS, into it by yourself. To do this I recommend using
  5837.           mread of the MTools, which are freely available for almost every
  5838.           UNIX system.
  5839.  
  5840.           After you created the directory or floppy which lateron becomes
  5841.           the clients boot drive, you should copy all other necessary files
  5842.           into it. This will probably include programs to setup a network
  5843.           environment on the client. When editing text files for the client
  5844.           please note that they usually have to be in MS-DOS format with
  5845.           lines ending in Carriage-Return/Linefeed instead of just Linefeed
  5846.           as it is common on UNIX systems. When you are finished setting up
  5847.           the clients boot directory, first get a copy of the floppy disk
  5848.           image, and then run mknbi-dos to create a netbootable image:
  5849.  
  5850.                   dd if=/dev/fd0 of=fdImage
  5851.                   mknbi-dos -r fdImage -o bootImage
  5852.  
  5853.           This assumes that you inserted the boot floppy into the fd0 drive
  5854.           of your UNIX system, and will create a file named bootImage. If you
  5855.           used a UNIX directory, substitute fdImage with it's name. mknbi-dos
  5856.           will automatically detect wether it is a directory, an ordinary
  5857.           file or a block device.
  5858.  
  5859.           By default mknbi-dos creates a netbootable image, which lateron
  5860.           mounts the ram disk as the A: drive on your client. If you want
  5861.           to mount the ram disk as C: instead, you should include the '-c'
  5862.           switch to the call of mknbi-dos.
  5863.           The difference between mounting the ram disk as a floppy (A:) or
  5864.           hard disk (C:) is, that with the floppy option the ram disk can
  5865.           be removed lateron, maybe after a network redirector has been
  5866.           loaded, which makes the ram disk obsolete. This is not possible
  5867.           with a virtual hard disk drive. On the other hand side, when using
  5868.           the ram disk as C: you can specify a different ramdisk size with
  5869.           the '-s' option. Please refer to the man page for mknbi-dos for
  5870.           further information.
  5871.  
  5872.  
  5873.  
  5874.  
  5875.   Setup of the server
  5876.   ===================
  5877.  
  5878.  
  5879.   Setup of the server depends on the kind of server you are using. There-
  5880.   fore all further explanations in this chapter can only serve as a general
  5881.   guide. You should consult your server's documentation as the final autho-
  5882.   rity.
  5883.  
  5884.   When the bootrom starts on the client it first tries to query a bootp
  5885.   server for information like IP numbers and the name of the boot image
  5886.   file. Such a bootp server program is usually called bootpd. Most sun
  5887.   servers use a program called bootparamd instead. Note that you _cannot_
  5888.   use bootparamd as a substitute for bootpd as both programs use different
  5889.   protocols. Install a publicly available bootpd instead on your sun.
  5890.   Next you should copy the bootImage file, which you have created in the
  5891.   previous step above, into a publicly accessible directory (called /boot
  5892.   for example). If you want to boot more than one diskless client you can
  5893.   use the same bootImage file for every client. However, if you configured
  5894.   for a ramdisk (with Linux or DOS) and the ramdisk image contains different
  5895.   files or information for every client, you will obviously also need a
  5896.   different bootImage file for each client.
  5897.   Then you need to setup a boot description file for bootpd, which is
  5898.   usually called /etc/bootptab. Consult your server's documentation for
  5899.   further information. However, the entries in this file will usually
  5900.   look something like this for every diskless client:
  5901.  
  5902.   client1:hd=/boot:vm=auto:ip=192.109.225.66:\
  5903.           :ht=ethernet:ha=004001417173:\
  5904.           :bf=bootImage-client1:rp=/boot/client1/root
  5905.  
  5906.   which you created in the previous step. Therefore the full pathname for
  5907.   the bootImage file for the diskless system called "client1" will be
  5908.  
  5909.           /boot/bootImage-client1
  5910.  
  5911.   with this sample entry. The 'ip' tag specifies the IP address of the client,
  5912.   ware address. The 'vm=auto' tag tells bootpd to use the same vendor encoding
  5913.   as the bootrom. If your diskless client is going to use it's root filesystem
  5914.   via NFS you should also specify the directory on the server which gets mounted
  5915.   lateron with the 'rp' tag. However, if your diskless client uses a ramdisk,
  5916.   you can omit 'rp'. When you choose to use the standard bootrom with ANSI
  5917.   display driver (see below for further information) you could also setup
  5918.   a menu for letting the user select different boot image files. See the
  5919.   additional file INSTALL.menu about how to use this feature. But I recommend
  5920.   to first use the standard way of setting up the bootptab file as described
  5921.   above. You can always add a user menu lateron.
  5922.   Of course you should also remember to get bootpd running on the server,
  5923.   either on bootup from /etc/rc or some similar mechanism, or from inetd.
  5924.   Again, see your server's documentation about how to do this.
  5925.  
  5926.   The next step preformed by the bootrom after querying the bootp server is
  5927.   to load in the boot image file specified by the 'hd' and 'bf' tags in
  5928.   /etc/bootptab. To do this a protocol named tftp is used. Therefore you
  5929.   will next have to setup a daemon process for this protocol on your server.
  5930.   Such a daemon is usually called tftpd, and you should again remember to
  5931.   get tftpd running, usually via inetd. Since the TFTP protocol is very
  5932.   insecure access to the tftpd server is usually restricted, either within
  5933.   tftpd itself, or with a TCP/IP wrapper like tcpd. tcpd for example uses
  5934.   host access control tables which are stored in /etc/hosts.allow and
  5935.   /etc/hosts.deny. See tftpd(8), tcpd(8) and hosts_access(5) as well as
  5936.   your server's documentation for further information.
  5937.  
  5938.   If you selected a ramdisk for the diskless client's root directory you are
  5939.   now finished with the server setup. But if your client is going to use NFS
  5940.   (either directly like with booting Linux, or by using programs included on
  5941.   the ram disk) you should now setup everything which is necessary for moun-
  5942.   ting an NFS directory on the server. This usually involves running several
  5943.   programs: portmap, mountd, nfsd and optionally ugidd. portmap usually doesn't
  5944.   require editing any configuration files. But for mountd and nfsd you need
  5945.   to specify the permissions which allow the client to access the required
  5946.   directories on the server. These permissions are usually set with a file
  5947.   called /etc/exports. Typically it looks like this for our sample client:
  5948.  
  5949.   #
  5950.   #  Export directories for client1 (diskless workstation)
  5951.   #
  5952.   /boot/client1/root              client1(rw,link_absolute)
  5953.   /boot/client1/usr               client1(rw,link_absolute)
  5954.  
  5955.   If you use 'map-daemon' to map UID and GID numbers on the server you
  5956.   should remember to also configure and run ugidd on the server. Please
  5957.   consult your server's documentation for further information regarding
  5958.   setup of NFS exports. You might also want to check out the portmap(8),
  5959.   nfsd(8), mountd(8) and ugidd(8) man pages. Also remember that access
  5960.   to any of these services might be restricted with tcpd on your server.
  5961.  
  5962.   Another important step is to fill up the root directory for the disk-
  5963.   less client. It has to contain all files necessary for the client to
  5964.   startup and mount further directories via NFS (like a /usr filesystem
  5965.   as specified in the /etc/exports example above). How to setup this
  5966.   root directory is far beyond the scope of this documentation. Just one
  5967.   hint: if your server is _not_ running Linux, you should be aware of
  5968.   major/minor number assignments in the /boot/client1/root/dev directory.
  5969.   For example, simply using mknod on an AIX server will eventually give
  5970.   you wrong major/minor number when the directory is later exported to
  5971.   a Linux diskless client. With some configurations AIX will add a certain
  5972.   offset to all major numbers which makes them unusable for Linux. Refer
  5973.   to your server's manuals for further information. You might also find
  5974.   some useful hints in the file Documentation/nfsroot.txt in the Linux
  5975.   source tree, if your diskless client is booting Linux.
  5976.  
  5977.  
  5978.  
  5979.  
  5980.  
  5981.  
  5982.   Setup of the client including building the bootrom
  5983.   ==================================================
  5984.  
  5985.  
  5986.   Until now you only had to work on the server (with the exception of maybe
  5987.   booting your diskless client from a diskette to check the correctness of
  5988.   the root filesystem). As the last step we can now go on and setup the
  5989.   diskless client itself.
  5990.  
  5991.   The first step is to configure the network card in the diskless client. For
  5992.   this refer to the manual which came with the network card. Some cards require
  5993.   setting of jumpers. Others have setup programs which have to be run. After
  5994.   configuring the network interface write down all necessary hardware parameters
  5995.   like I/O addresses, memory addresses, interrupt line number or DMA channel
  5996.   numbers, as you might need this information lateron in the configuration
  5997.   process.
  5998.  
  5999.   Next change into the netboot directory on your UNIX system (where this
  6000.   documentation file is in) and type
  6001.  
  6002.           make bootrom
  6003.  
  6004.   This will compile all necessary utility programs and then run the
  6005.   configuration program. It will first ask you which bootrom kernel you
  6006.   want to use. The minimal kernel is necessary for network cards which
  6007.   only allow up to 16 kB ROM size, and kernel86 can be used to boot on
  6008.   16-bit systems (older than 386), for example for booting MS-DOS. Unless
  6009.   you have any special requirements you should choose the standard kernel.
  6010.   Then you have to specify the packet driver to use for your network card.
  6011.   You can either choose one of the supplied drivers, or provide your own.
  6012.   If you want to provide your own driver you have to give the full path
  6013.   name of the packet driver binary on your server, and also specify all
  6014.   necessary options to run it. Don't specify any options here which switch
  6015.   the packet driver into windows mode or which allow it to work for disk-
  6016.   less systems. Those options are for Novell network bootroms only, and
  6017.   are not necessary for this bootrom.
  6018.   If you use one of the drivers in the list shown, the configuration
  6019.   program will ask you about all necessary hardware information to run
  6020.   the packet driver which you selected. This usually includes the I/O
  6021.   address of the network card, it's interrupt number and a DMA channel
  6022.   number. Note that only that information is requested which is really
  6023.   necessary. You should have your network card information handy when
  6024.   entering this information. Some packet drivers are able to determine
  6025.   hardware related information at runtime and therefore don't require
  6026.   any further information.
  6027.  
  6028.   If you did not select the minimal kernel, the configuration program
  6029.   is next going to ask you wether you want to include some additional
  6030.   drivers. First it lets you select the ANSI display driver. This will
  6031.   allow you to draw nice menus on the screen with the standard bootrom
  6032.   kernel. You can then select the packet driver debugging program. It's
  6033.   an additional module to trace network problems and is usually not re-
  6034.   quired. It shows you the first couple bytes of all packets (where
  6035.   the UDP/IP headers are encoded) going through the packet driver
  6036.   during boot time of the diskless client. Only select this debugging
  6037.   module if you run into problems during the initial network boot process
  6038.   of the bootrom _and_ you know how to decode the UDP/IP header infor-
  6039.   mation. The configuration program will also ask you about any additional
  6040.   modules you want to install into the bootrom. These modules have to
  6041.   be standard DOS COM-type programs, and can, for example, preset
  6042.   the network card to a special state before the packet driver starts,
  6043.   or setup a serial line to support booting over a PPP or SLIP connec-
  6044.   tion (the Crynwr packet driver collection also contains a SLIP packet
  6045.   driver which is not provided in this package). However note that the
  6046.   total size of the resulting bootrom image can't be larger than 64kB.
  6047.  
  6048.   After you answered all questions the configuration program is creating
  6049.   the bootrom according to your specifications. It first combines the
  6050.   bootrom kernel with all selected modules, then compresses the resulting
  6051.   file and adds the bootrom startup code. When the configuration program
  6052.   has finished you will find two new files in the current directory:
  6053.  
  6054.           image.flo - this file can be written onto a floppy using dd
  6055.           image.rom - image to be burned into an EPROM
  6056.  
  6057.   You should now copy image.flo onto a floppy using
  6058.  
  6059.           dd if=image.flo of=/dev/fd0
  6060.  
  6061.   and then boot your diskless client using this floppy. If you have setup
  6062.   everything (including your network card) you will see the bootrom code
  6063.   starting, querying the bootp server and loading the boot image file. When
  6064.   everything works as required you can then go on and burn the file image.rom
  6065.   into an EPROM. Please consult the manual of your EPROM burner how to do
  6066.   this. It usually requires converting the image file into a special format
  6067.   (Intel or Motorola hex format for example). Insert the EPROM into the
  6068.   socket on your network card and turn on the diskless system. You should
  6069.   now see the bootrom coming up.
  6070.   Another way of getting the bootrom code into your client is using the
  6071.   Flash-EPROM card (called FlashCard), for which you can find a schematic
  6072.   and PCB layout in this package. You can use image.rom directly to burn
  6073.   it into FlashCard - there is no hex conversion necessary. About how to
  6074.   use and program the FlashCard see the documentation in the FlashCard
  6075.   directory.
  6076.  
  6077.   In case you want to create new bootroms without always having the sources
  6078.   around, you can now install the binaries created during the configuration
  6079.   step with the command
  6080.  
  6081.           make bootrom_install
  6082.  
  6083.   This will copy all necessary binaries for creating new bootroms into the
  6084.   directory $prefix/lib/netboot where $prefix is either /usr/local or the
  6085.   prefix you specified with running GNU configure. The typical path would
  6086.   be /usr/local/lib/netboot. It will also install the makerom script into
  6087.   $prefix/bin, so you just have to type makerom to create a new bootrom.
  6088.  
  6089.  
  6090.  
  6091.  
  6092.  
  6093.  
  6094.   Appendix: Recompiling the bootrom
  6095.   ========
  6096.  
  6097.  
  6098.   If you want to recompile the bootrom for some reason, checkout the file
  6099.   INSTALL.bootrom for further information. However, you don't need to re-
  6100.   compile the bootrom in order to just use it!
  6101.  
  6102.  
  6103.  
  6104.  
  6105.  
  6106.   8.9.  Troubleshoot Problems
  6107.  
  6108.  
  6109.  
  6110.  
  6111.  
  6112.  
  6113.  
  6114.  
  6115.  
  6116.  
  6117.  
  6118.  
  6119.  
  6120.  
  6121.  
  6122.  
  6123.  
  6124.  
  6125.  
  6126.  
  6127.  
  6128.  
  6129.  
  6130.  
  6131.  
  6132.  
  6133.  
  6134.  
  6135.  
  6136.  
  6137.  
  6138.  
  6139.                   T R O U B L E S H O O T I N G
  6140.  
  6141.   If you run into any problem during installation or when using this
  6142.   package, please first read the following text and all other relevant
  6143.   documentation. Especially you should consult your server's documen-
  6144.   tation if you run into problems setting up your server. Also refer
  6145.   to your network card's user manual or the documentation for the
  6146.   operating systems of the diskless clients accordingly. However, if
  6147.   you still can't solve the problem on your own, you can send me an
  6148.   email to
  6149.  
  6150.                   gero@gkminix.han.de
  6151.  
  6152.   Users able to speak German can send me the mail in german. Otherwise
  6153.   please write in english. I already received some emails in so poor
  6154.   english that I haven't been able to even understand the problem. I
  6155.   can't help you in that case. And please excuse me that I can't answer
  6156.   questions sent to me by standard mail or telephone calls. I just don't
  6157.   have the time for dealing with that.
  6158.   If you decided to send me an email please describe your problem as
  6159.   exactly as possible. It usually helps to send me relevant portions
  6160.   of configuration files (I have to pay for my internet access by myself
  6161.   so please keep quotings as short as possible). Especially with problems
  6162.   with the bootrom it usually helps to _exactly_ write down the screen
  6163.   output, not only but including any error messages. Also state as exact
  6164.   as possible how you created the problem so that I can try to simulate
  6165.   it on my own hardware.
  6166.   Additionally please note that I can't help you with every problem with
  6167.   your server, as there are so many different systems on the market. The
  6168.   same is true for problems with network cards. I just don't have the
  6169.   financial capabilities to buy any card on the market for testing. Per-
  6170.   sonally I'm using NE2000 and WD8013 cards, so I can probably help you
  6171.   with those.
  6172.   If you find a problem which looks like a bug in the code I really
  6173.   appreciate a short notice from you. And if you have a fix for the bug
  6174.   I would even more appreciate your message.
  6175.   Besides contacting me directly there also exists a mailing list related
  6176.   to network booting which you can subscribe to. Write a mail with the
  6177.   message 'subscribe netboot' in it's body to majordomo@baghira.han.de
  6178.   (the subject of the mail doesn't matter). The readers of the mailing
  6179.   list should also be able to help you with any problem you might have
  6180.   while setting up a diskless client. And besides that I'm also going
  6181.   to announce any new version of this netboot package to the mailing
  6182.   list.
  6183.  
  6184.  
  6185.  
  6186.  
  6187.   Problem: My operating system OS/XY is not supported by netboot
  6188.  
  6189.           I would gladly provide support for every operating system on the
  6190.           market, but I don't have the resources for doing this. However,
  6191.           if you want a particular operating system to be supported, you
  6192.           should get in contact with me. In any case you will have to provide
  6193.           me with a valid and licensed copy of that operating system. You are
  6194.           also invited to write your own boot loader, and send it to me for
  6195.           inclusion into netboot under the terms of the GNU GPL.
  6196.  
  6197.  
  6198.  
  6199.   Problem: While trying to build a bootrom I get a compiler error
  6200.  
  6201.           The installation scripts require to compile a couple of utility
  6202.           programs which are only required during building the bootrom.
  6203.           They should compile on any Unix-type system, so if you get an
  6204.           error please report it to me, even when you are able to fix it
  6205.           yourself, so that I can include a patch for future releases.
  6206.  
  6207.  
  6208.  
  6209.   Problem: I get a an error from make saying something like "missing delimiter"
  6210.  
  6211.           Some of the Makefiles use ifdef's, which older make programs don't
  6212.           understand. Even some more "modern" systems like SCO Open-Server 5
  6213.           have this problem. In that case you will have to get and install GNU
  6214.           make on your system (which is the better choice anyway).
  6215.  
  6216.  
  6217.  
  6218.   Problem: The bootrom doesn't startup at all
  6219.  
  6220.           Either you have a floppy in your diskette drive or you have
  6221.           a hard disk installed with a partition marked as active, and the
  6222.           bootrom has been built so that it lets the BIOS look for active
  6223.           partitions first. Both conditions let the system boot from the
  6224.           bootable media instead of using the bootrom. Just remove the
  6225.           floppy or use fdisk to mark all partitions as unbootable (e.g.
  6226.           inactive). Alternatively you can also build the bootrom so that
  6227.           it does not allow the BIOS to look for bootable partitions. The
  6228.           program which actually creates the bootrom ('makerom', it gets
  6229.           called when you run 'make bootrom') will ask you about this right
  6230.           after selecting the bootrom kernel image.
  6231.  
  6232.  
  6233.  
  6234.   Problem: The bootrom behaves strange during startup, and may even hangup
  6235.            the whole system
  6236.  
  6237.           If you compiled the mknbi programs on a system with big endian
  6238.           byte order (like Motorola or PPC systems) this might indicate
  6239.           that the configuration program couldn't find the correct byte
  6240.           order. It might also be that there is a bug in the byte ordering
  6241.           code. Some systems like SPARCs also do not allow data accesses at
  6242.           misaligned addresses. 'configure' should usually find out about
  6243.           these conditions. In any case, if 'configure' is not able to pro-
  6244.           perly detect what kind of system you are using, edit the file
  6245.           config.h by hand and try it again. Please report this condition,
  6246.           and also note which system you used for installation.
  6247.  
  6248.  
  6249.  
  6250.   Problem: The packet driver is not able to start properly
  6251.  
  6252.           First check what error message the packet driver prints. Usually
  6253.           this problem is a result of an incorrect setup of the network
  6254.           card, so check that it uses an I/O address, interrupt line and DMA
  6255.           channel (if applicable) of it's own, and that the packet driver
  6256.           uses the correct values. Another common problem with ethernet
  6257.           cards which use shared memory (like WD80?3 cards) is an overlap-
  6258.           ping of this shared memory with the rom area used by the bootrom.
  6259.           Select a different shared memory address in that case. If that's
  6260.           ok you should next check that you configured the packet driver
  6261.           correctly with the bootrom configuration program. Usually the
  6262.           packet driver prints out what it expects the hardware to look
  6263.           like so you can use this information to check up your setup.
  6264.  
  6265.  
  6266.  
  6267.   Problem: The bootrom tells me that there is not enough memory but I have
  6268.            xx megabytes installed
  6269.  
  6270.           This problem is a result of the fact that the BIOS starts the
  6271.           bootrom in the processor's real mode. The bootrom is therefore
  6272.           only able to access the lower 1 megabyte of memory, regardless
  6273.           of how much you installed. And 384kB of this is reserved for
  6274.           ROM's and the video memory, so there is only 640kB left. Unfor-
  6275.           tunately some systems even reserve memory from these lower 640kB
  6276.           for internal BIOS data. This is called extended BIOS data area,
  6277.           and known to be used on most PS/2 systems. But also some other
  6278.           BIOSes use such an extended BIOS data area, which is usually
  6279.           selectable in the system's setup. Therefore you should try to
  6280.           deselect such a feature. If that's not possible you are out
  6281.           of luck - sorry.
  6282.  
  6283.  
  6284.  
  6285.   Problem: The bootrom doesn't receive a bootp answer and just hangs printing
  6286.            dots
  6287.  
  6288.           First you should check if bootpd runs on your server or is started
  6289.           properly from inetd. Then check that the server's /etc/bootptab is
  6290.           setup correctly. Especially the hardware address and the client's
  6291.           IP address and name have to be correct.
  6292.           Most bootp servers have the ability to write debugging information
  6293.           into a log file. Use that feature to verify that your server really
  6294.           receives bootp requests from the client's bootrom and sends out a
  6295.           valid answer. Also check for error messages in the log file. Even
  6296.           if your bootpd doesn't write into a seperate log file it might use
  6297.           syslog on your system, so find the log file name from your syslogd
  6298.           configuration file and check for errors.
  6299.           If you are able to use a network tracing program like tcpdump you
  6300.           can check if the bootrom sends out correct requests and that the
  6301.           server is answering correctly. In that case it is more likely to
  6302.           be a problem in the bootrom, so you should create a new bootrom
  6303.           image with the packet driver debugging module included. You should
  6304.           then see the bootrom's request packets going out, and the server's
  6305.           answers coming in. If there are no packets coming in although you
  6306.           verified that the server is sending out correct replies there might
  6307.           be a problem with your network card. Did you set it up correctly,
  6308.           is a cable connected (no kidding, those things really happen)?
  6309.           If everything fails try to boot the diskless client with the
  6310.           intended operating system and try to access the network card
  6311.           using that operating system's tools.
  6312.           If the server is not sending out answer packets, but the bootpd
  6313.           logfiles indicates correct answers, it might be a problem with
  6314.           the arp setup on your server. Normally arp shouldn't be a concern
  6315.           for you. However, some older versions of bootpd for Linux had
  6316.           problems here, which could be solved by setting the kernel arp
  6317.           table manually.
  6318.  
  6319.  
  6320.  
  6321.   Problem: The bootrom did get a bootp answer but is not able to load the
  6322.            bootimage file
  6323.  
  6324.           This is likely to be a problem with the tftpd setup on the server.
  6325.           Does tftpd run when you startup the bootrom code? If not check
  6326.           that inetd is configured correctly. Also there might be a TCP/IP
  6327.           wrapper running on your server which might prohibit access to
  6328.           the tftp service (which is known to be very insecure and therefore
  6329.           a candidate for getting started by an internet security wrapper
  6330.           like tcpd). Check any access configuration files for tcpd.
  6331.           Furthermore tftpd has to be able to access the bootimage file. It
  6332.           usually runs as a user with very low priviliges because of security
  6333.           reasons and might not be allowed to read the bootimage file, so
  6334.           you should check and set the bootimage file's permissions correctly.
  6335.  
  6336.  
  6337.   Problem: The boot image loader reports an error
  6338.  
  6339.           Congratulations! You just discovered a bug in the boot loader.
  6340.           Please report it to me.
  6341.  
  6342.  
  6343.  
  6344.   Problem: When I'm using the bootrom menu to load a Unix system off the local
  6345.            hard disk, it reports some weird error messages to me (especially,
  6346.            SCO Unix says that it's not able to open boot device). However,
  6347.            booting without the bootrom works without a problem.
  6348.  
  6349.           Some operating systems, especially Unix like systems, read the
  6350.           partition table after booting and try to find their own boot par-
  6351.           tition. When using the bootrom, it's not necessary to mark the
  6352.           Unix partition as bootable, so the Unix startup loader fails.
  6353.           To solve this problem, mark the Unix partition active with some
  6354.           fdisk program. To avoid that it starts running instead of the
  6355.           bootrom, create the bootrom so that it does not allow the BIOS
  6356.           to search for boot partitions on the installed hard disks (the
  6357.           'makerom' program, which gets run when you do a 'make bootrom',
  6358.           will ask you about this right after selecting a kernel image).
  6359.  
  6360.  
  6361.  
  6362.   Problem: I'm loading Linux onto my diskless client and the kernel tells
  6363.            me to insert a root floppy and press enter
  6364.  
  6365.           First you should check that you built your kernel correctly. It
  6366.           should have support for the root filesystem built in. If you want
  6367.           to use an NFS mounted directory as root the kernel should have
  6368.           TCP/IP support installed. Also it has to have a driver for your
  6369.           network card built in, and NFS and NFSROOT have to be both speci-
  6370.           fied. When using a ramdisk it's support has to be compiled in
  6371.           as well as support for the filesystem with which you formatted
  6372.           the ramdisk image. Please note that the loaded kernel is not
  6373.           able to use modules at bootup time (only _after_ the root file-
  6374.           system has been mounted, but not before), so everything has to
  6375.           be compiled in.
  6376.  
  6377.           If the kernel is not able mount it's root via NFS, this might
  6378.           have many different reasons. It requires all addresses in the
  6379.           /etc/bootptab file to be correct, and the access rights on the
  6380.           server have to be set correctly - not only in /etc/exports but
  6381.           also the permissions for the directory to get mounted. If that's
  6382.           correct check that a portmapper is running on the server, and
  6383.           that it registered the mountd and nfsd services correctly. You
  6384.           can usually do this by running the command
  6385.  
  6386.                           rpcinfo -p
  6387.  
  6388.           Note that services are only listed here if their associated server
  6389.           process is really running. The rpcinfo output should then look
  6390.           something like this:
  6391.  
  6392.                      program vers proto   port
  6393.                       100000    2   tcp    111  portmapper
  6394.                       100000    2   udp    111  portmapper
  6395.                       100003    2   udp   2049  nfs
  6396.                       100003    2   tcp   2049  nfs
  6397.                       100005    1   udp    663  mountd
  6398.                       100005    1   tcp    665  mountd
  6399.  
  6400.           However, the port numbers might be different.
  6401.  
  6402.           When the kernel starts mounting the NFS root directory it prints
  6403.           out the name of that directory on the server. It should be the
  6404.           same as the one configured in /etc/bootptab. Check that it's
  6405.           correct. If not you can try to use the -d option with mknbi-linux
  6406.           to specify the name explicitely.
  6407.  
  6408.           If the kernel gets an error from the server's nfsd, it prints
  6409.           a number which is defined according to the NFS protocol. The
  6410.           most commonly occurring numbers are:
  6411.  
  6412.                    1  -  permission denied to access directory
  6413.                    2  -  directory doesn't exist
  6414.                    5  -  I/O error on server filesystem
  6415.                   13  -  nfsd is unable to access directory
  6416.                   20  -  path name is not a directory
  6417.                   63  -  path name is too long
  6418.  
  6419.           Note that some nfsd and mountd programs only read /etc/exports
  6420.           on startup. If you changed this file afterwards, you will have
  6421.           to restart both daemons. Additionally, with nfsd versions for
  6422.           Linux earlier than 2.1 you will have problems with special files
  6423.           like UNIX domain sockets or block/character special files on
  6424.           your NFS partitions. You should therefore use the latest avai-
  6425.           lable versions.
  6426.  
  6427.  
  6428.  
  6429.   Problem: The Linux kernel mounts it's root correctly but doesn't give me
  6430.            a login prompt.
  6431.  
  6432.   1.)     This might be the result of an incorrect setup of the root file-
  6433.           system (see No. 2 below). However, it's also possible that your
  6434.           server reported the wrong major/minor numbers for the console device
  6435.           even though you specified them correctly in the NFS mounted root
  6436.           directory. I know of this problem with AIX and HP-UX servers,
  6437.           but there might exist others as well which don't transfer special
  6438.           devices via NFS as Linux requires it. One solution to solve this
  6439.           problem is to boot the diskless client with a ramdisk image as
  6440.           it's root, and then mount the should-be-root directory on the
  6441.           server using NFS. Then you can create the special files in the
  6442.           dev directory using Linux's mknod program, and use the NFS root
  6443.           mounting bootimage again.
  6444.           Another way is to try to find out, how the server operating system
  6445.           encodes major/minor numbers on it's own filesystem. For example,
  6446.           HP-UX uses a 32 bit device number, with the 8 highest bits being
  6447.           the major number, and the lower 24 bits being the minor device
  6448.           number:
  6449.  
  6450.                   major << 24 | minor   ==>   aaaaaaaabbbbbbbbbbbbbbbbbbbbbbbb
  6451.  
  6452.           In this representation (a) means a bit of the major number, and
  6453.           (b) means a bit of the minor number. Linux uses the following
  6454.           scheme instead:
  6455.  
  6456.                   major << 8 | minor    ==>   0000000000000000aaaaaaaabbbbbbbb
  6457.  
  6458.           The NFS protocol now transfers these 32 bits just as they are,
  6459.           without any further interpretation regarding major/minor numbers.
  6460.           That means, that all relevant bits in the Linux representation
  6461.           fit into the minor number on HP-UX. Therefore, if you create a
  6462.           device on the HP-UX server, you have to alway give it a major
  6463.           number of zero and compute the minor number the way mentioned
  6464.           above for Linux. For example, to let Linux see a device 5/2 in
  6465.           it's NFS-mounted /dev directory, you can compute the minor device
  6466.           number on HP-UX as
  6467.  
  6468.                   5 << 8 | 2    ==>  1282
  6469.           So the device to create on the HP-UX server is 0/1282. This will
  6470.           let Linux see 5/2 after the filesystem is mounted with NFS.
  6471.  
  6472.   2.)     Another reason for this problem might be that the init process
  6473.           doesn't get started at all. This can be a result of incorrect
  6474.           shared libraries, which the client might see but without a proper
  6475.           ld.so.cache file. Or the shared libraries are not reachable by
  6476.           the client at all. Bruce Janson and Markus Gutschke collected a
  6477.           good list of possibilities, which you should check out:
  6478.  
  6479.                   - you do not have a private copy of the /, /etc, /var, ...
  6480.                     directories
  6481.  
  6482.                   - your /dev directory is missing entries for /dev/zero and/or
  6483.                     /dev/null or is sharing device entries from a server that uses
  6484.                     different major and minor numbers (i.e. a server that is not
  6485.                     running Linux - see above).
  6486.  
  6487.                   - your /lib directory is missing libraries (most notably libc*
  6488.                     and/or libm*) or does not have the loader files ld*.so*
  6489.  
  6490.                   - you neglected to run ldconfig to update /etc/ldconfig.cache
  6491.                     or you do not have a configuration file for ldconfig.
  6492.  
  6493.                   - your /etc/inittab and/or /etc/rc.d/* files have not been
  6494.                     customized for the clients.
  6495.  
  6496.                   - your kernel is missing some crucial compile-time feature
  6497.                     (such as NFS filesystem support, booting from the net, trans-
  6498.                     name (optional), ELF file support, networking support, driver
  6499.                     for your ethernet card).
  6500.  
  6501.                   - missing init executable (in one of the directories
  6502.                     known by the kernel: /etc, /sbin, ?)
  6503.  
  6504.                   - missing /etc/inittab
  6505.  
  6506.                   - missing /dev/tty?
  6507.  
  6508.                   - missing /bin/sh
  6509.  
  6510.                   - system programs that insist on creating/writing to files
  6511.                     outside of /var (mount and /etc/mtab* is the canonical
  6512.                     example)
  6513.  
  6514.  
  6515.  
  6516.   Problem: Can't compile the bootrom
  6517.  
  6518.           Please get in touch with me if you encounter any problems
  6519.           while recompiling the bootrom.
  6520.  
  6521.  
  6522.  
  6523.  
  6524.  
  6525.  
  6526.  
  6527.  
  6528.  
  6529.  
  6530.  
  6531.  
  6532.  
  6533.  
  6534.  
  6535.