Free (GPLv2) TCP/IP stack developed by TASS Belgium
Dependents: lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more
pico_icmp4.h
00001 /********************************************************************* 00002 PicoTCP. Copyright (c) 2012-2015 Altran Intelligent Systems. Some rights reserved. 00003 See LICENSE and COPYING for usage. 00004 00005 . 00006 00007 *********************************************************************/ 00008 #ifndef INCLUDE_PICO_ICMP4 00009 #define INCLUDE_PICO_ICMP4 00010 #include "pico_defines.h" 00011 #include "pico_addressing.h" 00012 #include "pico_protocol.h" 00013 00014 00015 extern struct pico_protocol pico_proto_icmp4; 00016 00017 PACKED_STRUCT_DEF pico_icmp4_hdr { 00018 uint8_t type; 00019 uint8_t code; 00020 uint16_t crc; 00021 00022 /* hun */ 00023 PACKED_UNION_DEF hun_u { 00024 uint8_t ih_pptr; 00025 struct pico_ip4 ih_gwaddr; 00026 PEDANTIC_STRUCT_DEF ih_idseq_s { 00027 uint16_t idseq_id; 00028 uint16_t idseq_seq; 00029 } ih_idseq; 00030 uint32_t ih_void; 00031 PEDANTIC_STRUCT_DEF ih_pmtu_s { 00032 uint16_t ipm_void; 00033 uint16_t ipm_nmtu; 00034 } ih_pmtu; 00035 PEDANTIC_STRUCT_DEF ih_rta_s { 00036 uint8_t rta_numgw; 00037 uint8_t rta_wpa; 00038 uint16_t rta_lifetime; 00039 } ih_rta; 00040 } hun; 00041 00042 /* dun */ 00043 PACKED_UNION_DEF dun_u { 00044 PEDANTIC_STRUCT_DEF id_ts_s { 00045 uint32_t ts_otime; 00046 uint32_t ts_rtime; 00047 uint32_t ts_ttime; 00048 } id_ts; 00049 PEDANTIC_STRUCT_DEF id_ip_s { 00050 uint32_t ip_options; 00051 uint32_t ip_data_hi; 00052 uint32_t ip_data_lo; 00053 } id_ip; 00054 PEDANTIC_STRUCT_DEF id_ra_s { 00055 uint32_t ira_addr; 00056 uint32_t ira_pref; 00057 } id_ra; 00058 uint32_t id_mask; 00059 uint8_t id_data[1]; 00060 } dun; 00061 }; 00062 00063 #define PICO_ICMPHDR_DRY_SIZE 4 00064 #define PICO_ICMPHDR_UN_SIZE 8u 00065 00066 #define PICO_ICMP_ECHOREPLY 0 00067 #define PICO_ICMP_DEST_UNREACH 3 00068 #define PICO_ICMP_SOURCE_QUENCH 4 00069 #define PICO_ICMP_REDIRECT 5 00070 #define PICO_ICMP_ECHO 8 00071 #define PICO_ICMP_TIME_EXCEEDED 11 00072 #define PICO_ICMP_PARAMETERPROB 12 00073 #define PICO_ICMP_TIMESTAMP 13 00074 #define PICO_ICMP_TIMESTAMPREPLY 14 00075 #define PICO_ICMP_INFO_REQUEST 15 00076 #define PICO_ICMP_INFO_REPLY 16 00077 #define PICO_ICMP_ADDRESS 17 00078 #define PICO_ICMP_ADDRESSREPLY 18 00079 00080 00081 #define PICO_ICMP_UNREACH 3 00082 #define PICO_ICMP_SOURCEQUENCH 4 00083 #define PICO_ICMP_ROUTERADVERT 9 00084 #define PICO_ICMP_ROUTERSOLICIT 10 00085 #define PICO_ICMP_TIMXCEED 11 00086 #define PICO_ICMP_PARAMPROB 12 00087 #define PICO_ICMP_TSTAMP 13 00088 #define PICO_ICMP_TSTAMPREPLY 14 00089 #define PICO_ICMP_IREQ 15 00090 #define PICO_ICMP_IREQREPLY 16 00091 #define PICO_ICMP_MASKREQ 17 00092 #define PICO_ICMP_MASKREPLY 18 00093 00094 #define PICO_ICMP_MAXTYPE 18 00095 00096 00097 #define PICO_ICMP_UNREACH_NET 0 00098 #define PICO_ICMP_UNREACH_HOST 1 00099 #define PICO_ICMP_UNREACH_PROTOCOL 2 00100 #define PICO_ICMP_UNREACH_PORT 3 00101 #define PICO_ICMP_UNREACH_NEEDFRAG 4 00102 #define PICO_ICMP_UNREACH_SRCFAIL 5 00103 #define PICO_ICMP_UNREACH_NET_UNKNOWN 6 00104 #define PICO_ICMP_UNREACH_HOST_UNKNOWN 7 00105 #define PICO_ICMP_UNREACH_ISOLATED 8 00106 #define PICO_ICMP_UNREACH_NET_PROHIB 9 00107 #define PICO_ICMP_UNREACH_HOST_PROHIB 10 00108 #define PICO_ICMP_UNREACH_TOSNET 11 00109 #define PICO_ICMP_UNREACH_TOSHOST 12 00110 #define PICO_ICMP_UNREACH_FILTER_PROHIB 13 00111 #define PICO_ICMP_UNREACH_HOST_PRECEDENCE 14 00112 #define PICO_ICMP_UNREACH_PRECEDENCE_CUTOFF 15 00113 00114 00115 #define PICO_ICMP_REDIRECT_NET 0 00116 #define PICO_ICMP_REDIRECT_HOST 1 00117 #define PICO_ICMP_REDIRECT_TOSNET 2 00118 #define PICO_ICMP_REDIRECT_TOSHOST 3 00119 00120 00121 #define PICO_ICMP_TIMXCEED_INTRANS 0 00122 #define PICO_ICMP_TIMXCEED_REASS 1 00123 00124 00125 #define PICO_ICMP_PARAMPROB_OPTABSENT 1 00126 00127 #define PICO_SIZE_ICMP4HDR ((sizeof(struct pico_icmp4_hdr))) 00128 00129 struct pico_icmp4_stats 00130 { 00131 struct pico_ip4 dst; 00132 unsigned long size; 00133 unsigned long seq; 00134 pico_time time; 00135 unsigned long ttl; 00136 int err; 00137 }; 00138 00139 int pico_icmp4_port_unreachable(struct pico_frame *f); 00140 int pico_icmp4_proto_unreachable(struct pico_frame *f); 00141 int pico_icmp4_dest_unreachable(struct pico_frame *f); 00142 int pico_icmp4_mtu_exceeded(struct pico_frame *f); 00143 int pico_icmp4_ttl_expired(struct pico_frame *f); 00144 int pico_icmp4_frag_expired(struct pico_frame *f); 00145 int pico_icmp4_ping(char *dst, int count, int interval, int timeout, int size, void (*cb)(struct pico_icmp4_stats *)); 00146 int pico_icmp4_ping_abort(int id); 00147 00148 #ifdef PICO_SUPPORT_ICMP4 00149 int pico_icmp4_packet_filtered(struct pico_frame *f); 00150 int pico_icmp4_param_problem(struct pico_frame *f, uint8_t code); 00151 #else 00152 # define pico_icmp4_packet_filtered(f) (-1) 00153 # define pico_icmp4_param_problem(f, c) (-1) 00154 #endif /* PICO_SUPPORT_ICMP4 */ 00155 00156 #define PICO_PING_ERR_REPLIED 0 00157 #define PICO_PING_ERR_TIMEOUT 1 00158 #define PICO_PING_ERR_UNREACH 2 00159 #define PICO_PING_ERR_ABORTED 3 00160 #define PICO_PING_ERR_PENDING 0xFFFF 00161 00162 #endif
Generated on Tue Jul 12 2022 15:59:21 by 1.7.2