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
00040
00041
00042
00043 struct icmp_ra_addr {
00044 u_int32_t ira_addr;
00045 u_int32_t ira_preference;
00046 };
00047
00048
00049
00050
00051 struct icmp {
00052 u_int8_t icmp_type;
00053 u_int8_t icmp_code;
00054 u_int16_t icmp_cksum;
00055 union {
00056 u_int8_t ih_pptr;
00057 struct in_addr ih_gwaddr;
00058 struct ih_idseq {
00059 int16_t icd_id;
00060 int16_t icd_seq;
00061 } ih_idseq;
00062 int32_t ih_void;
00063
00064
00065 struct ih_pmtu {
00066 int16_t ipm_void;
00067 int16_t ipm_nextmtu;
00068 } ih_pmtu;
00069 struct ih_rtradv {
00070 u_int8_t irt_num_addrs;
00071 u_int8_t irt_wpa;
00072 u_int16_t irt_lifetime;
00073 } ih_rtradv;
00074 } icmp_hun;
00075 #define icmp_pptr icmp_hun.ih_pptr
00076 #define icmp_gwaddr icmp_hun.ih_gwaddr
00077 #define icmp_id icmp_hun.ih_idseq.icd_id
00078 #define icmp_seq icmp_hun.ih_idseq.icd_seq
00079 #define icmp_void icmp_hun.ih_void
00080 #define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
00081 #define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
00082 #define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
00083 #define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
00084 #define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
00085 union {
00086 struct id_ts {
00087 u_int32_t its_otime;
00088 u_int32_t its_rtime;
00089 u_int32_t its_ttime;
00090 } id_ts;
00091 struct id_ip {
00092 struct ip idi_ip;
00093
00094 } id_ip;
00095 struct icmp_ra_addr id_radv;
00096 u_int32_t id_mask;
00097 int8_t id_data[1];
00098 } icmp_dun;
00099 #define icmp_otime icmp_dun.id_ts.its_otime
00100 #define icmp_rtime icmp_dun.id_ts.its_rtime
00101 #define icmp_ttime icmp_dun.id_ts.its_ttime
00102 #define icmp_ip icmp_dun.id_ip.idi_ip
00103 #define icmp_radv icmp_dun.id_mask
00104 #define icmp_mask icmp_dun.id_mask
00105 #define icmp_data icmp_dun.id_data
00106 };
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 #define ICMP_MINLEN 8
00117 #define ICMP_TSLEN (8 + 3 * sizeof (u_int32_t))
00118 #define ICMP_MASKLEN 12
00119 #define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8)
00120 #define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
00121
00122
00123
00124
00125
00126 #define ICMP_ECHOREPLY 0
00127 #define ICMP_UNREACH 3
00128 #define ICMP_UNREACH_NET 0
00129 #define ICMP_UNREACH_HOST 1
00130 #define ICMP_UNREACH_PROTOCOL 2
00131 #define ICMP_UNREACH_PORT 3
00132 #define ICMP_UNREACH_NEEDFRAG 4
00133 #define ICMP_UNREACH_SRCFAIL 5
00134 #define ICMP_UNREACH_NET_UNKNOWN 6
00135 #define ICMP_UNREACH_HOST_UNKNOWN 7
00136 #define ICMP_UNREACH_ISOLATED 8
00137 #define ICMP_UNREACH_NET_PROHIB 9
00138 #define ICMP_UNREACH_HOST_PROHIB 10
00139 #define ICMP_UNREACH_TOSNET 11
00140 #define ICMP_UNREACH_TOSHOST 12
00141 #define ICMP_SOURCEQUENCH 4
00142 #define ICMP_REDIRECT 5
00143 #define ICMP_REDIRECT_NET 0
00144 #define ICMP_REDIRECT_HOST 1
00145 #define ICMP_REDIRECT_TOSNET 2
00146 #define ICMP_REDIRECT_TOSHOST 3
00147 #define ICMP_ECHO 8
00148 #define ICMP_ROUTERADVERT 9
00149 #define ICMP_ROUTERSOLICIT 10
00150 #define ICMP_TIMXCEED 11
00151 #define ICMP_TIMXCEED_INTRANS 0
00152 #define ICMP_TIMXCEED_REASS 1
00153 #define ICMP_PARAMPROB 12
00154 #define ICMP_PARAMPROB_OPTABSENT 1
00155 #define ICMP_TSTAMP 13
00156 #define ICMP_TSTAMPREPLY 14
00157 #define ICMP_IREQ 15
00158 #define ICMP_IREQREPLY 16
00159 #define ICMP_MASKREQ 17
00160 #define ICMP_MASKREPLY 18
00161
00162 #define ICMP_MAXTYPE 18
00163
00164 #define ICMP_INFOTYPE(type) \
00165 ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
00166 (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
00167 (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
00168 (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
00169 (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
00170
00171 #ifdef _KERNEL
00172 void icmp_error __P((struct mbuf *, int, int, n_long, struct ifnet *));
00173 void icmp_input __P((struct mbuf *, ...));
00174 void icmp_reflect __P((struct mbuf *));
00175 void icmp_send __P((struct mbuf *, struct mbuf *));
00176 int icmp_sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
00177 #endif
00178