00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef __LWIP_ICMP_H__
00040 #define __LWIP_ICMP_H__
00041
00042 #include "lwip/arch.h"
00043
00044 #include "lwip/opt.h"
00045 #include "lwip/pbuf.h"
00046
00047 #include "lwip/netif.h"
00048
00049 #define ICMP_ER 0
00050 #define ICMP_DUR 3
00051 #define ICMP_SQ 4
00052 #define ICMP_RD 5
00053 #define ICMP_ECHO 8
00054 #define ICMP_TE 11
00055 #define ICMP_PP 12
00056 #define ICMP_TS 13
00057 #define ICMP_TSR 14
00058 #define ICMP_IRQ 15
00059 #define ICMP_IR 16
00060
00061 enum icmp_dur_type {
00062 ICMP_DUR_NET = 0,
00063 ICMP_DUR_HOST = 1,
00064 ICMP_DUR_PROTO = 2,
00065 ICMP_DUR_PORT = 3,
00066 ICMP_DUR_FRAG = 4,
00067 ICMP_DUR_SR = 5
00068 };
00069
00070 enum icmp_te_type {
00071 ICMP_TE_TTL = 0,
00072 ICMP_TE_FRAG = 1
00073 };
00074
00075 void icmp_input(struct pbuf *p, struct netif *inp);
00076
00077 void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t);
00078 void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t);
00079
00080 #ifdef PACK_STRUCT_USE_INCLUDES
00081 # include "arch/bpstruct.h"
00082 #endif
00083 PACK_STRUCT_BEGIN
00084 struct icmp_echo_hdr {
00085 PACK_STRUCT_FIELD(u16_t _type_code);
00086 PACK_STRUCT_FIELD(u16_t chksum);
00087 PACK_STRUCT_FIELD(u16_t id);
00088 PACK_STRUCT_FIELD(u16_t seqno);
00089 } PACK_STRUCT_STRUCT;
00090 PACK_STRUCT_END
00091
00092 PACK_STRUCT_BEGIN
00093 struct icmp_dur_hdr {
00094 PACK_STRUCT_FIELD(u16_t _type_code);
00095 PACK_STRUCT_FIELD(u16_t chksum);
00096 PACK_STRUCT_FIELD(u32_t unused);
00097 } PACK_STRUCT_STRUCT;
00098 PACK_STRUCT_END
00099
00100 PACK_STRUCT_BEGIN
00101 struct icmp_te_hdr {
00102 PACK_STRUCT_FIELD(u16_t _type_code);
00103 PACK_STRUCT_FIELD(u16_t chksum);
00104 PACK_STRUCT_FIELD(u32_t unused);
00105 } PACK_STRUCT_STRUCT;
00106 PACK_STRUCT_END
00107 #ifdef PACK_STRUCT_USE_INCLUDES
00108 # include "arch/epstruct.h"
00109 #endif
00110
00111 #define ICMPH_TYPE(hdr) (ntohs((hdr)->_type_code) >> 8)
00112 #define ICMPH_CODE(hdr) (ntohs((hdr)->_type_code) & 0xff)
00113
00114 #define ICMPH_TYPE_SET(hdr, type) ((hdr)->_type_code = htons(ICMPH_CODE(hdr) | ((type) << 8)))
00115 #define ICMPH_CODE_SET(hdr, code) ((hdr)->_type_code = htons((code) | (ICMPH_TYPE(hdr) << 8)))
00116
00117 #endif
00118