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