aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorWeilong Chen <weilong.chen@linaro.org>2014-04-21 17:15:07 +0800
committerMaxim Uvarov <maxim.uvarov@linaro.org>2014-04-24 12:21:43 +0400
commit66348e4bfe63a87220f1747ac05d2ae7db494985 (patch)
treeb511b035af588f4b831dbf1264284a8ce201f322 /include
parent2aee2ad10cbd9330d72408221266235c7ca96410 (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.h97
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