7 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
10 * Redistribution and use in source and binary forms, with or without modification,
11 * are permitted provided that the following conditions are met:
13 * 1. Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
32 * This file is part of the lwIP TCP/IP stack.
34 * Author: Adam Dunkels <adam@sics.se>
37 #ifndef LWIP_HDR_ICMP_H
38 #define LWIP_HDR_ICMP_H
41 #include "lwip/pbuf.h"
42 #include "lwip/ip_addr.h"
43 #include "lwip/netif.h"
44 #include "lwip/prot/icmp.h"
46 #if LWIP_IPV6 && LWIP_ICMP6
47 #include "lwip/icmp6.h"
54 /** ICMP destination unreachable codes */
56 /** net unreachable */
58 /** host unreachable */
60 /** protocol unreachable */
62 /** port unreachable */
64 /** fragmentation needed and DF set */
66 /** source route failed */
70 /** ICMP time exceeded codes */
72 /** time to live exceeded in transit */
74 /** fragment reassembly time exceeded */
78 #if LWIP_IPV4 && LWIP_ICMP /* don't build if not configured for use in lwipopts.h */
80 void icmp_input(struct pbuf
*p
, struct netif
*inp
);
81 void icmp_dest_unreach(struct pbuf
*p
, enum icmp_dur_type t
);
82 void icmp_time_exceeded(struct pbuf
*p
, enum icmp_te_type t
);
84 #endif /* LWIP_IPV4 && LWIP_ICMP */
86 #if LWIP_IPV4 && LWIP_IPV6
87 #if LWIP_ICMP && LWIP_ICMP6
88 #define icmp_port_unreach(isipv6, pbuf) ((isipv6) ? \
89 icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) : \
90 icmp_dest_unreach(pbuf, ICMP_DUR_PORT))
92 #define icmp_port_unreach(isipv6, pbuf) do{ if(!(isipv6)) { icmp_dest_unreach(pbuf, ICMP_DUR_PORT);}}while(0)
94 #define icmp_port_unreach(isipv6, pbuf) do{ if(isipv6) { icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT);}}while(0)
96 #define icmp_port_unreach(isipv6, pbuf)
98 #elif LWIP_IPV6 && LWIP_ICMP6
99 #define icmp_port_unreach(isipv6, pbuf) icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT)
100 #elif LWIP_IPV4 && LWIP_ICMP
101 #define icmp_port_unreach(isipv6, pbuf) icmp_dest_unreach(pbuf, ICMP_DUR_PORT)
102 #else /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) */
103 #define icmp_port_unreach(isipv6, pbuf)
104 #endif /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) LWIP_IPV4*/
110 #endif /* LWIP_HDR_ICMP_H */