source: mainline/uspace/lib/c/include/ipc/icmp.h@ da9f13f3

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since da9f13f3 was 753bca3, checked in by Jakub Jermar <jakub@…>, 15 years ago

Move ICMP client stuff from libsocket to standard library.

  • Property mode set to 100644
File size: 4.1 KB
Line 
1/*
2 * Copyright (c) 2009 Lukas Mejdrech
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libc
30 * @{
31 */
32
33/** @file
34 * ICMP module messages.
35 * @see icmp_interface.h
36 */
37
38#ifndef LIBC_ICMP_MESSAGES_
39#define LIBC_ICMP_MESSAGES_
40
41#include <ipc/ipc.h>
42#include <ipc/net.h>
43#include <sys/types.h>
44#include <sys/time.h>
45
46#include <net/icmp_codes.h>
47
48/** ICMP module messages. */
49typedef enum {
50 /** Sends echo request. @see icmp_echo() */
51 NET_ICMP_ECHO = NET_ICMP_FIRST,
52
53 /**
54 * Sends destination unreachable error message.
55 * @see icmp_destination_unreachable_msg()
56 */
57 NET_ICMP_DEST_UNREACH,
58
59 /**
60 * Sends source quench error message.
61 * @see icmp_source_quench_msg()
62 */
63 NET_ICMP_SOURCE_QUENCH,
64
65 /**
66 * Sends time exceeded error message.
67 * @see icmp_time_exceeded_msg()
68 */
69 NET_ICMP_TIME_EXCEEDED,
70
71 /**
72 * Sends parameter problem error message.
73 * @see icmp_parameter_problem_msg()
74 */
75 NET_ICMP_PARAMETERPROB,
76
77 /** Initializes new connection. */
78 NET_ICMP_INIT
79} icmp_messages;
80
81/** @name ICMP specific message parameters definitions */
82/*@{*/
83
84/** Returns the ICMP code message parameter.
85 *
86 * @param[in] call The message call structure.
87 */
88#define ICMP_GET_CODE(call) \
89 ({ \
90 icmp_code_t code = (icmp_code_t) IPC_GET_ARG1(*call); \
91 code; \
92 })
93
94/** Returns the ICMP link MTU message parameter.
95 *
96 * @param[in] call The message call structure.
97 */
98#define ICMP_GET_MTU(call) \
99 ({ \
100 icmp_param_t mtu = (icmp_param_t) IPC_GET_ARG3(*call); \
101 mtu; \
102 })
103
104/** Returns the pointer message parameter.
105 *
106 * @param[in] call The message call structure.
107 */
108#define ICMP_GET_POINTER(call) \
109 ({ \
110 icmp_param_t pointer = (icmp_param_t) IPC_GET_ARG3(*call); \
111 pointer; \
112 })
113
114/** Returns the size message parameter.
115 *
116 * @param[in] call The message call structure.
117 */
118#define ICMP_GET_SIZE(call) \
119 ({ \
120 size_t size = (size_t) IPC_GET_ARG1(call); \
121 size; \
122 })
123
124/** Returns the timeout message parameter.
125 *
126 * @param[in] call The message call structure.
127 */
128#define ICMP_GET_TIMEOUT(call) \
129 ({ \
130 suseconds_t timeout = (suseconds_t) IPC_GET_ARG2(call); \
131 timeout; \
132 })
133
134/** Returns the time to live message parameter.
135 *
136 * @param[in] call The message call structure.
137 */
138#define ICMP_GET_TTL(call) \
139 ({ \
140 ip_ttl_t ttl = (ip_ttl_t) IPC_GET_ARG3(call); \
141 ttl; \
142 })
143
144/** Returns the type of service message parameter.
145 *
146 * @param[in] call The message call structure.
147 */
148#define ICMP_GET_TOS(call) \
149 ({ \
150 ip_tos_t tos = (ip_tos_t) IPC_GET_ARG4(call); \
151 tos; \
152 })
153
154/** Returns the dont fragment message parameter.
155 *
156 * @param[in] call The message call structure.
157 */
158#define ICMP_GET_DONT_FRAGMENT(call) \
159 ({ \
160 int dont_fragment = (int) IPC_GET_ARG5(call); \
161 dont_fragment; \
162 })
163
164/*@}*/
165
166#endif
167
168/** @}
169 */
Note: See TracBrowser for help on using the repository browser.