How does DHCPD determine what IP address to assign and...

Glenn Satchell Glenn.Satchell at
Fri Dec 28 13:00:55 UTC 2007

>Date: Thu, 27 Dec 2007 13:56:07 -0600
>From: "Ryan McCain" <Ryan.McCain at>
>To: <dhcp-users at>
>Subject: Re: How does DHCPD determine what IP address to assign and...
The man pages that come with dhcpd are one of the best resources around. There's 
>100 pages if you print them, so equivalent to a small book.

The man pages you are likely to be interested in are dhcpd.conf,
dhcp-eval and dhcp-options.


>Great..  That's a lot to digest.  Let me google around based on what I know now 
and see if I can get this figured out.
>>>> On Wed, Dec 26, 2007 at  5:17 PM, in message
><a06240801c3988e7cd797 at>, Simon Hobson
><dhcp1 at> wrote: 
>> Ryan McCain wrote:
>>>The UID always looks something like this in the lease file::
>>>uid "\000cisco-"
>>>Would this then be the correct syntax:?
>>>class "DialUp" {
>>>     match if substring(option vendor-class-identifier, 3,5) = "Async";
>>>         log (info, " Matched Dialup Rule");
>>>subnet netmask {
>>>      pool {
>>>          allow members of "DialUp";
>>>          range;
>>>          option routers;
>>>          }
>>>..Am I "calling" the "DialUp" class correctly so that any UID that 
>>>contains the string "Async" will be assigned an IP address between 
>>> -
>> Apart from what David wrote re vendor-class-identifier vs 
>> dhcp-client-identifier, your match statement will NOT match.
>> Given that string for client-id, then substring 3,5 would return 
>> "sco-1" which is not "Async". For that particular string, you would 
>> need substring 20,5 - ie the 5 byte string starting at offset 20.
>> However, as I warned about earlier, the actual length of this string 
>> will change with IP address - eg if the client-id was 
>> "\000cisco-" then you would need to look one byte 
>> earlier. If the ending is always "Async32" then you might be better 
>> using 'suffix(dhcp-client-identifier, 7)' which would return the last 
>> 7 bytes.
>> Of course, if the 32 isn't constant, then you may well have to 
>> combine multiple statements to get what you need :
>> ( (substring(suffix(dhcp-client-identifier,7),0,5)="Async")
>>   or
>>    (substring(suffix(dhcp-client-identifier,6),0,5)="Async") )
>> would match <anything>Asyncxx or <anything>Asyncx
>> Lastly, yes you are using the result correctly (as in 'allow members 
>> of ...'), but don't forget you will also have to deny these clients 
>> use of any other pools - otherwise you cannot guarantee that they 
>> will use this one.

More information about the dhcp-users mailing list