Index: uspace/lib/c/Makefile
===================================================================
--- uspace/lib/c/Makefile	(revision 2687bdbc4faca1a8782e8afa0768320dcf8ee0c3)
+++ uspace/lib/c/Makefile	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
@@ -99,4 +99,5 @@
 	generic/vfs/vfs.c \
 	generic/vfs/canonify.c \
+	generic/net/inet.c \
 	generic/stacktrace.c \
 	generic/arg_parse.c \
Index: uspace/lib/c/generic/net/inet.c
===================================================================
--- uspace/lib/c/generic/net/inet.c	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
+++ uspace/lib/c/generic/net/inet.c	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2009 Lukas Mejdrech
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ *  @{
+ */
+
+/** @file
+ * Internet protocol address conversion functions implementation.
+ */
+
+#include <net/socket_codes.h>
+#include <net/in.h>
+#include <net/in6.h>
+#include <net/inet.h>
+
+#include <errno.h>
+#include <mem.h>
+#include <stdio.h>
+#include <str.h>
+
+/** Prints the address into the character buffer.
+ *
+ *  @param[in] family	The address family.
+ *  @param[in] data	The address data.
+ *  @param[out] address	The character buffer to be filled.
+ *  @param[in] length	The buffer length.
+ *  @returns		EOK on success.
+ *  @returns		EINVAL if the data or address parameter is NULL.
+ *  @returns		ENOMEM if the character buffer is not long enough.
+ *  @returns		ENOTSUP if the address family is not supported.
+ */
+int
+inet_ntop(uint16_t family, const uint8_t *data, char *address, size_t length)
+{
+	if ((!data) || (!address))
+		return EINVAL;
+
+	switch (family) {
+	case AF_INET:
+		// check the output buffer size
+		if (length < INET_ADDRSTRLEN)
+			return ENOMEM;
+			
+		// fill the buffer with the IPv4 address
+		snprintf(address, length, "%hhu.%hhu.%hhu.%hhu",
+		    data[0], data[1], data[2], data[3]);
+
+		return EOK;
+
+	case AF_INET6:
+		// check the output buffer size
+		if (length < INET6_ADDRSTRLEN)
+			return ENOMEM;
+		
+		// fill the buffer with the IPv6 address
+		snprintf(address, length,
+		    "%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:"
+		    "%hhx%hhx:%hhx%hhx",
+		    data[0], data[1], data[2], data[3], data[4], data[5],
+		    data[6], data[7], data[8], data[9], data[10], data[11],
+		    data[12], data[13], data[14], data[15]);
+		
+		return EOK;
+
+	default:
+		return ENOTSUP;
+	}
+}
+
+/** Parses the character string into the address.
+ *
+ *  If the string is shorter than the full address, zero bytes are added.
+ *
+ *  @param[in] family	The address family.
+ *  @param[in] address	The character buffer to be parsed.
+ *  @param[out] data	The address data to be filled.
+ *  @returns		EOK on success.
+ *  @returns		EINVAL if the data parameter is NULL.
+ *  @returns		ENOENT if the address parameter is NULL.
+ *  @returns		ENOTSUP if the address family is not supported.
+ */
+int inet_pton(uint16_t family, const char *address, uint8_t *data)
+{
+	/** The base number of the values. */
+	int base;
+	/** The number of bytes per a section. */
+	size_t bytes;
+	/** The number of bytes of the address data. */
+	int count;
+
+	const char *next;
+	char *last;
+	int index;
+	size_t shift;
+	unsigned long value;
+
+	if (!data)
+		return EINVAL;
+
+	// set the processing parameters
+	switch (family) {
+	case AF_INET:
+		count = 4;
+		base = 10;
+		bytes = 1;
+		break;
+
+	case AF_INET6:
+		count = 16;
+		base = 16;
+		bytes = 4;
+		break;
+
+	default:
+		return ENOTSUP;
+	}
+
+	// erase if no address
+	if (!address) {
+		bzero(data, count);
+		return ENOENT;
+	}
+
+	// process the string from the beginning
+	next = address;
+	index = 0;
+	do {
+		// if the actual character is set
+		if (next && *next) {
+
+			// if not on the first character
+			if (index) {
+				// move to the next character
+				++next;
+			}
+
+			// parse the actual integral value
+			value = strtoul(next, &last, base);
+			// remember the last problematic character
+			// should be either '.' or ':' but is ignored to be more
+			// generic
+			next = last;
+
+			// fill the address data byte by byte
+			shift = bytes - 1;
+			do {
+				// like little endian
+				data[index + shift] = value;
+				value >>= 8;
+			} while(shift --);
+
+			index += bytes;
+		} else {
+			// erase the rest of the address
+			bzero(data + index, count - index);
+			return EOK;
+		}
+	} while (index < count);
+
+	return EOK;
+}
+
+/** @}
+ */
Index: uspace/lib/c/include/net/in.h
===================================================================
--- uspace/lib/c/include/net/in.h	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
+++ uspace/lib/c/include/net/in.h	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2009 Lukas Mejdrech
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ *  @{
+ */
+
+/** @file
+ *  INET family common definitions.
+ */
+
+#ifndef LIBC_IN_H_
+#define LIBC_IN_H_
+
+#include <net/inet.h>
+#include <net/ip_protocols.h>
+#include <sys/types.h>
+
+/** INET string address maximum length. */
+#define INET_ADDRSTRLEN		(4 * 3 + 3 + 1)
+
+/** Type definition of the INET address.
+ * @see in_addr
+ */
+typedef struct in_addr		in_addr_t;
+
+/** Type definition of the INET socket address.
+ * @see sockaddr_in
+ */
+typedef struct sockaddr_in	sockaddr_in_t;
+
+/** INET address. */
+struct in_addr {
+	/** 4 byte IP address. */
+	uint32_t s_addr;
+};
+
+/** INET socket address.
+ * @see sockaddr
+ */
+struct sockaddr_in {
+	/** Address family. Should be AF_INET. */
+	uint16_t sin_family;
+	/** Port number. */
+	uint16_t sin_port;
+	/** Internet address. */
+	struct in_addr sin_addr;
+	/** Padding to meet the sockaddr size. */
+	uint8_t sin_zero[8];
+};
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/c/include/net/in6.h
===================================================================
--- uspace/lib/c/include/net/in6.h	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
+++ uspace/lib/c/include/net/in6.h	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2009 Lukas Mejdrech
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ *  @{
+ */
+
+/** @file
+ *  INET6 family common definitions.
+ */
+
+#ifndef LIBC_IN6_H_
+#define LIBC_IN6_H_
+
+#include <net/inet.h>
+#include <net/ip_protocols.h>
+#include <sys/types.h>
+
+/** INET6 string address maximum length. */
+#define INET6_ADDRSTRLEN	(8 * 4 + 7 + 1)
+
+/** Type definition of the INET6 address.
+ * @see in6_addr
+ */
+typedef struct in6_addr	in6_addr_t;
+
+/** Type definition of the INET6 socket address.
+ * @see sockaddr_in6
+ */
+typedef struct sockaddr_in6	sockaddr_in6_t;
+
+/** INET6 address. */
+struct in6_addr {
+	/** 16 byte IPv6 address. */
+	unsigned char s6_addr[16];
+};
+
+/** INET6 socket address.
+ * @see sockaddr
+ */
+struct sockaddr_in6 {
+	/** Address family. Should be AF_INET6. */
+	uint16_t sin6_family;
+	/** Port number. */
+	uint16_t sin6_port;
+	/** IPv6 flow information. */
+	uint32_t sin6_flowinfo;
+	/** IPv6 address. */
+	struct in6_addr sin6_addr;
+	/** Scope identifier. */
+	uint32_t sin6_scope_id;
+};
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/c/include/net/inet.h
===================================================================
--- uspace/lib/c/include/net/inet.h	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
+++ uspace/lib/c/include/net/inet.h	(revision e4554d4cd2ebcf91fb39f3fa98bbd0f229e55fa3)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2009 Lukas Mejdrech
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ *  @{
+ */
+
+/** @file
+ *  Internet common definitions.
+ */
+
+#ifndef LIBC_INET_H_
+#define LIBC_INET_H_
+
+#include <sys/types.h>
+#include <byteorder.h>
+
+/** Type definition of the socket address.
+ * @see sockaddr
+ */
+typedef struct sockaddr		sockaddr_t;
+
+/** Type definition of the address information.
+ * @see addrinfo
+ */
+typedef struct addrinfo		addrinfo_t;
+
+/** Socket address. */
+struct sockaddr {
+	/** Address family. @see socket.h */
+	uint16_t sa_family;
+	/** 14 byte protocol address. */
+	uint8_t sa_data[14];
+};
+
+extern int inet_ntop(uint16_t, const uint8_t *, char *, size_t);
+extern int inet_pton(uint16_t, const char *, uint8_t *);
+
+#endif
+
+/** @}
+ */
