module Native_Functions {

	/* direct import of inet_pton(AF_INET6) C function, returns net byte order */
	external function f_inet6_addr(in charstring ch) return octetstring;
	/* direct import of inet_addr() C function, returns net byte order */
	external function f_inet_addr(in charstring ch) return octetstring;
	/* like inet_addr() but return is host byte order */
	external function f_inet_haddr(in charstring ch) return octetstring;

	/* direct import of inet_ntoa() C function, input net byte order */
	external function f_inet_ntoa(in octetstring oct) return charstring;
	/* like inet_ntoa() but input is host byte order */
	external function f_inet_hntoa(in octetstring oct) return charstring;
}
