Configuring 3rd Party DHCP servers to hand out option 78 and 79

  • 7008768
  • 09-Jun-2011
  • 26-Apr-2012

Environment

DHCP
3rd Party DHCP server
RFC 2610

Cisco DHCP server using Network Registrar or CNR

 

Situation

Configuring 3rd Party DHCP servers to hand out option 78 and 79

Resolution

Novell clients can handle DHCP options 78 and 79 being handed out by 3rd party DHCP servers if those servers follow RFC 2610.  There are some 3rd party servers that do not follow this RFC.  RFC 2610 states:

SLP Directory Agent Option

This option specifies the location of one or more SLP Directory Agents.

   0                   1                   2                   3
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Code = 78   |    Length     |   Mandatory   |      a1       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      a2       |       a3      |       a4      |      ...
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The SLP Directory Agent Option specifies a list of IP addresses for   Directory Agents.  Directory Agents MUST be listed in order of preference, if there is an order of preference.

The Length value must include one for the 'Mandatory' byte and include four for each Directory Agent address which follows.  Thus, the Length minus one of the option MUST always be divisible by 4 and has a minimum value of 5.

The address of the Directory Agent is given in network byte order. The 'Mandatory' byte in the Directory Agent option may be set to either 0 or 1.  If it is set to 1, the SLP User Agent or Service Agent so configured MUST NOT employ either active or passive multicast discovery of Directory Agents.

Note that for backward compatibility with some deployed software the Mandatory byte MUST NOT be set to any byte value for which the high order bit (0x80) is set.

The Directory Agents listed in this option MUST be configured with the a non-empty subset of the scope list that the Agent receiving the Directory Agent Option is configured with.  See the notes below.

The SLPv2 specification [3] defines how to use this option.



4. SLP Service Scope Option

The scope list is a comma delimited list which indicates the scopes that a SLP Agent is configured to use.

   0                   1                   2                   3
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Code = 79   |     Length    |   Mandatory   | <Scope List>...
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Length indicates the number of bytes which follow.  Since the Scope-List String is encoded using UTF-8 [5] characters, it may be the cast that the Length is not the same as the number of characters in the Scope-List String.  The Length value must include one for the 'Mandatory' byte.

The 'Mandatory' byte determines whether SLP Agents override their static configuration for scopes with the <Scope List> string provided by the option.  This allows DHCP administrators to implement a policy of assigning a set of scopes to Agents for service provision.  If the Mandatory byte is 0, static configuration takes precedence over the DHCP provided scope list.  If the Mandatory byte is 1, the <Scope List> provided in this option MUST be used by the SLP Agent.

The Scope List String syntax and usage are defined in the SLPv2 specification [3].


 

.

Additional Information

At the time of this writing the Cisco implementation of options 78 and 79 in CNR was NOT compliant with RFC 2610 as listed above.  In CNR these options are defined as a string and CNR does not send the mandatory byte at all.  Since we are RFC compliant we expect this mandatory byte and have not written our code to handle their non compliance.

If you are using CNR or Cisco Network Registrar to configure DHCP options 78 and or 79 you will have to define these options to have a value of type BYTE and make it and array of BYTEs.  You can make it an array in CNR by checking the check box next to the type value that makes it an "array of".  That way you can define an array of bytes that can be passed out for this option that conforms to the RFC.

EXAMPLE:

If you are trying define option 79 and you use the default value of a string and enter as your string ABC for your scope name CNR will send the following in Hex:

4F 03 41 42 43

The Novell client sees this as:

4F = Option 79

03 = Length

41 = Mandatory (non zero value)

42 43 = Scope name (BC)

If instead you change the option 79 value in CNR to be an array of bytes you can enter the following set of hex values 01 41 42 43 which will make CNR send:

4F 04 01 41 42 43  which the Novell Client sees as:

4F = Option 79

04 = Length

01 = Mandatory (set to 1)

41 42 43 = Scope name (ABC)


Formerly known as TID# 10067907