static void
merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
{
    guint32 num, i;

    num = nm_ip4_config_get_num_nameservers (src);
    for (i = 0; i < num; i++) {
        struct in_addr addr;
        char buf[INET_ADDRSTRLEN];

        addr.s_addr = nm_ip4_config_get_nameserver (src, i);
        if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
            add_string_item (rc->nameservers, buf);
    }

    num = nm_ip4_config_get_num_domains (src);
    for (i = 0; i < num; i++) {
        const char *domain;

        domain = nm_ip4_config_get_domain (src, i);
        if (!rc->domain)
            rc->domain = domain;
        add_string_item (rc->searches, domain);
    }

    num = nm_ip4_config_get_num_searches (src);
    for (i = 0; i < num; i++)
        add_string_item (rc->searches, nm_ip4_config_get_search (src, i));

    /* NIS stuff */
    num = nm_ip4_config_get_num_nis_servers (src);
    for (i = 0; i < num; i++) {
        struct in_addr addr;
        char buf[INET_ADDRSTRLEN];

        addr.s_addr = nm_ip4_config_get_nis_server (src, i);
        if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
            add_string_item (rc->nis_servers, buf);
    }

    if (nm_ip4_config_get_nis_domain (src)) {
        /* FIXME: handle multiple domains */
        if (!rc->nis_domain)
            rc->nis_domain = nm_ip4_config_get_nis_domain (src);
    }
}
void
nm_ip4_config_hash (NMIP4Config *config, GChecksum *sum, gboolean dns_only)
{
	guint32 i, n;
	const char *s;

	g_return_if_fail (config != NULL);
	g_return_if_fail (sum != NULL);

	if (dns_only == FALSE) {
		for (i = 0; i < nm_ip4_config_get_num_addresses (config); i++) {
			NMIP4Address *a = nm_ip4_config_get_address (config, i);

			hash_u32 (sum, nm_ip4_address_get_address (a));
			hash_u32 (sum, nm_ip4_address_get_prefix (a));
			hash_u32 (sum, nm_ip4_address_get_gateway (a));
		}

		for (i = 0; i < nm_ip4_config_get_num_routes (config); i++) {
			NMIP4Route *r = nm_ip4_config_get_route (config, i);

			hash_u32 (sum, nm_ip4_route_get_dest (r));
			hash_u32 (sum, nm_ip4_route_get_prefix (r));
			hash_u32 (sum, nm_ip4_route_get_next_hop (r));
			hash_u32 (sum, nm_ip4_route_get_metric (r));
		}

		n = nm_ip4_config_get_ptp_address (config);
		if (n)
			hash_u32 (sum, n);

		for (i = 0; i < nm_ip4_config_get_num_nis_servers (config); i++)
			hash_u32 (sum, nm_ip4_config_get_nis_server (config, i));

		s = nm_ip4_config_get_nis_domain (config);
		if (s)
			g_checksum_update (sum, (const guint8 *) s, strlen (s));
	}

	for (i = 0; i < nm_ip4_config_get_num_nameservers (config); i++)
		hash_u32 (sum, nm_ip4_config_get_nameserver (config, i));

	for (i = 0; i < nm_ip4_config_get_num_wins (config); i++)
		hash_u32 (sum, nm_ip4_config_get_wins (config, i));

	for (i = 0; i < nm_ip4_config_get_num_domains (config); i++) {
		s = nm_ip4_config_get_domain (config, i);
		g_checksum_update (sum, (const guint8 *) s, strlen (s));
	}

	for (i = 0; i < nm_ip4_config_get_num_searches (config); i++) {
		s = nm_ip4_config_get_search (config, i);
		g_checksum_update (sum, (const guint8 *) s, strlen (s));
	}
}