Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4755 → Rev 4756

/branches/network/uspace/srv/net/messages.h
31,7 → 31,7
*/
 
/** @file
* \todo
* Networking common message definitions.
*/
 
#ifndef __NET_MESSAGES_H__
47,107 → 47,349
#include "structures/measured_strings.h"
#include "structures/packet/packet.h"
 
/** @name Networking message counts
*/
/*@{*/
 
/** The number of network interface driver messages.
*/
#define NET_NETIF_COUNT 6
 
/** The number of general networking messages.
*/
#define NET_NET_COUNT 3
 
/** The number of network interface layer messages.
*/
#define NET_NIL_COUNT 7
 
/** The number of Ethernet messages.
*/
#define NET_ETH_COUNT 0
 
/** The number of inter-network messages.
*/
#define NET_IL_COUNT 6
 
/** The number of IP messages.
*/
#define NET_IP_COUNT 4
 
/** The number of ARP messages.
*/
#define NET_ARP_COUNT 5
 
/** The number of ICMP messages.
*/
#define NET_ICMP_COUNT 6
 
/** The number of transport layer messages.
*/
#define NET_TL_COUNT 1
 
/** The number of UDP messages.
*/
#define NET_UDP_COUNT 0
 
/** The number of TCP messages.
*/
#define NET_TCP_COUNT 0
 
/** The number of packet management system messages.
*/
#define NET_PACKET_COUNT 5
 
/** The number of socket messages.
*/
#define NET_SOCKET_COUNT 14
 
/*@}*/
 
/** @name Networking message intervals
*/
/*@{*/
 
/** The first networking message.
*/
#define NET_FIRST 2000
 
/** The first network interface layer message.
*/
#define NET_NETIF_FIRST NET_FIRST
 
/** The last network interface layer message.
*/
#define NET_NETIF_LAST ( NET_NETIF_FIRST + NET_NETIF_COUNT )
 
/** The first general networking message.
*/
#define NET_NET_FIRST ( NET_NETIF_LAST + 0 )
 
/** The last general networking message.
*/
#define NET_NET_LAST ( NET_NET_FIRST + NET_NET_COUNT )
 
/** The first network interface layer message.
*/
#define NET_NIL_FIRST ( NET_NET_LAST + 0 )
 
/** The last network interface layer message.
*/
#define NET_NIL_LAST ( NET_NIL_FIRST + NET_NIL_COUNT )
 
/** The first Ethernet message.
*/
#define NET_ETH_FIRST ( NET_NIL_LAST + 0 )
 
/** The last Ethernet message.
*/
#define NET_ETH_LAST ( NET_ETH_FIRST + NET_ETH_COUNT )
 
/** The first inter-network message.
*/
#define NET_IL_FIRST ( NET_ETH_LAST + 0 )
 
/** The last inter-network message.
*/
#define NET_IL_LAST ( NET_IL_FIRST + NET_IL_COUNT )
 
/** The first IP message.
*/
#define NET_IP_FIRST ( NET_IL_LAST + 0 )
 
/** The last IP message.
*/
#define NET_IP_LAST ( NET_IP_FIRST + NET_IP_COUNT )
 
/** The first ARP message.
*/
#define NET_ARP_FIRST ( NET_IP_LAST + 0 )
 
/** The last ARP message.
*/
#define NET_ARP_LAST ( NET_ARP_FIRST + NET_ARP_COUNT )
 
/** The first ICMP message.
*/
#define NET_ICMP_FIRST ( NET_ARP_LAST + 0 )
 
/** The last ICMP message.
*/
#define NET_ICMP_LAST ( NET_ICMP_FIRST + NET_ICMP_COUNT )
 
/** The first ICMP message.
*/
#define NET_TL_FIRST ( NET_ICMP_LAST + 0 )
 
/** The last ICMP message.
*/
#define NET_TL_LAST ( NET_TL_FIRST + NET_TL_COUNT )
 
/** The first UDP message.
*/
#define NET_UDP_FIRST ( NET_TL_LAST + 0 )
 
/** The last UDP message.
*/
#define NET_UDP_LAST ( NET_UDP_FIRST + NET_UDP_COUNT )
 
/** The first TCP message.
*/
#define NET_TCP_FIRST ( NET_UDP_LAST + 0 )
 
/** The last TCP message.
*/
#define NET_TCP_LAST ( NET_TCP_FIRST + NET_TCP_COUNT )
 
/** The first socket message.
*/
#define NET_SOCKET_FIRST ( NET_TCP_LAST + 0 )
 
/** The last socket message.
*/
#define NET_SOCKET_LAST ( NET_SOCKET_FIRST + NET_SOCKET_COUNT )
 
