<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:676883774;
        mso-list-type:hybrid;
        mso-list-template-ids:-1545037036 1160036808 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>My question:<o:p></o:p></p>

<p class=MsoNormal>What is the technical reason why dhcpd cannot mix static
addresses within dynamic ranges?  I’ve been pouring over the list
archives, and there are snippets from various folks that say to avoid this
because ‘bad things will happen’, especially related to the dhcpd
IP allocator giving out your static IP to other dynamic clients possibly
causing IP conflicts.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>It seems to me that dhcpd knows about both previous dynamic
and static allocations so it should be able to prevent allocating the given
static IP for MAC address ‘A’ out to dynamic clients that do not
have the MAC address ‘A’. (i.e. before handing out a dynamic IP,
check with the previously allocated dynamic IPs as well as static
‘fixed-address’ allocations for the given set of subnet(s)) 
This would help allow other scenarios including allowing a host to do static on
one subnet and dynamic on others based solely on its MAC address.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Our scenario:<o:p></o:p></p>

<p class=MsoNormal>We want to be able to periodically ‘pin’ a MAC
address to the last allocated IP address thereby disabling roaming while
keeping the IP reachable, and at a later time ‘unpin’ from the last
IP removing the ‘fixed-address’ statement and re-enable
roaming.  Think of this as a dynamic-to-static conversion and eventual
revert by doing a static-to-dynamic conversion.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>We already use ‘deny unknown-clients’ in our
dynamic ranges in order to avoid dynamic allocation for clients whose MAC
address has not been known (registered but with no ‘fixed-address’
IP assignment in the host declaration), and are harvesting
‘dhcpd.leases’ to identify the last allocated IP address. We use
4.1.1 under Redhat 5 with primary/failover servers for fault tolerance.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>I can think of a few approaches to this issue, but none seem
attractive let alone be guaranteed to work:<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]>Dynamically generate the ‘range’ statements
along with the ‘host’ statements such that when host
‘A’ becomes generated as a ‘fixed-address’, that
address is then excluded from the ‘range’ statements for the
related subnet.  The revert would also happen with static host
‘A’ being removed as a ‘fixed-address’ and the relevant
‘range’ statements being collapsed/merged to once again include the
IP that was previously in the ‘fixed-address’ statement.  Host
‘A’ could then roam as normal and be served dynamically again. 
This is the swiss-cheese option of configuring ranges (cheese) around the
static (holes).<o:p></o:p></p>

<p class=MsoListParagraph><o:p> </o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]>Continue to use ‘deny unknown-clients’ in
dynamic ranges as we do today without ‘fixed-address’ statements in
the host declarations, but create a new subclass of these ‘special’
MAC addresses when the pin/unpin requirement changes and apply the following to
the dynamic pools.  <o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-indent:.5in'>deny members of
“special-static-clients”;<o:p></o:p></p>

<p class=MsoListParagraph>The ‘special-static-clients’ include file
would then contain the ‘subclass special-static-clients’ statements
that enumerate the pinned list of MAC addresses.  A separate include file
would also contain the ‘host’ declarations and
‘fixed-address’ statements for the pinned list of MAC
addresses.  Unclear if the dynamic IP allocator would even care about this
option since it would still see this as a static allocation within a dynamic
range.  After writing this, I don’t think this would even
work.   Ideally I guess this option boils down to finding the right
syntax to deny allocating a set of IPs to dynamic clients.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]>Beg/bribe the dhcpd development community to allow
static allocations within dynamic ranges  as described in the top of this
post, or hack dhcpd ourselves.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>4)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]>Other?<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Thanks in advance, all feedback welcome,<o:p></o:p></p>

<p class=MsoNormal>Chris Dorsey<o:p></o:p></p>

<p class=MsoNormal>dorsey2@llnl.gov<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

</div>

</body>

</html>