static int process_ip_string(FILE *f, char *ip_string, int type)
{
	int error = 0;
	char addr[INET6_ADDRSTRLEN];
	int i = 0;
	int j = 0;
	char str[256];
	char sub_str[10];
	int offset = 0;

	memset(addr, 0, sizeof(addr));

	while (parse_ip_val_buffer(ip_string, &offset, addr,
					(MAX_IP_ADDR_SIZE * 2))) {

		sub_str[0] = 0;
		if (is_ipv4(addr)) {
			switch (type) {
			case IPADDR:
				snprintf(str, sizeof(str), "%s", "IPADDR");
				break;
			case NETMASK:
				snprintf(str, sizeof(str), "%s", "NETMASK");
				break;
			case GATEWAY:
				snprintf(str, sizeof(str), "%s", "GATEWAY");
				break;
			case DNS:
				snprintf(str, sizeof(str), "%s", "DNS");
				break;
			}
			if (i != 0) {
				if (type != DNS) {
					snprintf(sub_str, sizeof(sub_str),
						"_%d", i++);
				} else {
					snprintf(sub_str, sizeof(sub_str),
						"%d", ++i);
				}
			} else if (type == DNS) {
				snprintf(sub_str, sizeof(sub_str), "%d", ++i);
			}


		} else if (expand_ipv6(addr, type)) {
			switch (type) {
			case IPADDR:
				snprintf(str, sizeof(str), "%s", "IPV6ADDR");
				break;
			case NETMASK:
				snprintf(str, sizeof(str), "%s", "IPV6NETMASK");
				break;
			case GATEWAY:
				snprintf(str, sizeof(str), "%s",
					"IPV6_DEFAULTGW");
				break;
			case DNS:
				snprintf(str, sizeof(str), "%s",  "DNS");
				break;
			}
			if ((j != 0) || (type == DNS)) {
				if (type != DNS) {
					snprintf(sub_str, sizeof(sub_str),
						"_%d", j++);
				} else {
					snprintf(sub_str, sizeof(sub_str),
						"%d", ++i);
				}
			} else if (type == DNS) {
				snprintf(sub_str, sizeof(sub_str),
					"%d", ++i);
			}
		} else {
			return  HV_INVALIDARG;
		}

		error = kvp_write_file(f, str, sub_str, addr);
		if (error)
			return error;
		memset(addr, 0, sizeof(addr));
	}

	return 0;
}
Unknown