/** The first packet management system message.
*/
#define NET_PACKET_FIRST ( NET_SOCKET_LAST + 0 )
 
/** The last packet management system message.
*/
#define NET_PACKET_LAST ( NET_PACKET_FIRST + NET_PACKET_COUNT )
 
/** The last networking message.
*/
#define NET_LAST NET_PACKET_LAST
 
/** The number of networking messages.
*/
#define NET_COUNT ( NET_LAST - NET_FIRST )
 
/** Returns a value indicating whether the value is in the interval.
* @param[in] item The value to be checked.
* @param[in] first_inclusive The first value in the interval inclusive.
* @param[in] last_exclusive The first value after the interval.
*/
#define IS_IN_INTERVAL( item, first_inclusive, last_exclusive ) ((( item ) >= ( first_inclusive )) && (( item ) < ( last_exclusive )))
 
/** Returns a value indicating whether the IPC call is a generic networking message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_FIRST, NET_LAST )
 
/** Returns a value indicating whether the IPC call is a generic networking message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_NET_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_NET_FIRST, NET_NET_LAST )
 
/** Returns a value indicating whether the IPC call is a network interface layer message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_NIL_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_NIL_FIRST, NET_NIL_LAST )
 
/** Returns a value indicating whether the IPC call is an Ethernet message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_ETH_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_ETH_FIRST, NET_ETH_LAST )
 
/** Returns a value indicating whether the IPC call is an inter-network layer message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_IL_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_IL_FIRST, NET_IL_LAST )
 
/** Returns a value indicating whether the IPC call is an IP message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_IP_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_IP_FIRST, NET_IP_LAST )
 
/** Returns a value indicating whether the IPC call is an ARP message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_ARP_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_ARP_FIRST, NET_ARP_LAST )
 
/** Returns a value indicating whether the IPC call is an ICMP message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_ICMP_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_ICMP_FIRST, NET_ICMP_LAST )
 
/** Returns a value indicating whether the IPC call is a transport layer message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_TL_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_TL_FIRST, NET_TL_LAST )
 
/** Returns a value indicating whether the IPC call is a UDP message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_UDP_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_UDP_FIRST, NET_UDP_LAST )
 
/** Returns a value indicating whether the IPC call is a TCP message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_TCP_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_TCP_FIRST, NET_TCP_LAST )
 
/** Returns a value indicating whether the IPC call is a socket message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_SOCKET_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_SOCKET_FIRST, NET_SOCKET_LAST )
 
/** Returns a value indicating whether the IPC call is a packet manaagement system message.
* @param[in] call The IPC call to be checked.
*/
#define IS_NET_PACKET_MESSAGE( call ) IS_IN_INTERVAL( IPC_GET_METHOD( * call ), NET_PACKET_FIRST, NET_PACKET_LAST )
 
/*@}*/
 
/** @name Networking specific message parameters definitions
*/
/*@{*/
 
/** Returns the device identifier message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_DEVICE( call ) ( device_id_t ) IPC_GET_ARG1( * call )
 
/** Returns the packet identifier message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_PACKET( call ) ( packet_id_t ) IPC_GET_ARG2( * call )
 
/** Returns the count message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_COUNT( call ) ( size_t ) IPC_GET_ARG2( * call )
 
/** Returns the device state message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_STATE( call ) ( device_state_t ) IPC_GET_ARG2( * call )
 
/** Returns the maximum transmission unit message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_MTU( call ) ( size_t ) IPC_GET_ARG2( * call )
 
/** Returns the device driver service message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_SERVICE( call ) ( services_t ) IPC_GET_ARG3( * call )
 
/** Returns the target service message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_TARGET( call ) ( services_t ) IPC_GET_ARG3( * call )
 
/** Returns the sender service message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_SENDER( call ) ( services_t ) IPC_GET_ARG3( * call )
 
/** Returns the error service message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_ERROR( call ) ( services_t ) IPC_GET_ARG4( * call )
 
/** Returns the phone message parameter.
* @param[in] call The message call structure.
*/
#define IPC_GET_PHONE( call ) ( int ) IPC_GET_ARG5( * call )
 
/** Sets the device identifier in the message answer.
* @param[out] answer The message answer structure.
*/
#define IPC_SET_DEVICE( answer ) (( device_id_t * ) & IPC_GET_ARG1( * answer ))
 
/** Sets the minimum address length in the message answer.
* @param[out] answer The message answer structure.
*/
#define IPC_SET_ADDR( answer ) (( size_t * ) & IPC_GET_ARG1( * answer ))
 
