ISC DHCPv6 Server and Stateful Address Allocation

Greg.Rabil at ins.com Greg.Rabil at ins.com
Tue Jan 6 17:40:02 UTC 2009


Nibbles, and bits, and bytes... oh my! :-)

Thanks David.  What I _meant_ to say was that the "range" 2001:558:ff10:870:8000::/65 encompasses the addresses:

2001:558:ff10:870:8000:0000:0000:0000 - 2001:558:ff10:870:ffff:ffff:ffff:ffff

Greg

-----Original Message-----
From: dhcp-users-bounces at lists.isc.org [mailto:dhcp-users-bounces at lists.isc.org] On Behalf Of David W. Hankins
Sent: Tuesday, January 06, 2009 12:33 PM
To: dhcp-users at isc.org
Subject: Re: ISC DHCPv6 Server and Stateful Address Allocation

On Mon, Jan 05, 2009 at 05:07:37PM -0500, John Jason Brzozowski wrote:
> Exactly where I was coming from.

Unfortunately, you were both lost.  :)

> On Mon, Jan 5, 2009 at 5:00 PM, <Greg.Rabil at ins.com> wrote:
> > No, the "range" 2001:558:ff10:870:8000::/65 encompasses the addresses:
> > 2001:558:ff10:870:8000:0000:0000:0000 - 
> > 2001:558:ff10:870:8FFF:FFFF:FFFF:FFFF

That's not correct; a /65 implies the first 65 _bits_.  Of the 4-bit "nibble" '0x8', it is in binary 1000.  Only the first bit, 1, is covered by the mask.  The remaining three bits are wildcards, so 0x8- 0xf are covered (0x8 + 0x4 + 0x2 + 0x1).  0x0-0x7 are not covered, because the first bit is zero.

So, the range quoted above describes a /68 (/64 + 4), having 4 non- wildcard bits after the /64 prefix (1000, 0x8).

> > Which does _not_ include 2001:558:ff10:870:f914:a7c1:42d1:faa1

I hope I've explained; it does actually.

IPv6 growing pains.  Humans were not meant to do nibble math.  :(


For the academic answer to the original question; how IPv6 dynamic
("IA_NA") addresses are generated right now can be seen in server/mdb6.c, search forward for "^build_address6".

The build_address6 function is called from inside another loop that finds the first unique answer (feeding the result back in as input, as I recall).  The initial input is the client's DUID.

The value is MD5'd (not for privacy), and then the non-wildcard bits are copied over on top.

IFF the mask length is equal to 64, the 'u' bit (71?) is cleared to zero.  We don't touch any other bits.

-- 
David W. Hankins	"If you don't do it right the first time,
Software Engineer		     you'll just have to do it again."
Internet Systems Consortium, Inc.		-- Jack T. Hankins



More information about the dhcp-users mailing list