[141897] in North American Network Operators' Group

home help back first fref pref prev next nref lref last post

Re: The stupidity of trying to "fix" DHCPv6

daemon@ATHENA.MIT.EDU (Owen DeLong)
Mon Jun 13 20:31:18 2011

From: Owen DeLong <owen@delong.com>
In-Reply-To: <F6578C9E-02A4-4C55-95E1-823BC24A2CFE@muada.com>
Date: Mon, 13 Jun 2011 17:26:27 -0700
To: Iljitsch van Beijnum <iljitsch@muada.com>
Cc: nanog@nanog.org, Daniel Roesen <dr@cluenet.de>
Errors-To: nanog-bounces+nanog.discuss=bloom-picayune.mit.edu@nanog.org


On Jun 12, 2011, at 4:04 AM, Iljitsch van Beijnum wrote:

> On 12 jun 2011, at 12:35, Daniel Roesen wrote:
>=20
>> Could you point to any RFC which implies or explicitly states that
>> DHCPv6 MUST NOT be used in absence of RA with M and/or O=3D1?
>=20
> But what's the alternative? Always run DHCPv6 even if there are no =
router advertisements or router advertisements with O=3D0, M=3D0?
>=20

The alternative is as follows (can be done today without significant =
harm, only requires a couple of new
DHCPv6 options and trivial changes to host DHCPv6 implementations):

	Interface is initialized.
	IPv6 is initialized on the interface.
		Interface builds link-local address.
		Link local DAD is performed (Failure: Shut down IPv6 on =
interface... Done.)

		Look for static configuration. If Found, Apply static =
configuration, end.

		Initialize Backoff Timer =3D 3
		Initialize Tries =3D 0

LOOP A:
		Link Local->{All Routers,Link scope} Multicast ICMP RS =
packet is sent.
		Link Local->{All DHCP Servers, Link scope} Multicast =
DHCPv6 Solicit is sent
		Select(RA,DHCP while Backoff)
		Backoff*=3D1.5 if Backoff < 300
		tries++
		if (tries > 10 && !RA && !DHCP) Error, End

		repeat LOOP A if (!RA && !DHCP)

	if (RA)
			Process RA
			if (M || O)
			{
				if (DHCP)
				{
					Process DHCP as determined by =
{M,O} bits.
					End
				}
LOOP B:
				DHCPv6 Solicit (as in Loop A)

				tries++
				if (tries > 10 && !DHCP) Error, End

				repeat LOOP B if (!DHCP)

				process RA+DHCP according to M
				End
			}
	}

	if (DHCP)
	{
		# DHCP, but, no RA received
LOOP C:
		Router Solicit (as in Loop A)
		tries++
		repeat LOOP C if (tries < 5 && !RA)

		if (RA)
		{
			Process RA+DHCP according to {M,O} bits in RA.
		}
		else
		{
			Process DHCP as if RA received with no data and =
M bit
		}
	}
}
		=09
> Like I said before, that would pollute the network with many =
multicasts which can seriously degrade wifi performance.
>=20

I don't see how the above would do so. It's mostly compatible with what =
we have today and it would take a very very
large number of hosts (generally in excess of most switches forwarding =
table capacities) to contribute significant
network pollution.

Additionally, the multicast rate would only be increased on hosts which =
had no static configuration and the network
had no functional RA and/or DHCP services.

> And networks without RAs are very common. We call those networks =
"IPv4-only networks".
>=20

Fair point. However, even in such a scenario, I don't believe that the =
traffic provided above (up to 20 multicast
packets provided over 422 seconds worst case) would constitute the kind =
of problem you are describing.

> And in the current situation DHCPv6 without router advertisements is =
pointless because you may get an address, but you have no place to send =
your packets.

The point is that part of the solution needs to include adding routing =
information options to DHCPv6. That doesn't
even require significant modification to the DHCP software, just =
definitions for new fields and a little bit of UI
coding on the server and the ability to process the new options on the =
client.

Owen



home help back first fref pref prev next nref lref last post