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. 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 -- 1.9.1 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel