Index: uspace/lib/net/il/ip_client.c
===================================================================
--- uspace/lib/net/il/ip_client.c	(revision c69d327931c88d2878c9d58f4aa911edd6e873ea)
+++ uspace/lib/net/il/ip_client.c	(revision 4687a26c6b3564e9d93f158a13504a9c7fc0e9f9)
@@ -27,11 +27,11 @@
  */
 
-/** @addtogroup ip
- *  @{
+/** @addtogroup libnet
+ * @{
  */
 
 /** @file
- *  IP client interface implementation.
- *  @see ip_client.h
+ * IP client interface implementation.
+ * @see ip_client.h
  */
 
@@ -45,60 +45,116 @@
 #include <net/packet.h>
 
-size_t ip_client_header_length(packet_t packet){
+/** Returns the IP header length.
+ *
+ * @param[in] packet	The packet.
+ * @returns		The IP header length in bytes.
+ * @returns		Zero if there is no IP header.
+ */
+size_t ip_client_header_length(packet_t packet)
+{
 	ip_header_ref header;
 
 	header = (ip_header_ref) packet_get_data(packet);
-	if((! header)
-		|| (packet_get_data_length(packet) < sizeof(ip_header_t))){
+	if (!header || (packet_get_data_length(packet) < sizeof(ip_header_t)))
 		return 0;
-	}
+
 	return IP_HEADER_LENGTH(header);
 }
 
-int ip_client_get_pseudo_header(ip_protocol_t protocol, struct sockaddr * src, socklen_t srclen, struct sockaddr * dest, socklen_t destlen, size_t data_length, void **header, size_t * headerlen){
+/** Constructs the IPv4 pseudo header.
+ *
+ * @param[in] protocol	The transport protocol.
+ * @param[in] src	The source address.
+ * @param[in] srclen	The source address length.
+ * @param[in] dest	The destination address.
+ * @param[in] destlen	The destination address length.
+ * @param[in] data_length The data length to be set.
+ * @param[out] header	The constructed IPv4 pseudo header.
+ * @param[out] headerlen The length of the IP pseudo header in bytes.
+ * @returns		EOK on success.
+ * @returns		EBADMEM if the header and/or the headerlen parameter is
+ *			NULL.
+ * @returns		EINVAL if the source address and/or the destination
+ *			address parameter is NULL.
+ * @returns		EINVAL if the source address length is less than struct
+ *			sockaddr length.
+ * @returns		EINVAL if the source address length differs from the
+ *			destination address length.
+ * @returns		EINVAL if the source address family differs from the
+ *			destination family.
+ * @returns		EAFNOSUPPORT if the address family is not supported.
+ * @returns		ENOMEM if there is not enough memory left.
+ */
+int
+ip_client_get_pseudo_header(ip_protocol_t protocol, struct sockaddr *src,
+    socklen_t srclen, struct sockaddr *dest, socklen_t destlen,
+    size_t data_length, void **header, size_t *headerlen)
+{
 	ipv4_pseudo_header_ref header_in;
-	struct sockaddr_in * address_in;
-
-	if(!(header && headerlen)){
+	struct sockaddr_in *address_in;
+
+	if (!header || !headerlen)
 		return EBADMEM;
-	}
-	if(!(src && dest && (srclen > 0) && ((size_t) srclen >= sizeof(struct sockaddr)) && (srclen == destlen) && (src->sa_family == dest->sa_family))){
+
+	if (!src || !dest || srclen <= 0 ||
+	    (((size_t) srclen < sizeof(struct sockaddr))) ||
+	    (srclen != destlen) || (src->sa_family != dest->sa_family)) {
 		return EINVAL;
 	}
 
-	switch(src->sa_family){
-		case AF_INET:
-			if(srclen != sizeof(struct sockaddr_in)){
-				return EINVAL;
-			}
-			*headerlen = sizeof(*header_in);
-			header_in = (ipv4_pseudo_header_ref) malloc(*headerlen);
-			if(! header_in){
-				return ENOMEM;
-			}
-			bzero(header_in, * headerlen);
-			address_in = (struct sockaddr_in *) dest;
-			header_in->destination_address = address_in->sin_addr.s_addr;
-			address_in = (struct sockaddr_in *) src;
-			header_in->source_address = address_in->sin_addr.s_addr;
-			header_in->protocol = protocol;
-			header_in->data_length = htons(data_length);
-			*header = header_in;
-			return EOK;
-		// TODO IPv6
-/*		case AF_INET6:
-			if(addrlen != sizeof(struct sockaddr_in6)){
-				return EINVAL;
-			}
-			address_in6 = (struct sockaddr_in6 *) addr;
-			return EOK;
-*/		default:
-			return EAFNOSUPPORT;
-	}
-}
-
-int ip_client_prepare_packet(packet_t packet, ip_protocol_t protocol, ip_ttl_t ttl, ip_tos_t tos, int dont_fragment, size_t ipopt_length){
+	switch (src->sa_family) {
+	case AF_INET:
+		if (srclen != sizeof(struct sockaddr_in))
+			return EINVAL;
+		
+		*headerlen = sizeof(*header_in);
+		header_in = (ipv4_pseudo_header_ref) malloc(*headerlen);
+		if (!header_in)
+			return ENOMEM;
+
+		bzero(header_in, *headerlen);
+		address_in = (struct sockaddr_in *) dest;
+		header_in->destination_address = address_in->sin_addr.s_addr;
+		address_in = (struct sockaddr_in *) src;
+		header_in->source_address = address_in->sin_addr.s_addr;
+		header_in->protocol = protocol;
+		header_in->data_length = htons(data_length);
+		*header = header_in;
+		return EOK;
+
+	// TODO IPv6
+/*	case AF_INET6:
+		if (addrlen != sizeof(struct sockaddr_in6))
+			return EINVAL;
+
+		address_in6 = (struct sockaddr_in6 *) addr;
+		return EOK;
+*/
+
+	default:
+		return EAFNOSUPPORT;
+	}
+}
+
+/** Prepares the packet to be transfered via IP.
+ *
+ * The IP header is prefixed.
+ *
+ * @param[in,out] packet The packet to be prepared.
+ * @param[in] protocol	The transport protocol.
+ * @param[in] ttl	The time to live counter. The IPDEFTTL is set if zero.
+ * @param[in] tos	The type of service.
+ * @param[in] dont_fragment The value indicating whether fragmentation is
+ *			disabled.
+ * @param[in] ipopt_length The prefixed IP options length in bytes.
+ * @returns		EOK on success.
+ * @returns		ENOMEM if there is not enough memory left in the packet.
+ */
+int
+ip_client_prepare_packet(packet_t packet, ip_protocol_t protocol, ip_ttl_t ttl,
+    ip_tos_t tos, int dont_fragment, size_t ipopt_length)
+{
 	ip_header_ref header;
-	uint8_t * data;
+	uint8_t *data;
 	size_t padding;
 
@@ -106,5 +162,5 @@
 	// multiple of 4 bytes
 	padding =  ipopt_length % 4;
-	if(padding){
+	if (padding) {
 		padding = 4 - padding;
 		ipopt_length += padding;
@@ -113,68 +169,93 @@
 	// prefix the header
 	data = (uint8_t *) packet_prefix(packet, sizeof(ip_header_t) + padding);
-	if(! data){
+	if (!data)
 		return ENOMEM;
-	}
 
 	// add the padding
-	while(padding --){
+	while (padding--)
 		data[sizeof(ip_header_t) + padding] = IPOPT_NOOP;
-	}
 
 	// set the header
 	header = (ip_header_ref) data;
-	header->header_length = IP_COMPUTE_HEADER_LENGTH(sizeof(ip_header_t) + ipopt_length);
-	header->ttl = (ttl ? ttl : IPDEFTTL); //(((ttl) <= MAXTTL) ? ttl : MAXTTL) : IPDEFTTL;
+	header->header_length = IP_COMPUTE_HEADER_LENGTH(sizeof(ip_header_t) +
+	    ipopt_length);
+	header->ttl = (ttl ? ttl : IPDEFTTL);
 	header->tos = tos;
 	header->protocol = protocol;
 
-	if(dont_fragment){
+	if (dont_fragment)
 		header->flags = IPFLAG_DONT_FRAGMENT;
-	}
+
 	return EOK;
 }
 
-int ip_client_process_packet(packet_t packet, ip_protocol_t * protocol, ip_ttl_t * ttl, ip_tos_t * tos, int * dont_fragment, size_t * ipopt_length){
+/** Processes the received IP packet.
+ *
+ * Fills set header fields.
+ * Returns the prefixed IP header length.
+ *
+ * @param[in] packet	The received packet.
+ * @param[out] protocol	The transport protocol. May be NULL if not desired.
+ * @param[out] ttl	The time to live counter. May be NULL if not desired.
+ * @param[out] tos	The type of service. May be NULL if not desired.
+ * @param[out] dont_fragment The value indicating whether the fragmentation is
+ *			disabled. May be NULL if not desired.
+ * @param[out] ipopt_length The IP options length in bytes. May be NULL if not
+ *			desired.
+ * @returns		The prefixed IP header length in bytes on success.
+ * @returns		ENOMEM if the packet is too short to contain the IP
+ *			header.
+ */
+int
+ip_client_process_packet(packet_t packet, ip_protocol_t *protocol,
+    ip_ttl_t *ttl, ip_tos_t *tos, int *dont_fragment, size_t *ipopt_length)
+{
 	ip_header_ref header;
 
 	header = (ip_header_ref) packet_get_data(packet);
-	if((! header)
-		|| (packet_get_data_length(packet) < sizeof(ip_header_t))){
+	if (!header || (packet_get_data_length(packet) < sizeof(ip_header_t)))
 		return ENOMEM;
-	}
-
-	if(protocol){
+
+	if (protocol)
 		*protocol = header->protocol;
-	}
-	if(ttl){
+	if (ttl)
 		*ttl = header->ttl;
-	}
-	if(tos){
+	if (tos)
 		*tos = header->tos;
-	}
-	if(dont_fragment){
-		*dont_fragment = header->flags &IPFLAG_DONT_FRAGMENT;
-	}
-	if(ipopt_length){
+	if (dont_fragment)
+		*dont_fragment = header->flags & IPFLAG_DONT_FRAGMENT;
+	if (ipopt_length) {
 		*ipopt_length = IP_HEADER_LENGTH(header) - sizeof(ip_header_t);
 		return sizeof(ip_header_t);
-	}else{
+	} else {
 		return IP_HEADER_LENGTH(header);
 	}
 }
 
-int ip_client_set_pseudo_header_data_length(void *header, size_t headerlen, size_t data_length){
+/** Updates the IPv4 pseudo header data length field.
+ *
+ * @param[in,out] header The IPv4 pseudo header to be updated.
+ * @param[in] headerlen	The length of the IP pseudo header in bytes.
+ * @param[in] data_length The data length to be set.
+ * @returns		EOK on success.
+ * @returns		EBADMEM if the header parameter is NULL.
+ * @returns		EINVAL if the headerlen parameter is not IPv4 pseudo
+ *			header length.
+ */
+int
+ip_client_set_pseudo_header_data_length(void *header, size_t headerlen,
+    size_t data_length)
+{
 	ipv4_pseudo_header_ref header_in;
 
-	if(! header){
+	if (!header)
 		return EBADMEM;
-	}
-
-	if(headerlen == sizeof(ipv4_pseudo_header_t)){
+
+	if (headerlen == sizeof(ipv4_pseudo_header_t)) {
 		header_in = (ipv4_pseudo_header_ref) header;
 		header_in->data_length = htons(data_length);
 		return EOK;
 	// TODO IPv6
-	}else{
+	} else {
 		return EINVAL;
 	}
