xref: /minix3/minix/lib/liblwip/dist/src/include/lwip/icmp.h (revision 5d5fbe79c1b60734f34c69330aec5496644e8651)
1*5d5fbe79SDavid van Moolenbroek /**
2*5d5fbe79SDavid van Moolenbroek  * @file
3*5d5fbe79SDavid van Moolenbroek  * ICMP API
4*5d5fbe79SDavid van Moolenbroek  */
5*5d5fbe79SDavid van Moolenbroek 
6*5d5fbe79SDavid van Moolenbroek /*
7*5d5fbe79SDavid van Moolenbroek  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
8*5d5fbe79SDavid van Moolenbroek  * All rights reserved.
9*5d5fbe79SDavid van Moolenbroek  *
10*5d5fbe79SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without modification,
11*5d5fbe79SDavid van Moolenbroek  * are permitted provided that the following conditions are met:
12*5d5fbe79SDavid van Moolenbroek  *
13*5d5fbe79SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright notice,
14*5d5fbe79SDavid van Moolenbroek  *    this list of conditions and the following disclaimer.
15*5d5fbe79SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright notice,
16*5d5fbe79SDavid van Moolenbroek  *    this list of conditions and the following disclaimer in the documentation
17*5d5fbe79SDavid van Moolenbroek  *    and/or other materials provided with the distribution.
18*5d5fbe79SDavid van Moolenbroek  * 3. The name of the author may not be used to endorse or promote products
19*5d5fbe79SDavid van Moolenbroek  *    derived from this software without specific prior written permission.
20*5d5fbe79SDavid van Moolenbroek  *
21*5d5fbe79SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22*5d5fbe79SDavid van Moolenbroek  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23*5d5fbe79SDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24*5d5fbe79SDavid van Moolenbroek  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25*5d5fbe79SDavid van Moolenbroek  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26*5d5fbe79SDavid van Moolenbroek  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27*5d5fbe79SDavid van Moolenbroek  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28*5d5fbe79SDavid van Moolenbroek  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29*5d5fbe79SDavid van Moolenbroek  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30*5d5fbe79SDavid van Moolenbroek  * OF SUCH DAMAGE.
31*5d5fbe79SDavid van Moolenbroek  *
32*5d5fbe79SDavid van Moolenbroek  * This file is part of the lwIP TCP/IP stack.
33*5d5fbe79SDavid van Moolenbroek  *
34*5d5fbe79SDavid van Moolenbroek  * Author: Adam Dunkels <adam@sics.se>
35*5d5fbe79SDavid van Moolenbroek  *
36*5d5fbe79SDavid van Moolenbroek  */
37*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_HDR_ICMP_H
38*5d5fbe79SDavid van Moolenbroek #define LWIP_HDR_ICMP_H
39*5d5fbe79SDavid van Moolenbroek 
40*5d5fbe79SDavid van Moolenbroek #include "lwip/opt.h"
41*5d5fbe79SDavid van Moolenbroek #include "lwip/pbuf.h"
42*5d5fbe79SDavid van Moolenbroek #include "lwip/ip_addr.h"
43*5d5fbe79SDavid van Moolenbroek #include "lwip/netif.h"
44*5d5fbe79SDavid van Moolenbroek #include "lwip/prot/icmp.h"
45*5d5fbe79SDavid van Moolenbroek 
46*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV6 && LWIP_ICMP6
47*5d5fbe79SDavid van Moolenbroek #include "lwip/icmp6.h"
48*5d5fbe79SDavid van Moolenbroek #endif
49*5d5fbe79SDavid van Moolenbroek 
50*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus
51*5d5fbe79SDavid van Moolenbroek extern "C" {
52*5d5fbe79SDavid van Moolenbroek #endif
53*5d5fbe79SDavid van Moolenbroek 
54*5d5fbe79SDavid van Moolenbroek /** ICMP destination unreachable codes */
55*5d5fbe79SDavid van Moolenbroek enum icmp_dur_type {
56*5d5fbe79SDavid van Moolenbroek   /** net unreachable */
57*5d5fbe79SDavid van Moolenbroek   ICMP_DUR_NET   = 0,
58*5d5fbe79SDavid van Moolenbroek   /** host unreachable */
59*5d5fbe79SDavid van Moolenbroek   ICMP_DUR_HOST  = 1,
60*5d5fbe79SDavid van Moolenbroek   /** protocol unreachable */
61*5d5fbe79SDavid van Moolenbroek   ICMP_DUR_PROTO = 2,
62*5d5fbe79SDavid van Moolenbroek   /** port unreachable */
63*5d5fbe79SDavid van Moolenbroek   ICMP_DUR_PORT  = 3,
64*5d5fbe79SDavid van Moolenbroek   /** fragmentation needed and DF set */
65*5d5fbe79SDavid van Moolenbroek   ICMP_DUR_FRAG  = 4,
66*5d5fbe79SDavid van Moolenbroek   /** source route failed */
67*5d5fbe79SDavid van Moolenbroek   ICMP_DUR_SR    = 5
68*5d5fbe79SDavid van Moolenbroek };
69*5d5fbe79SDavid van Moolenbroek 
70*5d5fbe79SDavid van Moolenbroek /** ICMP time exceeded codes */
71*5d5fbe79SDavid van Moolenbroek enum icmp_te_type {
72*5d5fbe79SDavid van Moolenbroek   /** time to live exceeded in transit */
73*5d5fbe79SDavid van Moolenbroek   ICMP_TE_TTL  = 0,
74*5d5fbe79SDavid van Moolenbroek   /** fragment reassembly time exceeded */
75*5d5fbe79SDavid van Moolenbroek   ICMP_TE_FRAG = 1
76*5d5fbe79SDavid van Moolenbroek };
77*5d5fbe79SDavid van Moolenbroek 
78*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV4 && LWIP_ICMP /* don't build if not configured for use in lwipopts.h */
79*5d5fbe79SDavid van Moolenbroek 
80*5d5fbe79SDavid van Moolenbroek void icmp_input(struct pbuf *p, struct netif *inp);
81*5d5fbe79SDavid van Moolenbroek void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t);
82*5d5fbe79SDavid van Moolenbroek void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t);
83*5d5fbe79SDavid van Moolenbroek 
84*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_IPV4 && LWIP_ICMP */
85*5d5fbe79SDavid van Moolenbroek 
86*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV4 && LWIP_IPV6
87*5d5fbe79SDavid van Moolenbroek #if LWIP_ICMP && LWIP_ICMP6
88*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf) ((isipv6) ? \
89*5d5fbe79SDavid van Moolenbroek                                          icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) : \
90*5d5fbe79SDavid van Moolenbroek                                          icmp_dest_unreach(pbuf, ICMP_DUR_PORT))
91*5d5fbe79SDavid van Moolenbroek #elif LWIP_ICMP
92*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf) do{ if(!(isipv6)) { icmp_dest_unreach(pbuf, ICMP_DUR_PORT);}}while(0)
93*5d5fbe79SDavid van Moolenbroek #elif LWIP_ICMP6
94*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf) do{ if(isipv6) { icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT);}}while(0)
95*5d5fbe79SDavid van Moolenbroek #else
96*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf)
97*5d5fbe79SDavid van Moolenbroek #endif
98*5d5fbe79SDavid van Moolenbroek #elif LWIP_IPV6 && LWIP_ICMP6
99*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf) icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT)
100*5d5fbe79SDavid van Moolenbroek #elif LWIP_IPV4 && LWIP_ICMP
101*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf) icmp_dest_unreach(pbuf, ICMP_DUR_PORT)
102*5d5fbe79SDavid van Moolenbroek #else /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) */
103*5d5fbe79SDavid van Moolenbroek #define icmp_port_unreach(isipv6, pbuf)
104*5d5fbe79SDavid van Moolenbroek #endif /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) LWIP_IPV4*/
105*5d5fbe79SDavid van Moolenbroek 
106*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus
107*5d5fbe79SDavid van Moolenbroek }
108*5d5fbe79SDavid van Moolenbroek #endif
109*5d5fbe79SDavid van Moolenbroek 
110*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_HDR_ICMP_H */
111