dns: fix change hashing and add batch update functions
The previous code did a cheap hash based on pointers, under the assumption that the IP configs don't get recreated. But with IPv6 the IP6 config that's eventually applied is a composite of the DHCPv6 and the RA information, and is thus recreated each time something in the DHCPv6 or RA changes. Switch to actually hashing the IP config data and its order to prevent this problem. Next, add functions to signal that a batch of updates will be started, and to only commit those updates when all of them have landed, and if they have actually changed anything. We'll use these functions later to reduce the number of changes that get made to /etc/resolv.conf.
Showing with 96 additions and 58 deletions