Changeset a26b9e3 in mainline
- Timestamp:
- 2010-10-23T17:43:33Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8c780dc
- Parents:
- 626182d
- Location:
- uspace/lib/net
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/include/icmp_header.h
r626182d ra26b9e3 27 27 */ 28 28 29 /** @addtogroup icmp29 /** @addtogroup libnet 30 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * 35 * Based on the RFC~792.34 * ICMP header definition. 35 * Based on the RFC 792. 36 36 */ 37 37 38 #ifndef __NET_ICMP_HEADER_H__39 #define __NET_ICMP_HEADER_H__38 #ifndef LIBNET_ICMP_HEADER_H_ 39 #define LIBNET_ICMP_HEADER_H_ 40 40 41 41 #include <sys/types.h> … … 44 44 #include <net/icmp_codes.h> 45 45 46 /** ICMP header size in bytes. 47 */ 48 #define ICMP_HEADER_SIZE sizeof(icmp_header_t) 46 /** ICMP header size in bytes. */ 47 #define ICMP_HEADER_SIZE sizeof(icmp_header_t) 49 48 50 49 /** Type definition of the echo specific data. 51 * 50 * @see icmp_echo 52 51 */ 53 typedef struct icmp_echo 52 typedef struct icmp_echo icmp_echo_t; 54 53 55 54 /** Type definition of the echo specific data pointer. 56 * 55 * @see icmp_echo 57 56 */ 58 typedef icmp_echo_t * 57 typedef icmp_echo_t *icmp_echo_ref; 59 58 60 /** Echo specific data. 61 */ 62 struct icmp_echo{ 63 /** Message idintifier. 64 */ 59 /** Echo specific data. */ 60 struct icmp_echo { 61 /** Message idintifier. */ 65 62 icmp_param_t identifier; 66 /** Message sequence number. 67 */ 63 /** Message sequence number. */ 68 64 icmp_param_t sequence_number; 69 65 } __attribute__ ((packed)); 70 66 71 67 /** Type definition of the internet control message header. 72 * 68 * @see icmp_header 73 69 */ 74 typedef struct icmp_header 70 typedef struct icmp_header icmp_header_t; 75 71 76 72 /** Type definition of the internet control message header pointer. 77 * 73 * @see icmp_header 78 74 */ 79 typedef icmp_header_t * 75 typedef icmp_header_t *icmp_header_ref; 80 76 81 /** Internet control message header. 82 */ 83 struct icmp_header{ 84 /** The type of the message. 85 */ 77 /** Internet control message header. */ 78 struct icmp_header { 79 /** The type of the message. */ 86 80 uint8_t type; 87 /** The error code for the datagram reported by the ICMP message. 88 * The interpretation is dependent on the message type. 81 82 /** 83 * The error code for the datagram reported by the ICMP message. 84 * The interpretation is dependent on the message type. 89 85 */ 90 86 uint8_t code; 91 /** The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message starting with the ICMP Type. 92 * For computing the checksum, the checksum field should be zero. 93 * If the checksum does not match the contents, the datagram is discarded. 87 88 /** 89 * The checksum is the 16-bit ones's complement of the one's complement 90 * sum of the ICMP message starting with the ICMP Type. For computing 91 * the checksum, the checksum field should be zero. If the checksum does 92 * not match the contents, the datagram is discarded. 94 93 */ 95 94 uint16_t checksum; 96 /** Message specific data. 97 */ 98 union{ 99 /** Echo specific data. 100 */ 95 96 /** Message specific data. */ 97 union { 98 /** Echo specific data. */ 101 99 icmp_echo_t echo; 102 /** Proposed gateway value. 103 */ 100 /** Proposed gateway value. */ 104 101 in_addr_t gateway; 105 /** Fragmentation needed specific data. 106 */ 107 struct{ 108 /** Reserved field. 109 * Must be zero. 110 */ 102 103 /** Fragmentation needed specific data. */ 104 struct { 105 /** Reserved field. Must be zero. */ 111 106 icmp_param_t reserved; 112 /** Proposed MTU. 113 */ 107 /** Proposed MTU. */ 114 108 icmp_param_t mtu; 115 109 } frag; 116 /** Parameter problem specific data. 117 */ 118 struct{ 119 /** Problem pointer. 120 */ 110 111 /** Parameter problem specific data. */ 112 struct { 113 /** Problem pointer. */ 121 114 icmp_param_t pointer; 122 /** Reserved field. 123 * Must be zero. 124 */ 115 /** Reserved field. Must be zero. */ 125 116 icmp_param_t reserved; 126 117 } param; -
uspace/lib/net/include/icmp_interface.h
r626182d ra26b9e3 27 27 */ 28 28 29 /** @addtogroup icmp29 /** @addtogroup libnet 30 30 * @{ 31 31 */ 32 32 33 #ifndef __NET_ICMP_INTERFACE_H__34 #define __NET_ICMP_INTERFACE_H__33 #ifndef LIBNET_ICMP_INTERFACE_H_ 34 #define LIBNET_ICMP_INTERFACE_H_ 35 35 36 36 #include <net/socket_codes.h> … … 46 46 47 47 /** @name ICMP module interface 48 * 48 * This interface is used by other modules. 49 49 */ 50 50 /*@{*/ 51 51 52 /** Sends the Destination Unreachable error notification packet. 53 * Beginning of the packet is sent as the notification packet data. 54 * The source and the destination addresses should be set in the original packet. 55 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 56 * @param[in] code The error specific code. 57 * @param[in] mtu The error MTU value. 58 * @param[in] packet The original packet. 59 * @returns EOK on success. 60 * @returns EPERM if the ICMP error notifications are disabled. 61 * @returns ENOMEM if there is not enough memory left. 62 */ 63 extern int icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, icmp_param_t mtu, packet_t packet); 64 65 /** Sends the Source Quench error notification packet. 66 * Beginning of the packet is sent as the notification packet data. 67 * The source and the destination addresses should be set in the original packet. 68 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 69 * @param[in] packet The original packet. 70 * @returns EOK on success. 71 * @returns EPERM if the ICMP error notifications are disabled. 72 * @returns ENOMEM if there is not enough memory left. 73 */ 74 extern int icmp_source_quench_msg(int icmp_phone, packet_t packet); 75 76 /** Sends the Time Exceeded error notification packet. 77 * Beginning of the packet is sent as the notification packet data. 78 * The source and the destination addresses should be set in the original packet. 79 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 80 * @param[in] code The error specific code. 81 * @param[in] packet The original packet. 82 * @returns EOK on success. 83 * @returns EPERM if the ICMP error notifications are disabled. 84 * @returns ENOMEM if there is not enough memory left. 85 */ 86 extern int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t packet); 87 88 /** Sends the Parameter Problem error notification packet. 89 * Beginning of the packet is sent as the notification packet data. 90 * The source and the destination addresses should be set in the original packet. 91 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 92 * @param[in] code The error specific code. 93 * @param[in] pointer The problematic parameter offset. 94 * @param[in] packet The original packet. 95 * @returns EOK on success. 96 * @returns EPERM if the ICMP error notifications are disabled. 97 * @returns ENOMEM if there is not enough memory left. 98 */ 99 extern int icmp_parameter_problem_msg(int icmp_phone, icmp_code_t code, icmp_param_t pointer, packet_t packet); 52 extern int icmp_destination_unreachable_msg(int, icmp_code_t, icmp_param_t, 53 packet_t); 54 extern int icmp_source_quench_msg(int, packet_t); 55 extern int icmp_time_exceeded_msg(int, icmp_code_t, packet_t); 56 extern int icmp_parameter_problem_msg(int, icmp_code_t, icmp_param_t, packet_t); 100 57 101 58 /*@}*/ -
uspace/lib/net/tl/icmp_remote.c
r626182d ra26b9e3 27 27 */ 28 28 29 /** @addtogroup icmp29 /** @addtogroup libnet 30 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * 35 * 34 * ICMP interface implementation for remote modules. 35 * @see icmp_interface.h 36 36 */ 37 38 #include <icmp_interface.h> 39 #include <net/modules.h> 40 #include <packet_client.h> 37 41 38 42 #include <async.h> … … 43 47 #include <sys/types.h> 44 48 45 #include <net/modules.h> 46 #include <icmp_interface.h> 47 #include <packet_client.h> 48 49 int icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, icmp_param_t mtu, packet_t packet){ 50 async_msg_3(icmp_phone, NET_ICMP_DEST_UNREACH, (ipcarg_t) code, (ipcarg_t) packet_get_id(packet), (ipcarg_t) mtu); 49 /** Sends the Destination Unreachable error notification packet. 50 * 51 * Beginning of the packet is sent as the notification packet data. 52 * The source and the destination addresses should be set in the original 53 * packet. 54 * 55 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 56 * @param[in] code The error specific code. 57 * @param[in] mtu The error MTU value. 58 * @param[in] packet The original packet. 59 * @returns EOK on success. 60 * @returns EPERM if the ICMP error notifications are disabled. 61 * @returns ENOMEM if there is not enough memory left. 62 */ 63 int 64 icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, 65 icmp_param_t mtu, packet_t packet) 66 { 67 async_msg_3(icmp_phone, NET_ICMP_DEST_UNREACH, (ipcarg_t) code, 68 (ipcarg_t) packet_get_id(packet), (ipcarg_t) mtu); 51 69 return EOK; 52 70 } 53 71 54 int icmp_source_quench_msg(int icmp_phone, packet_t packet){ 55 async_msg_2(icmp_phone, NET_ICMP_SOURCE_QUENCH, 0, (ipcarg_t) packet_get_id(packet)); 72 /** Sends the Source Quench error notification packet. 73 * 74 * Beginning of the packet is sent as the notification packet data. 75 * The source and the destination addresses should be set in the original 76 * packet. 77 * 78 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 79 * @param[in] packet The original packet. 80 * @returns EOK on success. 81 * @returns EPERM if the ICMP error notifications are disabled. 82 * @returns ENOMEM if there is not enough memory left. 83 */ 84 int icmp_source_quench_msg(int icmp_phone, packet_t packet) 85 { 86 async_msg_2(icmp_phone, NET_ICMP_SOURCE_QUENCH, 0, 87 (ipcarg_t) packet_get_id(packet)); 56 88 return EOK; 57 89 } 58 90 59 int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t packet){ 60 async_msg_2(icmp_phone, NET_ICMP_TIME_EXCEEDED, (ipcarg_t) code, (ipcarg_t) packet_get_id(packet)); 91 /** Sends the Time Exceeded error notification packet. 92 * 93 * Beginning of the packet is sent as the notification packet data. 94 * The source and the destination addresses should be set in the original 95 * packet. 96 * 97 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 98 * @param[in] code The error specific code. 99 * @param[in] packet The original packet. 100 * @returns EOK on success. 101 * @returns EPERM if the ICMP error notifications are disabled. 102 * @returns ENOMEM if there is not enough memory left. 103 */ 104 int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t packet) 105 { 106 async_msg_2(icmp_phone, NET_ICMP_TIME_EXCEEDED, (ipcarg_t) code, 107 (ipcarg_t) packet_get_id(packet)); 61 108 return EOK; 62 109 } 63 110 64 int icmp_parameter_problem_msg(int icmp_phone, icmp_code_t code, icmp_param_t pointer, packet_t packet){ 65 async_msg_3(icmp_phone, NET_ICMP_PARAMETERPROB, (ipcarg_t) code, (ipcarg_t) packet_get_id(packet), (ipcarg_t) pointer); 111 /** Sends the Parameter Problem error notification packet. 112 * 113 * Beginning of the packet is sent as the notification packet data. 114 * The source and the destination addresses should be set in the original 115 * packet. 116 * 117 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 118 * @param[in] code The error specific code. 119 * @param[in] pointer The problematic parameter offset. 120 * @param[in] packet The original packet. 121 * @returns EOK on success. 122 * @returns EPERM if the ICMP error notifications are disabled. 123 * @returns ENOMEM if there is not enough memory left. 124 */ 125 int icmp_parameter_problem_msg(int icmp_phone, icmp_code_t code, 126 icmp_param_t pointer, packet_t packet) 127 { 128 async_msg_3(icmp_phone, NET_ICMP_PARAMETERPROB, (ipcarg_t) code, 129 (ipcarg_t) packet_get_id(packet), (ipcarg_t) pointer); 66 130 return EOK; 67 131 } … … 69 133 /** @} 70 134 */ 135
Note:
See TracChangeset
for help on using the changeset viewer.