File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / doc / References.xml
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Oct 9 09:06:54 2012 UTC (12 years ago) by misho
Branches: dhcp, MAIN
CVS tags: v4_1_R7p0, v4_1_R7, v4_1_R4, HEAD
dhcp 4.1 r7

    1: <?xml version='1.0' ?>
    2: 
    3: <!-- $Id: References.xml,v 1.1.1.1 2012/10/09 09:06:54 misho 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>