Say goodbye to libdhcp in anaconda. This enormous patch for anaconda removes our use of libdhcp (which also means libdhcp4client and libdhcp6client) in favor of spawning the client daemons if users want DHCP or DHCPv6. In addition, iface.c in libisys has been expanded to do static network configuration via libnl, which replaces the pump-like code that was in libdhcp. A number of utility functions have been put in iface.c for use in libisys as well as loader. Here is a list of the major changes in this code: 1) A new interface configuration API in libisys. The API functions are listed in iface.h. These functions give us information about the current state of the interface, configure an interface (manually, by DHCP, by DHCPv6, or by neighbor discovery), bring an interface up or down, clear an interface's configuration, and other functions. iface.c uses libnl and the sockets API to do its work. 2) Remove all use of pumpIntfInfo and networkDeviceConfig. All interface configuration is now in type 'iface_t'. Loader made it difficult to trace problems. No more things like dev->dev.device to get 'eth0'. 3) No more storing information as an ip_addr_t. Since libdhcp is gone, so is this utility type for storing either an in_addr or in6_addr. We just store in_addr or in6_addr now. For values that could be either family, we store the human-readable representation as a char * mostly because that's the form we'll need it in most often and converting to an in_addr or in6_addr on the fly is cheap. 4) Adding /sbin/dhclient and /sbin/dhcp6c to the stage 1 image. dhclient also requires the dhclient-script, so that's in the image as well, including the tools it needs. 5) As much removal of duplicate information as possible. More patches for this later. 6) No longer storing the IPv4 network address. We don't need it anymore except to calculate our broadcast address, so it's done there and then thrown out. 7) Error checking improvements in loader and libisys code. 8) Reduction of loader2/net.c code. There was a lot of duplication. With the new iface API, a lot of things in loader's net.c code were able to be removed. For example, there is no longer the cfg vs. newCfg in many of the functions (or iface vs. newiface with the new code). This patch focuses on the backend network configuration code. The next patch will be to rework user interface code with the following major changes: - Collecting the IPv6 default gateway from the user. - Collecting any needed NetworkManager settings from the user, as well as just improving our interaction with NM. - Collecting per-interface resolv.conf information (NM uses this if it finds it). - And more probably. -- David Cantrell