diff options
author | Weilong Chen <weilong.chen@linaro.org> | 2014-04-21 17:15:07 +0800 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2014-04-24 12:21:43 +0400 |
commit | 66348e4bfe63a87220f1747ac05d2ae7db494985 (patch) | |
tree | b511b035af588f4b831dbf1264284a8ce201f322 /include | |
parent | 2aee2ad10cbd9330d72408221266235c7ca96410 (diff) |
Add helper: odp_icmp.h
Signed-off-by: Weilong Chen <weilong.chen@linaro.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/helper/odp_icmp.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/include/helper/odp_icmp.h b/include/helper/odp_icmp.h new file mode 100644 index 000000000..bfa356da5 --- /dev/null +++ b/include/helper/odp_icmp.h @@ -0,0 +1,97 @@ +/* Copyright (c) 2014, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + + +/** + * @file + * + * ODP ICMP header + */ + +#ifndef ODP_ICMP_H_ +#define ODP_ICMP_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp_align.h> +#include <odp_debug.h> +#include <odp_byteorder.h> + +/** ICMP header length */ +#define ODP_ICMPHDR_LEN 8 + +/** ICMP header */ +typedef struct ODP_PACKED { + uint8_t type; /** message type */ + uint8_t code; /** type sub-code */ + uint16be_t chksum; + union { + struct { + uint16be_t id; + uint16be_t sequence; + } echo; /** echo datagram */ + uint32be_t gateway; /** gateway address */ + struct { + uint16be_t __unused; + uint16be_t mtu; + } frag; /** path mtu discovery */ + } un; +} odp_icmphdr_t; + +#define ICMP_ECHOREPLY 0 /** Echo Reply */ +#define ICMP_DEST_UNREACH 3 /** Destination Unreachable */ +#define ICMP_SOURCE_QUENCH 4 /** Source Quench */ +#define ICMP_REDIRECT 5 /** Redirect (change route) */ +#define ICMP_ECHO 8 /** Echo Request */ +#define ICMP_TIME_EXCEEDED 11 /** Time Exceeded */ +#define ICMP_PARAMETERPROB 12 /** Parameter Problem */ +#define ICMP_TIMESTAMP 13 /** Timestamp Request */ +#define ICMP_TIMESTAMPREPLY 14 /** Timestamp Reply */ +#define ICMP_INFO_REQUEST 15 /** Information Request */ +#define ICMP_INFO_REPLY 16 /** Information Reply */ +#define ICMP_ADDRESS 17 /** Address Mask Request */ +#define ICMP_ADDRESSREPLY 18 /** Address Mask Reply */ +#define NR_ICMP_TYPES 18 + +/** Codes for UNREACH. */ +#define ICMP_NET_UNREACH 0 /** Network Unreachable */ +#define ICMP_HOST_UNREACH 1 /** Host Unreachable */ +#define ICMP_PROT_UNREACH 2 /** Protocol Unreachable */ +#define ICMP_PORT_UNREACH 3 /** Port Unreachable */ +#define ICMP_FRAG_NEEDED 4 /** Fragmentation Needed/DF set */ +#define ICMP_SR_FAILED 5 /** Source Route failed */ +#define ICMP_NET_UNKNOWN 6 +#define ICMP_HOST_UNKNOWN 7 +#define ICMP_HOST_ISOLATED 8 +#define ICMP_NET_ANO 9 +#define ICMP_HOST_ANO 10 +#define ICMP_NET_UNR_TOS 11 +#define ICMP_HOST_UNR_TOS 12 +#define ICMP_PKT_FILTERED 13 /** Packet filtered */ +#define ICMP_PREC_VIOLATION 14 /** Precedence violation */ +#define ICMP_PREC_CUTOFF 15 /** Precedence cut off */ +#define NR_ICMP_UNREACH 15 /** instead of hardcoding immediate value */ + +/** Codes for REDIRECT. */ +#define ICMP_REDIR_NET 0 /** Redirect Net */ +#define ICMP_REDIR_HOST 1 /** Redirect Host */ +#define ICMP_REDIR_NETTOS 2 /** Redirect Net for TOS */ +#define ICMP_REDIR_HOSTTOS 3 /** Redirect Host for TOS */ + +/** Codes for TIME_EXCEEDED. */ +#define ICMP_EXC_TTL 0 /** TTL count exceeded */ +#define ICMP_EXC_FRAGTIME 1 /** Fragment Reass time exceeded */ + +/** @internal Compile time assert */ +ODP_ASSERT(sizeof(odp_icmphdr_t) == ODP_ICMPHDR_LEN, ODP_ICMPHDR_T__SIZE_ERROR); + +#ifdef __cplusplus +} +#endif + +#endif |