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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pico_icmp4.h Source File

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