Index: uspace/srv/net/il/arp/arp.c
===================================================================
--- uspace/srv/net/il/arp/arp.c	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/il/arp/arp.c	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -337,5 +337,5 @@
 		}
 		// get packet dimensions
-		if( ERROR_OCCURRED( nil_packet_size_req( device->phone, device_id, & device->addr_len, & device->prefix, & device->content, & device->suffix ))){
+		if( ERROR_OCCURRED( nil_packet_size_req( device->phone, device_id, & device->packet_dimension ))){
 			fibril_rwlock_write_unlock( & arp_globals.lock );
 			arp_protos_destroy( & device->protos );
@@ -392,6 +392,6 @@
 	// ARP packet content size = header + ( address + translation ) * 2
 	length = 8 + ( CONVERT_SIZE( char, uint8_t, proto->addr->length ) + CONVERT_SIZE( char, uint8_t, device->addr->length )) * 2;
-	if( length > device->content ) return NULL;
-	packet = packet_get_4( arp_globals.net_phone, device->addr_len, device->prefix, length, device->suffix );
+	if( length > device->packet_dimension.content ) return NULL;
+	packet = packet_get_4( arp_globals.net_phone, device->packet_dimension.addr_len, device->packet_dimension.prefix, length, device->packet_dimension.suffix );
 	if( ! packet ) return NULL;
 	header = ( arp_header_ref ) packet_suffix( packet, length );
@@ -472,5 +472,5 @@
 			memcpy( des_proto, src_proto, header->protocol_length );
 			memcpy( src_proto, proto->addr->value, header->protocol_length );
-			memcpy( src_hw, device->addr->value, device->addr_len );
+			memcpy( src_hw, device->addr->value, device->packet_dimension.addr_len );
 			memcpy( des_hw, hw_source->value, header->hardware_length );
 			ERROR_PROPAGATE( packet_set_addr( packet, src_hw, des_hw, header->hardware_length ));
@@ -511,5 +511,5 @@
 		return ENOENT;
 	}
-	device->content = mtu;
+	device->packet_dimension.content = mtu;
 	printf( "arp - device %d changed mtu to %d\n\n", device_id, mtu );
 	fibril_rwlock_write_unlock( & arp_globals.lock );
Index: uspace/srv/net/il/arp/arp.h
===================================================================
--- uspace/srv/net/il/arp/arp.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/il/arp/arp.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -103,17 +103,7 @@
 	 */
 	hw_type_t			hardware;
-	/** Reserved packet prefix length.
+	/** Packet dimension.
 	 */
-	size_t				prefix;
-	/** Maximal packet content length.
-	 */
-	size_t				content;
-	/** Reserved packet suffix length.
-	 */
-	size_t				suffix;
-	/** Packet address length.
-	 *  The hardware address length is used.
-	 */
-	size_t				addr_len;
+	packet_dimension_t	packet_dimension;
 	/** Actual device hardware address.
 	 */
Index: uspace/srv/net/il/ip/ip.c
===================================================================
--- uspace/srv/net/il/ip/ip.c	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/il/ip/ip.c	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -152,4 +152,16 @@
 int	ip_device_state_message( device_id_t device_id, device_state_t state );
 
+/** Returns the device packet dimensions for sending.
+ *  @param[in] phone The service module phone.
+ *  @param[in] message The service specific message.
+ *  @param[in] device_id The device identifier.
+ *  @param[out] addr_len The minimum reserved address length.
+ *  @param[out] prefix The minimum reserved prefix size.
+ *  @param[out] content The maximum content size.
+ *  @param[out] suffix The minimum reserved suffix size.
+ *  @returns EOK on success.
+ */
+int	ip_packet_size_message( device_id_t device_id, size_t * addr_len, size_t * prefix, size_t * content, size_t * suffix );
+
 /** Registers the transport layer protocol.
  *  The traffic of this protocol will be supplied using either the receive function or IPC message.
@@ -551,8 +563,8 @@
 	}
 	// get packet dimensions
-	ERROR_PROPAGATE( nil_packet_size_req( ip_netif->phone, ip_netif->device_id, & ip_netif->addr_len, & ip_netif->prefix, & ip_netif->content, & ip_netif->suffix ));
-	if( ip_netif->content < IP_MIN_CONTENT ){
-		printf( "Maximum transmission unit %d bytes is too small, at least %d bytes are needed\n", ip_netif->content, IP_MIN_CONTENT );
-		ip_netif->content = IP_MIN_CONTENT;
+	ERROR_PROPAGATE( nil_packet_size_req( ip_netif->phone, ip_netif->device_id, & ip_netif->packet_dimension ));
+	if( ip_netif->packet_dimension.content < IP_MIN_CONTENT ){
+		printf( "Maximum transmission unit %d bytes is too small, at least %d bytes are needed\n", ip_netif->packet_dimension.content, IP_MIN_CONTENT );
+		ip_netif->packet_dimension.content = IP_MIN_CONTENT;
 	}
 	index = ip_netifs_add( & ip_globals.netifs, ip_netif->device_id, ip_netif );
@@ -577,5 +589,5 @@
 		return ENOENT;
 	}
-	netif->content = mtu;
+	netif->packet_dimension.content = mtu;
 	printf( "ip - device %d changed mtu to %d\n\n", device_id, mtu );
 	fibril_rwlock_write_unlock( & ip_globals.netifs_lock );
@@ -768,5 +780,5 @@
 		pq_release( ip_globals.net_phone, packet_get_id( packet ));
 	}else{
-		packet = ip_split_packet( packet, netif->prefix, netif->content, netif->suffix, netif->addr_len, error );
+		packet = ip_split_packet( packet, netif->packet_dimension.prefix, netif->packet_dimension.content, netif->packet_dimension.suffix, netif->packet_dimension.addr_len, error );
 		if( packet ){
 			nil_send_msg( netif->phone, netif->device_id, packet, SERVICE_IP );
@@ -891,5 +903,5 @@
 			return ERROR_CODE;
 		case NET_IL_PACKET_SPACE:
-			ERROR_PROPAGATE( ip_packet_size_req( 0, IPC_GET_DEVICE( call ), IPC_SET_ADDR( answer ), IPC_SET_PREFIX( answer ), IPC_SET_CONTENT( answer ), IPC_SET_SUFFIX( answer )));
+			ERROR_PROPAGATE( ip_packet_size_message( IPC_GET_DEVICE( call ), IPC_SET_ADDR( answer ), IPC_SET_PREFIX( answer ), IPC_SET_CONTENT( answer ), IPC_SET_SUFFIX( answer )));
 			* answer_count = 3;
 			return EOK;
@@ -900,5 +912,10 @@
 }
 
-int ip_packet_size_req( int ip_phone, device_id_t device_id, size_t * addr_len, size_t * prefix, size_t * content, size_t * suffix ){
+int ip_packet_size_req( int ip_phone, device_id_t device_id, packet_dimension_ref packet_dimension ){
+	if( ! packet_dimension ) return EBADMEM;
+	return ip_packet_size_message( device_id, & packet_dimension->addr_len, & packet_dimension->prefix, & packet_dimension->content, & packet_dimension->suffix );
+}
+
+int ip_packet_size_message( device_id_t device_id, size_t * addr_len, size_t * prefix, size_t * content, size_t * suffix ){
 	ip_netif_ref	netif;
 	int				index;
@@ -914,7 +931,7 @@
 			netif = ip_netifs_get_index( & ip_globals.netifs, index );
 			if( netif ){
-				if( netif->addr_len > * addr_len ) * addr_len = netif->addr_len;
-				if( netif->prefix > * prefix ) * prefix = netif->prefix;
-				if( netif->suffix > * suffix ) * suffix = netif->suffix;
+				if( netif->packet_dimension.addr_len > * addr_len ) * addr_len = netif->packet_dimension.addr_len;
+				if( netif->packet_dimension.prefix > * prefix ) * prefix = netif->packet_dimension.prefix;
+				if( netif->packet_dimension.suffix > * suffix ) * suffix = netif->packet_dimension.suffix;
 			}
 		}
@@ -927,7 +944,7 @@
 			return ENOENT;
 		}
-		* addr_len = ( netif->addr_len > IP_ADDR ) ? netif->addr_len : IP_ADDR;
-		* prefix = netif->prefix + IP_PREFIX;
-		* suffix = netif->suffix + IP_SUFFIX;
+		* addr_len = ( netif->packet_dimension.addr_len > IP_ADDR ) ? netif->packet_dimension.addr_len : IP_ADDR;
+		* prefix = netif->packet_dimension.prefix + IP_PREFIX;
+		* suffix = netif->packet_dimension.suffix + IP_SUFFIX;
 	}
 	fibril_rwlock_read_unlock( & ip_globals.netifs_lock );
Index: uspace/srv/net/il/ip/ip.h
===================================================================
--- uspace/srv/net/il/ip/ip.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/il/ip/ip.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -137,17 +137,7 @@
 	 */
 	ip_routes_t	routes;
-	/** Reserved packet prefix length.
-	 */
-	size_t				prefix;
-	/** Maximal packet content length.
-	 */
-	size_t				content;
-	/** Reserved packet suffix length.
-	 */
-	size_t				suffix;
-	/** Packet address length.
-	 *  The hardware address length is used.
-	 */
-	size_t				addr_len;
+	/** Packet dimension.
+	 */
+	packet_dimension_t	packet_dimension;
 };
 