/** Sets the minimum prefix size in the message answer.
* @param[out] answer The message answer structure.
*/
#define IPC_SET_PREFIX( answer ) (( size_t * ) & IPC_GET_ARG2( * answer ))
 
/** Sets the maximum content size in the message answer.
* @param[out] answer The message answer structure.
*/
#define IPC_SET_CONTENT( answer ) (( size_t * ) & IPC_GET_ARG3( * answer ))
 
/** Sets the minimum suffix size in the message answer.
* @param[out] answer The message answer structure.
*/
#define IPC_SET_SUFFIX( answer ) (( size_t * ) & IPC_GET_ARG4( * answer ))
 
/*@}*/
 
/** Returns the address.
* @param[in] phone The service module phone.
* @param[in] message The service specific message.
* @param[in] device_id The device identifier.
* @param[out] address The desired address.
* @param[out] data The address data container.
* @returns EOK on success.
* @returns EBADMEM if the address parameter and/or the data parameter is NULL.
* @returns Other error codes as defined for the specific service message.
*/
static inline int generic_get_addr_req( int phone, int message, device_id_t device_id, measured_string_ref * address, char ** data ){
aid_t message_id;
ipcarg_t result;
164,6 → 406,22
return ( int ) result;
}
 
/** Translates the given strings.
* Allocates and returns the needed memory block as the data parameter.
* @param[in] phone The service module phone.
* @param[in] message The service specific message.
* @param[in] device_id The device identifier.
* @param[in] service The module service.
* @param[in] configuration The key strings.
* @param[in] count The number of configuration keys.
* @param[out] translation The translated values.
* @param[out] data The translation data container.
* @returns EOK on success.
* @returns EINVAL if the configuration parameter is NULL.
* @returns EINVAL if the count parameter is zero (0).
* @returns EBADMEM if the translation or the data parameters are NULL.
* @returns Other error codes as defined for the specific service message.
*/
static inline int generic_translate_req( int phone, int message, device_id_t device_id, services_t service, measured_string_ref configuration, size_t count, measured_string_ref * translation, char ** data ){
aid_t message_id;
ipcarg_t result;
182,6 → 440,15
return ( int ) result;
}
 
/** Sends the packet queue.
* @param[in] phone The service module phone.
* @param[in] message The service specific message.
* @param[in] device_id The device identifier.
* @param[in] packet_id The packet or the packet queue identifier.
* @param[in] sender The sending module service.
* @param[in] error The error module service.
* @returns EOK on success.
*/
static inline int generic_send_msg( int phone, int message, device_id_t device_id, packet_id_t packet_id, services_t sender, services_t error ){
if( error ){
async_msg_4( phone, ( ipcarg_t ) message, ( ipcarg_t ) device_id, ( ipcarg_t ) packet_id, ( ipcarg_t ) sender, ( ipcarg_t ) error );
191,15 → 458,43
return EOK;
}
 
/** 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 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 );
}
 
/** Notifies the module about the device state change.
* @param[in] phone The service module phone.
* @param[in] message The service specific message.
* @param[in] device_id The device identifier.
* @param[in] state The new device state.
* @param[in] target The target module service.
* @returns EOK on success.
*/
static inline int generic_device_state_msg( int phone, int message, device_id_t device_id, int state, services_t target ){
async_msg_3( phone, ( ipcarg_t ) message, ( ipcarg_t ) device_id, ( ipcarg_t ) state, target );
return EOK;
}
 
/** Passes the packet queue to the module.
* @param[in] phone The service module phone.
* @param[in] message The service specific message.
* @param[in] device_id The device identifier.
* @param[in] packet_id The received packet or the received packet queue identifier.
* @param[in] target The target module service.
* @param[in] error The error module service.
* @returns EOK on success.
*/
static inline int generic_received_msg( int phone, int message, device_id_t device_id, packet_id_t packet_id, services_t target, services_t error ){
if( error ){
async_msg_4( phone, ( ipcarg_t ) message, ( ipcarg_t ) device_id, ( ipcarg_t ) packet_id, ( ipcarg_t ) target, ( ipcarg_t ) error );
209,6 → 504,15
return EOK;
}
 
/** Notifies a module about the device.
* @param[in] phone The service module phone.
* @param[in] message The service specific message.
* @param[in] device_id The device identifier.
* @param[in] arg2 The second argument of the message.
* @param[in] service The device module service.
* @returns EOK on success.
* @returns Other error codes as defined for the specific service message.
*/
static inline int generic_device_req( int phone, int message, device_id_t device_id, int arg2, services_t service ){
return ( int ) async_req_3_0( phone, ( ipcarg_t ) message, ( ipcarg_t ) device_id, ( ipcarg_t ) arg2, ( ipcarg_t ) service );
}