[systemd-devel] [PATCH 00/24] Initial DHCPv6 client support

Dan Williams dcbw at redhat.com
Fri Jun 13 09:26:10 PDT 2014


On Fri, 2014-06-13 at 16:44 +0300, Patrik Flykt wrote:
> 	Hi,
> 
> This patch set provides initial DHCPv6 client support for
> systemd-networkd. It adds support for ICMPv6 Router Solicitation sending
> and Router Advertisment receiving and the very basic Solicit, Advertise,
> Request and Reply message transactions. Networkd is able to start DHCPv6
> negotiation for a link, but doesn't yet do anything with the result.
> 
> As only the initial DHCPv6 client side support is implemented, this patch
> set omits the following features specified in RFC 3315:
>  - Rapid Commit in the Solicit message
>  - Information Request, should the router only announce the availability
>    of "Other" information
>  - Reacquiring of an address, i.e. Renew, Rebind, etc.
>  - Temporary adresses, option requesting, elapsed time options
>  - DHCPv6 authentication
> 
> ...and a few more that I for sure have forgotten from this list. The
> intent is to have the remaining parts essential for the protocol
> functionality to be done as quickly as possible after this patch set.
> 
> On startup, the DHCPv6 client implementation sends Router Soliciations
> in order to receive Router Advertisments. Only the Managed/Other flags
> in the Router Advertisment are currently used, any prefix information
> is currently ignored. ICMPv6 and a basic test case is handled by patches
> 02-04 with the basic DHCPv6 library and test case provided in patches 01
> and 08.

For future consumers of the library, can the RA/RS behavior be
selectively disabled?

Dan

> Machine-specific DUID and IAID identifiers are created in patches 05-07.
> The DUID is used to uniquely identify the machine with the IAID
> identifying a particular interface. The DUID is based on the machine ID
> and the IAID on interface name from udev or, if run in a container, the
> interface MAC address. Credits for implementing this part of the code
> goes to Tom.
> 
> With identifiers created, the DHCPv6 message (re)transmission is provided
> by patch 09 and enhanced in turn with patches 12 and 22 where Solicit
> and Reply message handling is implemented, respectively. Support for DHCPv6
> option appending and parsing is provided in patches 10 and 15, separated
> due to implementation complexity of the IA option and need of DHCPv6 lease
> handling code provided by patch 14.
> 
> The remaining patches add DHCPv6 message processing one message at a time
> with the required state changes and retransmission restarting. A client
> test program is provided, it should hopefully prevent possible bugs with
> later commits.
> 
> As with the DHCPv4 code, also with DHCPv6 it again became evident that
> borrowing code 1:1 from ConnMan wasn't really an option. The main loop
> syntax and systemd coding style is different enough to prevent any direct
> copying. On the positive side the ConnMan implementation exists and works
> very well making it possible to thoroughly dissect the DHCPv6 messaging
> going back and forth between the client and the server.
> 
> 
> Have fun while reviewing,
> 
> 
>      Patrik 
> 
> 
> 
> Patrik Flykt (22):
>   sd-dhcp6-client: Add initial DHCPv6 client files
>   sd-dhcp6-client: Add Router Solicitation and Advertisement support
>   sd-dhcp6-client: Add initial Router Advertisement test case
>   sd-dhcp6-client: Initialize Router Solicitation on startup
>   sd-dhcp6-client: Add DHCPv6 IAID functionality
>   sd-dhcp6-client: Add basic DHCPv6 test cases
>   sd-dhcp6-client: Add DHCPv6 client Solicitation timeout handling
>   sd-dhcp6-client: Add basic DHCPv6 option handling
>   sd-dhcp6-client: Add functions to bind to DHCPv6 UDP socket
>   sd-dhcp6-client: Add DHCPv6 Solicit message creation and sending
>   sd-dhcp6-client: Add RA and DHCPv6 Solicit test case
>   sd-dhcp6-lease: Add DHCPv6 lease handling
>   sd-dhcp6-client: Add IA Address option parsing
>   sd-dhcp6-client: Receive and parse Advertise messages
>   sd-dhcp6-lease: Add functions for accessing lease and addresses
>   sd-dhcp6-client: Add test case for Advertise message parsing
>   sd-dhcp6-client: Update start function to take a state
>   sd-dhcp6-client: Add Request message sending
>   sd-dhcp6-client: Add Advertise sending for test cases
>   sd-dhcp6-client: Receive and parse a reply and set T1 and T2 timers
>   sd-dhcp6-client: Add reply sending for test
>   networkd: Add initial DHCPv6 support
> 
> Tom Gundersen (2):
>   sd-dhcp6-client: Initialize DUID
>   network-internal: split out net_get_name()
> 
>  Makefile.am                                   |   38 +-
>  src/libsystemd-network/dhcp6-internal.h       |   79 ++
>  src/libsystemd-network/dhcp6-lease-internal.h |   57 ++
>  src/libsystemd-network/dhcp6-network.c        |  194 +++++
>  src/libsystemd-network/dhcp6-option.c         |  314 ++++++++
>  src/libsystemd-network/dhcp6-protocol.h       |  124 +++
>  src/libsystemd-network/icmp6-nd.c             |  317 ++++++++
>  src/libsystemd-network/icmp6-nd.h             |   59 ++
>  src/libsystemd-network/network-internal.c     |   26 +-
>  src/libsystemd-network/network-internal.h     |    1 +
>  src/libsystemd-network/sd-dhcp6-client.c      | 1056 +++++++++++++++++++++++++
>  src/libsystemd-network/sd-dhcp6-lease.c       |  178 +++++
>  src/libsystemd-network/test-dhcp6-client.c    |  624 +++++++++++++++
>  src/libsystemd-network/test-dhcp6-rs.c        |  155 ++++
>  src/network/networkd-link.c                   |   75 ++
>  src/network/networkd-network-gperf.gperf      |    1 +
>  src/network/networkd.h                        |    3 +
>  src/systemd/sd-dhcp6-client.h                 |   62 ++
>  src/systemd/sd-dhcp6-lease.h                  |   42 +
>  19 files changed, 3396 insertions(+), 9 deletions(-)
>  create mode 100644 src/libsystemd-network/dhcp6-internal.h
>  create mode 100644 src/libsystemd-network/dhcp6-lease-internal.h
>  create mode 100644 src/libsystemd-network/dhcp6-network.c
>  create mode 100644 src/libsystemd-network/dhcp6-option.c
>  create mode 100644 src/libsystemd-network/dhcp6-protocol.h
>  create mode 100644 src/libsystemd-network/icmp6-nd.c
>  create mode 100644 src/libsystemd-network/icmp6-nd.h
>  create mode 100644 src/libsystemd-network/sd-dhcp6-client.c
>  create mode 100644 src/libsystemd-network/sd-dhcp6-lease.c
>  create mode 100644 src/libsystemd-network/test-dhcp6-client.c
>  create mode 100644 src/libsystemd-network/test-dhcp6-rs.c
>  create mode 100644 src/systemd/sd-dhcp6-client.h
>  create mode 100644 src/systemd/sd-dhcp6-lease.h
> 




More information about the systemd-devel mailing list