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