Index: uspace/srv/net/il/ip/ip_remote.c
===================================================================
--- uspace/srv/net/il/ip/ip_remote.c	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/il/ip/ip_remote.c	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -72,6 +72,6 @@
 }
 
-int ip_packet_size_req( int ip_phone, device_id_t device_id, size_t * addr_len, size_t * prefix, size_t * content, size_t * suffix ){
-	return generic_packet_size_req( ip_phone, NET_IL_PACKET_SPACE, device_id, addr_len, prefix, content, suffix );
+int ip_packet_size_req( int ip_phone, device_id_t device_id, packet_dimension_ref packet_dimension ){
+	return generic_packet_size_req( ip_phone, NET_IL_PACKET_SPACE, device_id, packet_dimension );
 }
 
Index: uspace/srv/net/include/ip_interface.h
===================================================================
--- uspace/srv/net/include/ip_interface.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/include/ip_interface.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -137,17 +137,13 @@
 int	ip_set_gateway_req( int ip_phone, device_id_t device_id, in_addr_t gateway );
 
-/** Returns the device packet dimensions for sending.
+/** Returns the device packet dimension for sending.
  *  @param[in] ip_phone The IP module phone used for (semi)remote calls.
  *  @param[in] device_id The device identifier.
- *  @param[out] addr_len The minimum reserved address length.
- *  @param[out] prefix The minimum reserved prefix size.
- *  @param[out] content The maximum content size.
- *  @param[out] suffix The minimum reserved suffix size.
+ *  @param[out] packet_dimension The packet dimension.
  *  @returns EOK on success.
- *  @returns EBADMEM if either one of the parameters is NULL.
  *  @returns ENOENT if there is no such device.
  *  @returns Other error codes as defined for the generic_packet_size_req() function.
  */
-int	ip_packet_size_req( int ip_phone, device_id_t device_id, size_t * addr_len, size_t * prefix, size_t * content, size_t * suffix );
+int	ip_packet_size_req( int ip_phone, device_id_t device_id, packet_dimension_ref packet_dimension );
 
 /** Notifies the IP module about the received error notification packet.
Index: uspace/srv/net/include/nil_interface.h
===================================================================
--- uspace/srv/net/include/nil_interface.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/include/nil_interface.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -98,18 +98,14 @@
 	generic_send_msg( nil_phone, NET_NIL_SEND, device_id, packet_get_id( packet ), sender, 0 )
 
-/** Returns the device packet dimensions for sending.
+/** Returns the device packet dimension for sending.
  *  @param[in] nil_phone The network interface layer phone.
  *  @param[in] device_id The device identifier.
- *  @param[out] addr_len The minimum reserved address length.
- *  @param[out] prefix The minimum reserved prefix size.
- *  @param[out] content The maximum content size.
- *  @param[out] suffix The minimum reserved suffix size.
+ *  @param[out] packet_dimension The packet dimensions.
  *  @returns EOK on success.
- *  @returns EBADMEM if either one of the parameters is NULL.
  *  @returns ENOENT if there is no such device.
  *  @returns Other error codes as defined for the generic_packet_size_req() function.
  */
-#define nil_packet_size_req( nil_phone, device_id, addr_len, prefix, content, suffix )	\
-	generic_packet_size_req( nil_phone, NET_NIL_PACKET_SPACE, device_id, addr_len, prefix, content, suffix )
+#define nil_packet_size_req( nil_phone, device_id, packet_dimension )	\
+	generic_packet_size_req( nil_phone, NET_NIL_PACKET_SPACE, device_id, packet_dimension )
 
 /** Registers new device or updates the MTU of an existing one.
Index: uspace/srv/net/messages.h
===================================================================
--- uspace/srv/net/messages.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/messages.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -459,17 +459,27 @@
 }
 
-/** Returns the device packet dimensions for sending.
- *  @param[in] phone The service module phone.
- *  @param[in] message The service specific message.
- *  @param[in] device_id The device identifier.
- *  @param[out] addr_len The minimum reserved address length.
- *  @param[out] prefix The minimum reserved prefix size.
- *  @param[out] content The maximum content size.
- *  @param[out] suffix The minimum reserved suffix size.
- *  @returns EOK on success.
+/** Returns the device packet dimension for sending.
+ *  @param[in] phone The service module phone.
+ *  @param[in] message The service specific message.
+ *  @param[in] device_id The device identifier.
+ *  @param[out] packet_dimension The packet dimension.
+ *  @returns EOK on success.
+ *  @returns EBADMEM if the packet_dimension parameter is NULL.
  *  @returns Other error codes as defined for the specific service message.
  */
-static inline int	generic_packet_size_req( int phone, int message, device_id_t device_id, size_t * addr_len, size_t * prefix, size_t * content, size_t * suffix ){
-	return ( int ) async_req_1_4( phone, ( ipcarg_t ) message, ( ipcarg_t ) device_id, ( ipcarg_t * ) addr_len, ( ipcarg_t * ) prefix, ( ipcarg_t * ) content, ( ipcarg_t * ) suffix );
+static inline int	generic_packet_size_req( int phone, int message, device_id_t device_id, packet_dimension_ref packet_dimension ){
+	ipcarg_t	result;
+	ipcarg_t	prefix;
+	ipcarg_t	content;
+	ipcarg_t	suffix;
+	ipcarg_t	addr_len;
+
+	if( ! packet_dimension ) return EBADMEM;
+	result = async_req_1_4( phone, ( ipcarg_t ) message, ( ipcarg_t ) device_id, & addr_len, & prefix, & content, & suffix );
+	packet_dimension->prefix = ( size_t ) prefix;
+	packet_dimension->content = ( size_t ) content;
+	packet_dimension->suffix = ( size_t ) suffix;
+	packet_dimension->addr_len = ( size_t ) addr_len;
+	return ( int ) result;
 }
 
Index: uspace/srv/net/structures/packet/packet.h
===================================================================
--- uspace/srv/net/structures/packet/packet.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/structures/packet/packet.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -52,4 +52,31 @@
  */
 typedef packet_t *		packet_ref;
+
+/** Type definition of the packet dimension.
+ *  @see packet_dimension
+ */
+typedef struct packet_dimension	packet_dimension_t;
+
+/** Type definition of the packet dimension pointer.
+ *  @see packet_dimension
+ */
+typedef packet_dimension_t *	packet_dimension_ref;
+
+/** Packet dimension.
+ */
+struct packet_dimension{
+	/** Reserved packet prefix length.
+	 */
+	size_t			prefix;
+	/** Maximal packet content length.
+	 */
+	size_t			content;
+	/** Reserved packet suffix length.
+	 */
+	size_t			suffix;
+	/** Maximal packet address length.
+	 */
+	size_t			addr_len;
+};
 
 /** @name Packet management system interface
Index: uspace/srv/net/tl/icmp/icmp.c
===================================================================
--- uspace/srv/net/tl/icmp/icmp.c	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/tl/icmp/icmp.c	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -287,6 +287,6 @@
 	length = ( size_t ) addrlen;
 	// TODO do not ask all the time
-	ERROR_PROPAGATE( ip_packet_size_req( icmp_globals.ip_phone, -1, & icmp_globals.addr_len, & icmp_globals.prefix, & icmp_globals.content, & icmp_globals.suffix ));
-	packet = packet_get_4( icmp_globals.net_phone, size, icmp_globals.addr_len, ICMP_HEADER_SIZE + icmp_globals.prefix, icmp_globals.suffix );
+	ERROR_PROPAGATE( ip_packet_size_req( icmp_globals.ip_phone, -1, & icmp_globals.packet_dimension ));
+	packet = packet_get_4( icmp_globals.net_phone, size, icmp_globals.packet_dimension.addr_len, ICMP_HEADER_SIZE + icmp_globals.packet_dimension.prefix, icmp_globals.packet_dimension.suffix );
 	if( ! packet ) return ENOMEM;
 
@@ -477,7 +477,7 @@
 		return icmp_globals.ip_phone;
 	}
-	ERROR_PROPAGATE( ip_packet_size_req( icmp_globals.ip_phone, -1, & icmp_globals.addr_len, & icmp_globals.prefix, & icmp_globals.content, & icmp_globals.suffix ));
-	icmp_globals.prefix += ICMP_HEADER_SIZE;
-	icmp_globals.content -= ICMP_HEADER_SIZE;
+	ERROR_PROPAGATE( ip_packet_size_req( icmp_globals.ip_phone, -1, & icmp_globals.packet_dimension ));
+	icmp_globals.packet_dimension.prefix += ICMP_HEADER_SIZE;
+	icmp_globals.packet_dimension.content -= ICMP_HEADER_SIZE;
 	// get configuration
 	icmp_globals.error_reporting = NET_DEFAULT_ICMP_ERROR_REPORTING;
Index: uspace/srv/net/tl/icmp/icmp.h
===================================================================
--- uspace/srv/net/tl/icmp/icmp.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/tl/icmp/icmp.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -94,16 +94,7 @@
 	 */
 	int				ip_phone;
-	/** Reserved packet prefix length.
+	/** Packet dimension.
 	 */
-	size_t			prefix;
-	/** Maximal packet content length.
-	 */
-	size_t			content;
-	/** Reserved packet suffix length.
-	 */
-	size_t			suffix;
-	/** Packet address length.
-	 */
-	size_t			addr_len;
+	packet_dimension_t	packet_dimension;
 	/** Networking module phone.
 	 */
Index: uspace/srv/net/tl/tl_common.c
===================================================================
--- uspace/srv/net/tl/tl_common.c	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/tl/tl_common.c	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -89,5 +89,5 @@
 		* packet_dimension = malloc( sizeof( ** packet_dimension ));
 		if( ! * packet_dimension ) return ENOMEM;
-		if( ERROR_OCCURRED( ip_packet_size_req( ip_phone, device_id, & ( ** packet_dimension ).addr_len, & ( ** packet_dimension ).prefix, & ( ** packet_dimension ).content, & ( ** packet_dimension ).suffix ))){
+		if( ERROR_OCCURRED( ip_packet_size_req( ip_phone, device_id, * packet_dimension ))){
 			free( * packet_dimension );
 			return ERROR_CODE;
Index: uspace/srv/net/tl/tl_common.h
===================================================================
--- uspace/srv/net/tl/tl_common.h	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/tl/tl_common.h	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -43,31 +43,4 @@
 #include "../include/inet.h"
 #include "../include/socket_codes.h"
-
-/** Type definition of the packet dimension.
- *  @see packet_dimension
- */
-typedef struct packet_dimension	packet_dimension_t;
-
-/** Type definition of the packet dimension pointer.
- *  @see packet_dimension
- */
-typedef packet_dimension_t *	packet_dimension_ref;
-
-/** Packet dimension.
- */
-struct packet_dimension{
-	/** Reserved packet prefix length.
-	 */
-	size_t			prefix;
-	/** Maximal packet content length.
-	 */
-	size_t			content;
-	/** Reserved packet suffix length.
-	 */
-	size_t			suffix;
-	/** Maximal packet address length.
-	 */
-	size_t			addr_len;
-};
 
 /** Device packet dimensions.
Index: uspace/srv/net/tl/udp/udp.c
===================================================================
--- uspace/srv/net/tl/udp/udp.c	(revision 536ded4276f4a078cf8bcc9ebea3cfb0c70ce203)
+++ uspace/srv/net/tl/udp/udp.c	(revision 91478aae14d21fad32ae117b2ac0b0fd52f11394)
@@ -205,5 +205,5 @@
 	}
 	// read default packet dimensions
-	ERROR_PROPAGATE( ip_packet_size_req( udp_globals.ip_phone, -1, & udp_globals.packet_dimension.addr_len, & udp_globals.packet_dimension.prefix, & udp_globals.packet_dimension.content, & udp_globals.packet_dimension.suffix ));
+	ERROR_PROPAGATE( ip_packet_size_req( udp_globals.ip_phone, -1, & udp_globals.packet_dimension ));
 	ERROR_PROPAGATE( socket_ports_initialize( & udp_globals.sockets ));
 	if( ERROR_OCCURRED( packet_dimensions_initialize( & udp_globals.dimensions ))){
@@ -579,5 +579,5 @@
 //	}else{
 		// do not ask all the time
-		ERROR_PROPAGATE( ip_packet_size_req( udp_globals.ip_phone, -1, & udp_globals.packet_dimension.addr_len, & udp_globals.packet_dimension.prefix, & udp_globals.packet_dimension.content, & udp_globals.packet_dimension.suffix ));
+		ERROR_PROPAGATE( ip_packet_size_req( udp_globals.ip_phone, -1, & udp_globals.packet_dimension ));
 		packet_dimension = & udp_globals.packet_dimension;
 //	}
