Specification for Dnsmasq DHCPv6

Blueprint dnsmasq-ipv6-dhcpv6-stateless
Blueprint dnsmasq-ipv6-dhcpv6-stateful

Change-Id: I4f3c15d1d43a27dd0e609107844d4715d39967e4
This commit is contained in:
Xuhan Peng 2014-06-12 16:07:46 +08:00
parent b13d249eff
commit a8422683c8
1 changed files with 207 additions and 0 deletions

View File

@ -0,0 +1,207 @@
=====================================================
Support DHCPv6 stateless and stateful mode in Dnsmasq
=====================================================
As [Spec_RADVD]_ is proposed to use radvd as the preferred reference
implementation for IPv6 Router Advertisements and SLAAC, this spec is
to allow tenant VM to obtain stateful dhcpv6 address or stateless
dhcpv6 address by Dnsmasq when ipv6_address_mode of a tenant subnet is set.
Launchpad blueprint:
https://blueprints.launchpad.net/neutron/+spec/dnsmasq-ipv6-dhcpv6-stateless
https://blueprints.launchpad.net/neutron/+spec/dnsmasq-ipv6-dhcpv6-stateful
Problem description
===================
1. When dhcpv6 stateful is set as IPv6 address mode of a tenant subnet,
OpenStack admin wishes tenant VMs can obtain IPv6 address and optional
info (such as DNS info) from OpenStack network service.
2. When dhcpv6 stateless is set as IPv6 address mode of a tenant subnet,
router advertisement is taken care of by either external router or
OpenStack managed RADVD. OpenStack admin wishes tenant VMs can obtain
IPv6 address by SLAAC and obtain optional info from OpenStack network
service.
::
+----------------------------------------------------------------------+
| |
| |
| | +---------------------------------+
| +------------------------------+ +---------------------------+ | | |
| |dhcp namespace | | router | | | +--------------+ |
| | +-----------+ | | namespace +----------+ | | | | | |
| | | dnsmasq | | | | RADVD | | | | | | |
| | +-+---+-----+--------+ | | +----+--------+++ | | | +-------> | |
| | | | qdhcp-xxxx | | | | qr-xxxx || | | | | | | |
| | | +-------+------+ | | +----+---------+ | | | | +-----> VM | |
| | | | | | | | | | | | | | | |
| +------------------------------+ +---------------------------+ | | | | +-------+------+ |
| | | | | | | | | | |
| | +--+--------------------------------+-+ | | | | | | |
| | | br-int | | | | | | +--------+--------+ |
| | +------------------+------------------+ | | | | | | br-int | |
| | | | | | | | +--------+--------+ |
| | | | | | | | | |
| | +------+------+ | | | | | | |
| | | br-eth0 | | | | | | +---------------+ |
| | +------+------+ | | | | | | br-eth0 | |
| | | | | | | | +---------------+ |
| | | | | | | | | |
| | +-----+-----+ | | | | | +------+-------+ |
| | | eth0 | | | | | | | eth0 | |
+-----------------------------+-----+-----+----------------------------+ +--------+-------+------+---------+
| | | | | |
| | | | | |
| +--------------------------------------------------------+
| | | |
+------------------------------------------------------------------------+
IPv6 address/optional info | RA |
+----------------+
Proposed change
===============
According to [DNSMASQ_MANPAGE]_:
1. DHCPv6 stateless mode: dnsmasq in static mode with dhcp-optsfile
option specified can be leveraged to use dnsmasq as a simple stateless
dhcp server.
2. DHCPv6 stateful mode: dnsmasq in static mode with dhcp-hostsfile
and dhcp-optsfile options specified can be leveraged to use dnsmasq
as stateful dhcp server.
Alternatives
------------
None
Data model impact
-----------------
None
REST API impact
---------------
In Icehouse release, ipv6_ra_mode and ipv6_address_mode are introduced
to subnet API to enable tenant network IPv6 support.
Rest API change for IPv6 modes in Icehouse reference: [IPv6_MODES_REST]_
This blueprint will implement the functionality required to satisfy
IPv6 Subnets with ipv6_address_mode set to dhcpv6-stateful or
dhcpv6-stateless.
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
* This change will require support in python-neutronclient for the two
IPv6 subnet attributes - which is currently in `review <https://review.openstack.org/#/c/75871/>`_
Performance Impact
------------------
None
Other deployer impact
---------------------
* This change will change the behavior of Neutron in specific
configurations, when the IPv6 attributes for Subnets are set.
Previously, the attributes were no-ops.
Developer impact
----------------
None
Implementation
==============
* Subnets will be created with ipv6_address_mode set to
dhcpv6-stateful or dhcpv6-stateless.
* If no dnsmasq process for subnets network is launched,
Neutron will launch new dnsmasq process on subnets dhcp port
in qdhcp- namespace. If previous dnsmasq process is already
launched, restart dnsmasq with new configuration.
* Neutron will update dnsmasq process and restart it when subnet gets
updated.
Assignee(s)
-----------
Primary assignee:
* Shixiong
* xuhanp
Work Items
----------
* Break down this `code review <https://review.openstack.org/#/c/70649>`_
into smaller patches, and submit new code review for dhcpv6
stateful/stateless mode.
Dependencies
============
* The assumption of this spec is Router Advertisement is provided by
either provider network router or OpenStack Network Service (One
implementation is RADVD [Spec_RADVD]_).
* Bump DNSMASQ version to 2.63 to support IPv6 tag. [DNSMASQ_VERSTION]_
Testing
=======
* Add unit tests to support Subnets created with the ipv6_address_mode
set to dhcpv6-stateful or dhcpv6-stateless.
* Verify that dnsmasq can be launched with expected mode and options,
in correct namespace.
* Add tempest API and scenairo tests for stateful and stateless dhcpv6.
Reference: [API_TESTS_IPV6]_
Documentation Impact
====================
Documentation about this network configuration will need to be
written.
References
==========
.. [Spec_RADVD] `Spec for adding support for radvd for IPv6 SLAAC
<https://review.openstack.org/#/c/101306>`_
.. [DNSMASQ_MANPAGE] `DNSMASQ man page
<http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html>`_
.. [API_TESTS_IPV6] `Add IPv6 API test cases for Neutron Subnet API 254
<https://review.openstack.org/100134>`_
.. [DNSMASQ_VERSTION] `DNSMASQ minimum version for IPv6
<https://bugs.launchpad.net/neutron/+bug/1233339>`_
.. [IPv6_MODES_REST] `Rest API change for IPv6 modes in Icehouse`
<http://docs-draft.openstack.org/43/88043/9/gate/gate-neutron-specs-docs/82c251a/doc/build/html/specs/juno/ipv6-provider-nets-slaac.html#rest-api-impact>_