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 ); |
} |