Annotation of embedaddon/dhcp/doc/References.xml, revision 1.1

1.1     ! misho       1: <?xml version='1.0' ?>
        !             2: 
        !             3: <!-- $Id: References.xml,v 1.3.400.1.10.2 2011-07-05 16:59:16 sar Exp $ -->
        !             4: 
        !             5: <?rfc private="ISC-DHCP-REFERENCES" ?>
        !             6: 
        !             7: <?rfc toc="yes"?>
        !             8: 
        !             9: <?rfc compact="yes"?>
        !            10: <?rfc subcompact="no"?>
        !            11: <?rfc tocompact="no"?>
        !            12: 
        !            13: <!DOCTYPE rfc SYSTEM 'rfc2629bis.dtd' [
        !            14:   <!ENTITY rfc760 PUBLIC ''
        !            15:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0760.xml'>
        !            16:   <!ENTITY rfc768 PUBLIC ''
        !            17:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0768.xml'>
        !            18:   <!ENTITY rfc894 PUBLIC ''
        !            19:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0894.xml'>
        !            20:   <!ENTITY rfc951 PUBLIC ''
        !            21:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0951.xml'>
        !            22:   <!ENTITY rfc1035 PUBLIC ''
        !            23:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1035.xml'>
        !            24:   <!ENTITY rfc1188 PUBLIC ''
        !            25:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1188.xml'>
        !            26:   <!ENTITY rfc1542 PUBLIC ''
        !            27:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1542.xml'>
        !            28:   <!ENTITY rfc2131 PUBLIC ''
        !            29:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2131.xml'>
        !            30:   <!ENTITY rfc2132 PUBLIC ''
        !            31:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2132.xml'>
        !            32:   <!ENTITY rfc2241 PUBLIC ''
        !            33:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2241.xml'>
        !            34:   <!ENTITY rfc2242 PUBLIC ''
        !            35:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2242.xml'>
        !            36:   <!ENTITY rfc2485 PUBLIC ''
        !            37:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2485.xml'>
        !            38:   <!ENTITY rfc2610 PUBLIC ''
        !            39:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2610.xml'>
        !            40:   <!ENTITY rfc2937 PUBLIC ''
        !            41:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2937.xml'>
        !            42:   <!ENTITY rfc2939 PUBLIC ''
        !            43:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2939.xml'>
        !            44:   <!ENTITY rfc3004 PUBLIC ''
        !            45:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3004.xml'>
        !            46:   <!ENTITY rfc3011 PUBLIC ''
        !            47:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3011.xml'>
        !            48:   <!ENTITY rfc3046 PUBLIC ''
        !            49:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3046.xml'>
        !            50:   <!ENTITY rfc3074 PUBLIC ''
        !            51:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3074.xml'>
        !            52:   <!ENTITY rfc3256 PUBLIC ''
        !            53:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3256.xml'>
        !            54:   <!ENTITY rfc3315 PUBLIC ''
        !            55:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3315.xml'>
        !            56:   <!ENTITY rfc3319 PUBLIC ''
        !            57:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3319.xml'>
        !            58:   <!ENTITY rfc3396 PUBLIC ''
        !            59:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3396.xml'>
        !            60:   <!ENTITY rfc3397 PUBLIC ''
        !            61:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3397.xml'>
        !            62:   <!ENTITY rfc3527 PUBLIC ''
        !            63:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3527.xml'>
        !            64:   <!ENTITY rfc3633 PUBLIC ''
        !            65:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3633.xml'>
        !            66:   <!ENTITY rfc3646 PUBLIC ''
        !            67:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3646.xml'>
        !            68:   <!ENTITY rfc3679 PUBLIC ''
        !            69:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3679.xml'>
        !            70:   <!ENTITY rfc3898 PUBLIC ''
        !            71:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3898.xml'>
        !            72:   <!ENTITY rfc3925 PUBLIC ''
        !            73:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3925.xml'>
        !            74:   <!ENTITY rfc3942 PUBLIC ''
        !            75:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3942.xml'>
        !            76:   <!ENTITY rfc4075 PUBLIC ''
        !            77:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4075.xml'>
        !            78:   <!ENTITY rfc4242 PUBLIC ''
        !            79:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4242.xml'>
        !            80:   <!ENTITY rfc4280 PUBLIC ''
        !            81:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4280.xml'>
        !            82:   <!ENTITY rfc4388 PUBLIC ''
        !            83:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4388.xml'>
        !            84:   <!ENTITY rfc4580 PUBLIC ''
        !            85:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4580.xml'>
        !            86:   <!ENTITY rfc4649 PUBLIC ''
        !            87:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4649.xml'>
        !            88:   <!ENTITY rfc4701 PUBLIC ''
        !            89:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4701.xml'>
        !            90:   <!ENTITY rfc4702 PUBLIC ''
        !            91:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4702.xml'>
        !            92:   <!ENTITY rfc4703 PUBLIC ''
        !            93:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4703.xml'>
        !            94:   <!ENTITY rfc4704 PUBLIC ''
        !            95:        'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4704.xml'>
        !            96: ]>
        !            97: 
        !            98: <rfc ipr="none">
        !            99:   <front>
        !           100:     <title>ISC DHCP References Collection</title>
        !           101: 
        !           102:     <author initials="D.H." surname="Hankins" fullname="David W. Hankins">
        !           103:       <organization abbrev="ISC">Internet Systems Consortium,
        !           104:                                 Inc.
        !           105:       </organization>
        !           106: 
        !           107:       <address>
        !           108:        <postal>
        !           109:          <street>950 Charter Street</street>
        !           110:          <city>Redwood City</city>
        !           111:          <region>CA</region>
        !           112:          <code>94063</code>
        !           113:        </postal>
        !           114: 
        !           115:        <phone>+1 650 423 1300</phone>
        !           116:        <email>David_Hankins@isc.org</email>
        !           117:       </address>
        !           118:     </author>
        !           119: 
        !           120:     <date month="May" year="2007"/>
        !           121: 
        !           122:     <note title="Copyright Notice">
        !           123:        <t>Copyright (c) 2006-2007,2009 by Internet Systems Consortium, Inc.
        !           124:        ("ISC")</t>
        !           125: 
        !           126:        <t>Permission to use, copy, modify, and distribute this software for
        !           127:        any purpose with or without fee is hereby granted, provided that the
        !           128:        above copyright notice and this permission notice appear in all
        !           129:        copies.</t>
        !           130: 
        !           131:        <t>THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
        !           132:        WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !           133:        MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
        !           134:        ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !           135:        WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
        !           136:        ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
        !           137:        OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</t>
        !           138:     </note>
        !           139: 
        !           140:     <keyword>ISC</keyword>
        !           141:     <keyword>DHCP</keyword>
        !           142:     <keyword>Reference Implementation</keyword>
        !           143: 
        !           144:     <abstract>
        !           145:        <t>This document describes a collection of Reference material that
        !           146:        ISC DHCP has been implemented to.</t>
        !           147:     </abstract>
        !           148:   </front>
        !           149: 
        !           150:   <middle>
        !           151:     <section title="Introduction">
        !           152:        <t>As a little historical anecdote, ISC DHCP once packaged all the
        !           153:        relevant RFCs and standards documents along with the software
        !           154:        package.  Until one day when a voice was heard from one of the
        !           155:        many fine institutions that build and distribute this software...
        !           156:        they took issue with the IETF's copyright on the RFC's.  It
        !           157:        seems the IETF's copyrights don't allow modification of RFC's
        !           158:        (except for translation purposes).</t>
        !           159: 
        !           160:        <t>Our main purpose in providing the RFCs is to aid in
        !           161:        documentation, but since RFCs are now available widely from many
        !           162:        points of distribution on the Internet, there is no real need to
        !           163:        provide the documents themselves.  So, this document has been
        !           164:        created in their stead, to list the various IETF RFCs one might
        !           165:        want to read, and to comment on how well (or poorly) we have
        !           166:        managed to implement them.</t>
        !           167:     </section>
        !           168: 
        !           169:     <section title="Definition: Reference Implementation">
        !           170:        <t>ISC DHCP, much like its other cousins in ISC software, is
        !           171:        self-described as a 'Reference Implementation.'  There has been
        !           172:        a great deal of confusion about this term.  Some people seem to
        !           173:        think that this term applies to any software that once passed
        !           174:        a piece of reference material on its way to market (but may do
        !           175:        quite a lot of things that aren't described in any reference, or
        !           176:        may choose to ignore the reference it saw entirely).  Other folks
        !           177:        get confused by the word 'reference' and understand that to mean
        !           178:        that there is some special status applied to the software - that
        !           179:        the software itself is the reference by which all other software
        !           180:        is measured.  Something along the lines of being "The DHCP
        !           181:        Protocol's Reference Clock," it is supposed.</t>
        !           182: 
        !           183:        <t>The truth is actually quite a lot simpler.  Reference
        !           184:        implementations are software packages which were written
        !           185:        to behave precisely as appears in reference material.  They
        !           186:        are written "to match reference."</t>
        !           187: 
        !           188:        <t>If the software has a behaviour that manifests itself
        !           189:        externally (whether it be something as simple as the 'wire
        !           190:        format' or something higher level, such as a complicated
        !           191:        behaviour that arises from multiple message exchanges), that
        !           192:        behaviour must be found in a reference document.</t>
        !           193: 
        !           194:        <t>Anything else is a bug, the only question is whether the
        !           195:        bug is in reference or software (failing to implement the
        !           196:        reference).</t>
        !           197: 
        !           198:        <t>This means:</t>
        !           199: 
        !           200:       <list style="symbols">
        !           201:        <t>To produce new externally-visible behaviour, one must first
        !           202:        provide a reference.</t>
        !           203: 
        !           204:        <t>Before changing externally visible behaviour to work around
        !           205:        simple incompatibilities in any other implementation, one must
        !           206:        first provide a reference.</t>
        !           207:       </list>
        !           208: 
        !           209:        <t>That is the lofty goal, at any rate.  It's well understood that,
        !           210:        especially because the ISC DHCP Software package has not always been
        !           211:        held to this standard (but not entirely due to it), there are many
        !           212:        non-referenced behaviours within ISC DHCP.</t>
        !           213: 
        !           214:        <t>The primary goal of reference implementation is to prove the
        !           215:        reference material.  If the reference material is good, then you
        !           216:        should be able to sit down and write a program that implements the
        !           217:        reference, to the word, and come to an implementation that
        !           218:        is distinguishable from others in the details, but not in the
        !           219:        facts of operating the protocol.  This means that there is no
        !           220:        need for 'special knowledge' to work around arcane problems that
        !           221:        were left undocumented.  No secret handshakes need to be learned
        !           222:        to be imparted with the necessary "real documentation".</t>
        !           223: 
        !           224:        <t>Also, by accepting only reference as the guidebook for ISC
        !           225:        DHCP's software implementation, anyone who can make an impact on
        !           226:        the color texture or form of that reference has a (somewhat
        !           227:        indirect) voice in ISC DHCP's software design.  As the IETF RFC's
        !           228:        have been selected as the source of reference, that means everyone
        !           229:        on the Internet with the will to participate has a say.</t>
        !           230:     </section>
        !           231: 
        !           232:     <section title="Low Layer References">
        !           233:        <t>It may surprise you to realize that ISC DHCP implements 802.1
        !           234:        'Ethernet' framing, Token Ring, and FDDI.  In order to bridge the
        !           235:        gap there between these physical and DHCP layers, it must also
        !           236:        implement IP and UDP framing.</t>
        !           237: 
        !           238:        <t>The reason for this stems from Unix systems' handling of BSD
        !           239:        sockets (the general way one might engage in transmission of UDP
        !           240:        packets) on unconfigured interfaces, or even the handling of
        !           241:        broadcast addressing on configured interfaces.</t>
        !           242: 
        !           243:        <t>There are a few things that DHCP servers, relays, and clients all
        !           244:        need to do in order to speak the DHCP protocol in strict compliance
        !           245:        with <xref target="RFC2131">RFC2131</xref>.</t>
        !           246: 
        !           247:       <list style="numbers">
        !           248:        <t>Transmit a UDP packet from IP:0.0.0.0 Ethernet:Self, destined to
        !           249:        IP:255.255.255.255 LinkLayer:Broadcast on an unconfigured (no IP
        !           250:        address yet) interface.</t>
        !           251: 
        !           252:        <t>Receive a UDP packet from IP:remote-system LinkLayer:remote-system,
        !           253:        destined to IP:255.255.255.255 LinkLayer:Broadcast, again on an
        !           254:        unconfigured interface.</t>
        !           255: 
        !           256:        <t>Transmit a UDP packet from IP:Self, Ethernet:Seelf, destined to
        !           257:        IP:remote-system LinkLayer:remote-system, without transmitting a
        !           258:        single ARP.</t>
        !           259: 
        !           260:        <t>And of course the simple case, a regular IP unicast that is
        !           261:        routed via the usual means (so it may be direct to a local system,
        !           262:        with ARP providing the glue, or it may be to a remote system via
        !           263:        one or more routers as normal).  In this case, the interfaces are
        !           264:        always configured.</t>
        !           265:       </list>
        !           266: 
        !           267:        <t>The above isn't as simple as it sounds on a regular BSD socket.
        !           268:        Many unix implementations will transmit broadcasts not to
        !           269:        255.255.255.255, but to x.y.z.255 (where x.y.z is the system's local
        !           270:        subnet).  Such packets are not received by several known DHCP client
        !           271:        implementations - and it's not their fault, <xref target="RFC2131">
        !           272:        RFC2131</xref> very explicitly demands that these packets' IP
        !           273:        destination addresses be set to 255.255.255.255.</t>
        !           274: 
        !           275:        <t>Receiving packets sent to 255.255.255.255 isn't a problem on most
        !           276:        modern unixes...so long as the interface is configured.  When there
        !           277:        is no IPv4 address on the interface, things become much more murky.</t>
        !           278: 
        !           279:        <t>So, for this convoluted and unfortunate state of affairs in the
        !           280:        unix systems of the day ISC DHCP was manufactured, in order to do
        !           281:        what it needs not only to implement the reference but to interoperate
        !           282:        with other implementations, the software must create some form of
        !           283:        raw socket to operate on.</t>
        !           284: 
        !           285:        <t>What it actually does is create, for each interface detected on
        !           286:        the system, a Berkeley Packet Filter socket (or equivalent), and
        !           287:        program it with a filter that brings in only DHCP packets.  A
        !           288:        "fallback" UDP Berkeley socket is generally also created, a single
        !           289:        one no matter how many interfaces.  Should the software need to
        !           290:        transmit a contrived packet to the local network the packet is
        !           291:        formed piece by piece and transmitted via the BPF socket.  Hence
        !           292:        the need to implement many forms of Link Layer framing and above.
        !           293:        The software gets away with not having to implement IP routing
        !           294:        tables as well by simply utilizing the aforementioned 'fallback'
        !           295:        UDP socket when unicasting between two configured systems is the
        !           296:        need.</t>
        !           297: 
        !           298:        <t>Modern unixes have opened up some facilities that diminish how
        !           299:        much of this sort of nefarious kludgery is necessary, but have not
        !           300:        found the state of affairs absolutely absolved.  In particular,
        !           301:        one might now unicast without ARP by inserting an entry into the
        !           302:        ARP cache prior to transmitting.  Unconfigured interfaces remain
        !           303:        the sticking point, however...on virtually no modern unixes is
        !           304:        it possible to receive broadcast packets unless a local IPv4
        !           305:        address has been configured, unless it is done with raw sockets.</t>
        !           306: 
        !           307:       <section title="Ethernet Protocol References">
        !           308:        <t>ISC DHCP Implements Ethernet Version 2 ("DIX"), which is a variant
        !           309:        of IEEE 802.2.  No good reference of this framing is known to exist
        !           310:        at this time, but it is vaguely described in <xref target="RFC0894">
        !           311:        RFC894</xref> (see the section titled "Packet format"), and
        !           312:        the following URL is also thought to be useful.</t>
        !           313: 
        !           314:        <t>http://en.wikipedia.org/wiki/DIX</t>
        !           315:       </section>
        !           316: 
        !           317:       <section title="Token Ring Protocol References">
        !           318:        <t>IEEE 802.5 defines the Token Ring framing format used by ISC
        !           319:        DHCP.</t>
        !           320:       </section>
        !           321: 
        !           322:       <section title="FDDI Protocol References">
        !           323:        <t><xref target="RFC1188">RFC1188</xref> is the most helpful
        !           324:        reference ISC DHCP has used to form FDDI packets.</t>
        !           325:       </section>
        !           326: 
        !           327:       <section title="Internet Protocol Version 4 References">
        !           328:        <t><xref target="RFC0760">RFC760</xref> fundamentally defines the
        !           329:        bare IPv4 protocol which ISC DHCP implements.</t>
        !           330:       </section>
        !           331: 
        !           332:       <section title="Unicast Datagram Protocol References">
        !           333:        <t><xref target="RFC0768">RFC768</xref> defines the User Datagram
        !           334:        Protocol that ultimately carries the DHCP or BOOTP protocol.  The
        !           335:        destination DHCP server port is 67, the client port is 68.  Source
        !           336:        ports are irrelevant.</t>
        !           337:       </section>
        !           338:     </section>
        !           339: 
        !           340:     <section title="BOOTP Protocol References">
        !           341:        <t>The DHCP Protocol is strange among protocols in that it is
        !           342:        grafted over the top of another protocol - BOOTP (but we don't
        !           343:        call it "DHCP over BOOTP" like we do, say "TCP over IP").  BOOTP
        !           344:        and DHCP share UDP packet formats - DHCP is merely a conventional
        !           345:        use of both BOOTP header fields and the trailing 'options' space.</t>
        !           346: 
        !           347:        <t>The ISC DHCP server supports BOOTP clients conforming to
        !           348:        <xref target="RFC0951">RFC951</xref> and <xref target="RFC1542">
        !           349:        RFC1542</xref>.</t>
        !           350:     </section>
        !           351: 
        !           352:     <section title="DHCP Protocol References">
        !           353:       <section title="DHCPv4 Protocol">
        !           354:        <t>"The DHCP[v4] Protocol" is not defined in a single document.  The
        !           355:        following collection of references of what ISC DHCP terms "The
        !           356:        DHCPv4 Protocol".</t>
        !           357: 
        !           358:         <section title="Core Protocol References">
        !           359:          <t><xref target="RFC2131">RFC2131</xref> defines the protocol format
        !           360:        and procedures.  ISC DHCP is not known to diverge from this document
        !           361:        in any way.  There are, however, a few points on which different
        !           362:        implementations have arisen out of vagueries in the document.
        !           363:        DHCP Clients exist which, at one time, present themselves as using
        !           364:        a Client Identifier Option which is equal to the client's hardware
        !           365:        address.  Later, the client transmits DHCP packets with no Client
        !           366:        Identifier Option present - essentially identifying themselves using
        !           367:        the hardware address.  Some DHCP Servers have been developed which
        !           368:        identify this client as a single client.  ISC has interpreted
        !           369:        RFC2131 to indicate that these clients must be treated as two
        !           370:        separate entities (and hence two, separate addresses).  Client
        !           371:        behaviour (Embedded Windows products) has developed that relies on
        !           372:        the former implementation, and hence is incompatible with the
        !           373:        latter.  Also, RFC2131 demands explicitly that some header fields
        !           374:        be zeroed upon certain message types.  The ISC DHCP Server instead
        !           375:        copies many of these fields from the packet received from the client
        !           376:        or relay, which may not be zero.  It is not known if there is a good
        !           377:        reason for this that has not been documented.</t>
        !           378: 
        !           379:          <t><xref target="RFC2132">RFC2132</xref> defines the initial set of
        !           380:        DHCP Options and provides a great deal of guidance on how to go about
        !           381:        formatting and processing options.  The document unfortunately
        !           382:        waffles to a great extent about the NULL termination of DHCP Options,
        !           383:        and some DHCP Clients (Windows 95) have been implemented that rely
        !           384:        upon DHCP Options containing text strings to be NULL-terminated (or
        !           385:        else they crash).  So, ISC DHCP detects if clients null-terminate the
        !           386:        host-name option and, if so, null terminates any text options it
        !           387:        transmits to the client.  It also removes NULL termination from any
        !           388:        known text option it receives prior to any other processing.</t>
        !           389:         </section>
        !           390:       </section>
        !           391: 
        !           392:       <section title="DHCPv6 Protocol References">
        !           393:        <t>For now there is only one document that specifies the DHCPv6
        !           394:        protocol (there have been no updates yet), <xref target="RFC3315">
        !           395:        RFC3315</xref>.</t>
        !           396: 
        !           397:        <t>Support for DHCPv6 was added first in version 4.0.0.  The server
        !           398:        and client support only IA_NA.  While the server does support multiple
        !           399:        IA_NAs within one packet from the client, our client only supports
        !           400:        sending one.  There is no relay support.</t>
        !           401: 
        !           402:        <t>DHCPv6 introduces some new and uncomfortable ideas to the common
        !           403:        software library.</t>
        !           404: 
        !           405:        <list style="numbers">
        !           406:          <t>Options of zero length are normal in DHCPv6.  Currently, all
        !           407:          ISC DHCP software treats zero-length options as errors.</t>
        !           408: 
        !           409:          <t>Options sometimes may appear multiple times.  The common
        !           410:          library used to treat all appearance of multiple options as
        !           411:          specified in RFC2131 - to be concatenated.  DHCPv6 options
        !           412:          may sometimes appear multiple times (such as with IA_NA or
        !           413:          IAADDR), but often must not.</t>
        !           414: 
        !           415:          <t>The same option space appears in DHCPv6 packets multiple times.
        !           416:          If the packet was got via a relay, then the client's packet is
        !           417:          stored to an option within the relay's packet...if there were two
        !           418:          relays, this recurses.  At each of these steps, the root "DHCPv6
        !           419:          option space" is used.  Further, a client packet may contain an
        !           420:          IA_NA, which may contain an IAADDR - but really, in an abstract
        !           421:          sense, this is again re-encapsulation of the DHCPv6 option space
        !           422:          beneath options it also contains.</t>
        !           423:        </list>
        !           424: 
        !           425:        <t>Precisely how to correctly support the above conundrums has not
        !           426:        quite yet been settled, so support is incomplete.</t>
        !           427:       </section>
        !           428: 
        !           429:       <section title="DHCP Option References">
        !           430:        <t><xref target="RFC2241">RFC2241</xref> defines options for
        !           431:        Novell Directory Services.</t>
        !           432: 
        !           433:        <t><xref target="RFC2242">RFC2242</xref> defines an encapsulated
        !           434:        option space for NWIP configuration.</t>
        !           435: 
        !           436:        <t><xref target="RFC2485">RFC2485</xref> defines the Open Group's
        !           437:        UAP option.</t>
        !           438: 
        !           439:        <t><xref target="RFC2610">RFC2610</xref> defines options for
        !           440:        the Service Location Protocol (SLP).</t>
        !           441: 
        !           442:        <t><xref target="RFC2937">RFC2937</xref> defines the Name Service
        !           443:        Search Option (not to be confused with the domain-search option).
        !           444:        The Name Service Search Option allows eg nsswitch.conf to be
        !           445:        reconfigured via dhcp.  The ISC DHCP server implements this option,
        !           446:        and the ISC DHCP client is compatible...but does not by default
        !           447:        install this option's value.  One would need to make their relevant
        !           448:        dhclient-script process this option in a way that is suitable for
        !           449:        the system.</t>
        !           450: 
        !           451:        <t><xref target="RFC3004">RFC3004</xref> defines the User-Class
        !           452:        option.  Note carefully that ISC DHCP currently does not implement
        !           453:        to this reference, but has (inexplicably) selected an incompatible
        !           454:        format: a plain text string.</t>
        !           455: 
        !           456:        <t><xref target="RFC3011">RFC3011</xref> defines the Subnet-Selection
        !           457:        plain DHCPv4 option.  Do not confuse this option with the relay agent
        !           458:        "link selection" sub-option, although their behaviour is similar.</t>
        !           459: 
        !           460:        <t><xref target="RFC3319">RFC3319</xref> defines the SIP server
        !           461:        options for DHCPv6.</t>
        !           462: 
        !           463:        <t><xref target="RFC3396">RFC3396</xref> documents both how long
        !           464:        options may be encoded in DHCPv4 packets, and also how multiple
        !           465:        instances of the same option code within a DHCPv4 packet will be
        !           466:        decoded by receivers.</t>
        !           467: 
        !           468:        <t><xref target="RFC3397">RFC3397</xref> documents the Domain-Search
        !           469:        Option, which allows the configuration of the /etc/resolv.conf
        !           470:        'search' parameter in a way that is <xref target="RFC1035">RFC1035
        !           471:        </xref> wire format compatible (in fact, it uses the RFC1035 wire
        !           472:        format).  ISC DHCP has both client and server support, and supports
        !           473:        RFC1035 name compression.</t>
        !           474: 
        !           475:        <t><xref target="RFC3646">RFC3646</xref> documents the DHCPv6
        !           476:        name-servers and domain-search options.</t>
        !           477: 
        !           478:        <t><xref target="RFC3633">RFC3633</xref> documents the Identity
        !           479:        Association Prefix Delegation, which is included here for protocol
        !           480:        wire reference, but which is not supported by ISC DHCP.</t>
        !           481: 
        !           482:        <t><xref target="RFC3679">RFC3679</xref> documents a number of
        !           483:        options that were documented earlier in history, but were not
        !           484:        made use of.</t>
        !           485: 
        !           486:        <t><xref target="RFC3898">RFC3898</xref> documents four NIS options
        !           487:        for delivering NIS servers and domain information in DHCPv6.</t>
        !           488: 
        !           489:        <t><xref target="RFC3925">RFC3925</xref> documents a pair of
        !           490:        Enterprise-ID delimited option spaces for vendors to use in order
        !           491:        to inform servers of their "vendor class" (sort of like 'uname'
        !           492:        or 'who and what am I'), and a means to deliver vendor-specific
        !           493:        and vendor-documented option codes and values.</t>
        !           494: 
        !           495:        <t><xref target="RFC3942">RFC3942</xref> redefined the 'site local'
        !           496:        option space.</t>
        !           497: 
        !           498:        <t><xref target="RFC4075">RFC4075</xref> defines the DHCPv6 SNTP
        !           499:        Servers option.</t>
        !           500: 
        !           501:        <t><xref target="RFC4242">RFC4242</xref> defines the Information
        !           502:        Refresh Time option, which advises DHCPv6 Information-Request
        !           503:        clients to return for updated information.</t>
        !           504: 
        !           505:        <t><xref target="RFC4280">RFC4280</xref> defines two BCMS server
        !           506:        options.</t>
        !           507: 
        !           508:        <t><xref target="RFC4388">RFC4388</xref> defined the DHCPv4
        !           509:        LEASEQUERY message type and a number of suitable response messages,
        !           510:        for the purpose of sharing information about DHCP served addresses
        !           511:        and clients.</t>
        !           512: 
        !           513:        <t><xref target="RFC4580">RFC4580</xref> defines a DHCPv6
        !           514:        subscriber-id option, which is similar in principle to the DHCPv4
        !           515:        relay agent option of the same name.</t>
        !           516: 
        !           517:        <t><xref target="RFC4649">RFC4649</xref> defines a DHCPv6 remote-id
        !           518:        option, which is similar in principle to the DHCPv4 relay agent
        !           519:        remote-id.</t>
        !           520: 
        !           521:         <section title="Relay Agent Information Option Options">
        !           522:          <t><xref target="RFC3046">RFC3046</xref> defines the Relay Agent
        !           523:          Information Option and provides a number of sub-option
        !           524:          definitions.</t>
        !           525: 
        !           526:          <t><xref target="RFC3256">RFC3256</xref> defines the DOCSIS Device
        !           527:          Class sub-option.</t>
        !           528: 
        !           529:          <t><xref target="RFC3527">RFC3527</xref> defines the Link Selection
        !           530:          sub-option.</t>
        !           531:         </section>
        !           532: 
        !           533:        <section title="Dynamic DNS Updates References">
        !           534:          <t>The collection of documents that describe the standards-based
        !           535:          method to update dns names of DHCP clients starts most easily
        !           536:          with <xref target="RFC4703">RFC4703</xref> to define the overall
        !           537:          architecture, travels through RFCs <xref target="RFC4702">4702</xref>
        !           538:          and <xref target="RFC4704">4704</xref> to describe the DHCPv4 and
        !           539:          DHCPv6 FQDN options (to carry the client name), and ends up at
        !           540:          <xref target="RFC4701">RFC4701</xref> which describes the DHCID
        !           541:          RR used in DNS to perform a kind of atomic locking.</t>
        !           542: 
        !           543:          <t>ISC DHCP adopted early versions of these documents, and has not
        !           544:          yet synchronized with the final standards versions.</t>
        !           545: 
        !           546:          <t>For RFCs 4702 and 4704, the 'N' bit is not yet supported.  The
        !           547:          result is that it is always set zero, and is ignored if set.</t>
        !           548: 
        !           549:          <t>For RFC4701, which is used to match client identities with names
        !           550:          in the DNS as part of name conflict resolution.  Note that ISC DHCP's
        !           551:          implementation of DHCIDs vary wildly from this specification.
        !           552:          First, ISC DHCP uses a TXT record in which the contents are stored
        !           553:          in hexadecimal.  Second, there is a flaw in the selection of the
        !           554:          'Identifier Type', which results in a completely different value
        !           555:          being selected than was defined in an older revision of this
        !           556:          document...also this field is one byte prior to hexadecimal
        !           557:          encoding rather than two.  Third, ISC DHCP does not use a digest
        !           558:          type code.  Rather, all values for such TXT records are reached
        !           559:          via an MD5 sum.  In short, nothing is compatible, but the
        !           560:          principle of the TXT record is the same as the standard DHCID
        !           561:          record.  However, for DHCPv6 FQDN, we do use DHCID type code '2',
        !           562:          as no other value really makes sense in our context.</t>
        !           563:        </section>
        !           564: 
        !           565:        <section title="Experimental: Failover References">
        !           566:          <t>The Failover Protocol defines a means by which two DHCP Servers
        !           567:          can share all the relevant information about leases granted to
        !           568:          DHCP clients on given networks, so that one of the two servers may
        !           569:          fail and be survived by a server that can act responsibly.</t>
        !           570: 
        !           571:          <t>Unfortunately it has been quite some years since the last time
        !           572:          this document was edited, and the authors no longer show any
        !           573:          interest in fielding comments or improving the document.</t>
        !           574: 
        !           575:          <t>The status of this protocol is very unsure, but ISC's
        !           576:          implementation of it has proven stable and suitable for use in
        !           577:          sizable production environments.</t>
        !           578: 
        !           579:          <t><xref target="draft-failover">draft-ietf-dhc-failover-12.txt</xref>
        !           580:          describes the Failover Protocol.  In addition to what is described
        !           581:          in this document, ISC DHCP has elected to make some experimental
        !           582:          changes that may be revoked in a future version of ISC DHCP (if the
        !           583:          draft authors do not adopt the new behaviour).  Specifically, ISC
        !           584:          DHCP's POOLREQ behaviour differs substantially from what is
        !           585:          documented in the draft, and the server also implements a form of
        !           586:          'MAC Address Affinity' which is not described in the failover
        !           587:          document.  The full nature of these changes have been described on
        !           588:          the IETF DHC WG mailing list (which has archives), and also in ISC
        !           589:          DHCP's manual pages.  Also note that although this document
        !           590:          references a RECOVER-WAIT state, it does not document a protocol
        !           591:          number assignment for this state.  As a consequence, ISC DHCP has
        !           592:          elected to use the value 254.</t>
        !           593: 
        !           594:          <t><xref target="RFC3074">RFC3074</xref> describes the Load Balancing
        !           595:          Algorithm (LBA) that ISC DHCP uses in concert with the Failover
        !           596:          protocol.  Note that versions 3.0.* are known to misimplement the
        !           597:          hash algorithm (it will only use the low 4 bits of every byte of
        !           598:          the hash bucket array).</t>
        !           599:        </section>
        !           600:       </section>
        !           601: 
        !           602:       <section title="DHCP Procedures">
        !           603:        <t><xref target="RFC2939">RFC2939</xref> explains how to go about
        !           604:        obtaining a new DHCP Option code assignment.</t>
        !           605:       </section>
        !           606:     </section>
        !           607:   </middle>
        !           608: 
        !           609:   <back>
        !           610:     <references>
        !           611:        &rfc760;
        !           612:        &rfc768;
        !           613:        &rfc894;
        !           614:        &rfc951;
        !           615:        &rfc1035;
        !           616:        &rfc1188;
        !           617:        &rfc1542;
        !           618:        &rfc2131;
        !           619:        &rfc2132;
        !           620:        &rfc2241;
        !           621:        &rfc2242;
        !           622:        &rfc2485;
        !           623:        &rfc2610;
        !           624:        &rfc2937;
        !           625:        &rfc2939;
        !           626:        &rfc3004;
        !           627:        &rfc3011;
        !           628:        &rfc3046;
        !           629:        &rfc3074;
        !           630:        &rfc3256;
        !           631:        &rfc3315;
        !           632:        &rfc3319;
        !           633:        &rfc3396;
        !           634:        &rfc3397;
        !           635:        &rfc3527;
        !           636:        &rfc3633;
        !           637:        &rfc3646;
        !           638:        &rfc3679;
        !           639:        &rfc3898;
        !           640:        &rfc3925;
        !           641:        &rfc3942;
        !           642:        &rfc4075;
        !           643:        &rfc4242;
        !           644:        &rfc4280;
        !           645:        &rfc4388;
        !           646:        &rfc4580;
        !           647:        &rfc4649;
        !           648:        &rfc4701;
        !           649:        &rfc4702;
        !           650:        &rfc4703;
        !           651:        &rfc4704;
        !           652: 
        !           653:        <reference anchor='draft-failover'>
        !           654:          <front>
        !           655:            <title>DHCP Failover Protocol</title>
        !           656: 
        !           657:            <author initials='R.' surname='Droms' fullname='Ralph Droms'>
        !           658:                <organization abbrev='Cisco'>Cisco Systems</organization>
        !           659:            </author>
        !           660: 
        !           661:            <date month='March' year='2003'/>
        !           662:          </front>
        !           663:          <format type="TXT" octets="312151" target="https://www.isc.org/sw/dhcp/drafts/draft-ietf-dhc-failover-12.txt"/>
        !           664:        </reference>
        !           665:     </references>
        !           666:   </back>
        !           667: </rfc>
        !           668: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>