ISC DHCP
4.3.3-P1
A reference DHCPv4 and DHCPv6 implementation
ip_icmp.h
Go to the documentation of this file.
1
/* $NetBSD: ip_icmp.h,v 1.11 1996/08/03 15:48:18 neil Exp $ */
2
3
/*
4
* Copyright (c) 1982, 1986, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
* 3. Neither the name of the University nor the names of its contributors
16
* may be used to endorse or promote products derived from this software
17
* without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*
31
* @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93
32
*/
33
34
35
/*
36
* Interface Control Message Protocol Definitions.
37
* Per RFC 792, September 1981.
38
*/
39
40
/*
41
* Internal of an ICMP Router Advertisement
42
*/
43
struct
icmp_ra_addr
{
44
u_int32_t
ira_addr
;
45
u_int32_t
ira_preference
;
46
};
47
48
/*
49
* Structure of an icmp header.
50
*/
51
struct
icmp
{
52
u_int8_t
icmp_type
;
/* type of message, see below */
53
u_int8_t
icmp_code
;
/* type sub code */
54
u_int16_t
icmp_cksum
;
/* ones complement cksum of struct */
55
union
{
56
u_int8_t
ih_pptr
;
/* ICMP_PARAMPROB */
57
struct
in_addr ih_gwaddr;
/* ICMP_REDIRECT */
58
struct
ih_idseq {
59
int16_t
icd_id
;
60
int16_t
icd_seq
;
61
} ih_idseq;
62
int32_t
ih_void
;
63
64
/* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
65
struct
ih_pmtu {
66
int16_t
ipm_void
;
67
int16_t
ipm_nextmtu
;
68
} ih_pmtu;
69
struct
ih_rtradv {
70
u_int8_t
irt_num_addrs
;
71
u_int8_t
irt_wpa
;
72
u_int16_t
irt_lifetime
;
73
} ih_rtradv;
74
} icmp_hun;
75
#define icmp_pptr icmp_hun.ih_pptr
76
#define icmp_gwaddr icmp_hun.ih_gwaddr
77
#define icmp_id icmp_hun.ih_idseq.icd_id
78
#define icmp_seq icmp_hun.ih_idseq.icd_seq
79
#define icmp_void icmp_hun.ih_void
80
#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
81
#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
82
#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
83
#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
84
#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
85
union
{
86
struct
id_ts {
87
u_int32_t
its_otime
;
88
u_int32_t
its_rtime
;
89
u_int32_t
its_ttime
;
90
} id_ts;
91
struct
id_ip {
92
struct
ip
idi_ip;
93
/* options and then 64 bits of data */
94
} id_ip;
95
struct
icmp_ra_addr
id_radv;
96
u_int32_t
id_mask
;
97
int8_t id_data[1];
98
} icmp_dun;
99
#define icmp_otime icmp_dun.id_ts.its_otime
100
#define icmp_rtime icmp_dun.id_ts.its_rtime
101
#define icmp_ttime icmp_dun.id_ts.its_ttime
102
#define icmp_ip icmp_dun.id_ip.idi_ip
103
#define icmp_radv icmp_dun.id_mask
104
#define icmp_mask icmp_dun.id_mask
105
#define icmp_data icmp_dun.id_data
106
};
107
108
/*
109
* Lower bounds on packet lengths for various types.
110
* For the error advice packets must first insure that the
111
* packet is large enought to contain the returned ip header.
112
* Only then can we do the check to see if 64 bits of packet
113
* data have been returned, since we need to check the returned
114
* ip header length.
115
*/
116
#define ICMP_MINLEN 8
/* abs minimum */
117
#define ICMP_TSLEN (8 + 3 * sizeof (u_int32_t))
/* timestamp */
118
#define ICMP_MASKLEN 12
/* address mask */
119
#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8)
/* min */
120
#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
121
/* N.B.: must separately check that ip_hl >= 5 */
122
123
/*
124
* Definition of type and code field values.
125
*/
126
#define ICMP_ECHOREPLY 0
/* echo reply */
127
#define ICMP_UNREACH 3
/* dest unreachable, codes: */
128
#define ICMP_UNREACH_NET 0
/* bad net */
129
#define ICMP_UNREACH_HOST 1
/* bad host */
130
#define ICMP_UNREACH_PROTOCOL 2
/* bad protocol */
131
#define ICMP_UNREACH_PORT 3
/* bad port */
132
#define ICMP_UNREACH_NEEDFRAG 4
/* IP_DF caused drop */
133
#define ICMP_UNREACH_SRCFAIL 5
/* src route failed */
134
#define ICMP_UNREACH_NET_UNKNOWN 6
/* unknown net */
135
#define ICMP_UNREACH_HOST_UNKNOWN 7
/* unknown host */
136
#define ICMP_UNREACH_ISOLATED 8
/* src host isolated */
137
#define ICMP_UNREACH_NET_PROHIB 9
/* prohibited access */
138
#define ICMP_UNREACH_HOST_PROHIB 10
/* ditto */
139
#define ICMP_UNREACH_TOSNET 11
/* bad tos for net */
140
#define ICMP_UNREACH_TOSHOST 12
/* bad tos for host */
141
#define ICMP_SOURCEQUENCH 4
/* packet lost, slow down */
142
#define ICMP_REDIRECT 5
/* shorter route, codes: */
143
#define ICMP_REDIRECT_NET 0
/* for network */
144
#define ICMP_REDIRECT_HOST 1
/* for host */
145
#define ICMP_REDIRECT_TOSNET 2
/* for tos and net */
146
#define ICMP_REDIRECT_TOSHOST 3
/* for tos and host */
147
#define ICMP_ECHO 8
/* echo service */
148
#define ICMP_ROUTERADVERT 9
/* router advertisement */
149
#define ICMP_ROUTERSOLICIT 10
/* router solicitation */
150
#define ICMP_TIMXCEED 11
/* time exceeded, code: */
151
#define ICMP_TIMXCEED_INTRANS 0
/* ttl==0 in transit */
152
#define ICMP_TIMXCEED_REASS 1
/* ttl==0 in reass */
153
#define ICMP_PARAMPROB 12
/* ip header bad */
154
#define ICMP_PARAMPROB_OPTABSENT 1
/* req. opt. absent */
155
#define ICMP_TSTAMP 13
/* timestamp request */
156
#define ICMP_TSTAMPREPLY 14
/* timestamp reply */
157
#define ICMP_IREQ 15
/* information request */
158
#define ICMP_IREQREPLY 16
/* information reply */
159
#define ICMP_MASKREQ 17
/* address mask request */
160
#define ICMP_MASKREPLY 18
/* address mask reply */
161
162
#define ICMP_MAXTYPE 18
163
164
#define ICMP_INFOTYPE(type) \
165
((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
166
(type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
167
(type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
168
(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
169
(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
170
171
#ifdef _KERNEL
172
void
icmp_error __P((
struct
mbuf *,
int
,
int
, n_long,
struct
ifnet *));
173
void
icmp_input __P((
struct
mbuf *, ...));
174
void
icmp_reflect __P((
struct
mbuf *));
175
void
icmp_send __P((
struct
mbuf *,
struct
mbuf *));
176
int
icmp_sysctl __P((
int
*, u_int,
void
*,
size_t
*,
void
*,
size_t
));
177
#endif
178
icmp::ih_void
int32_t ih_void
Definition:
ip_icmp.h:62
icmp::ih_pptr
u_int8_t ih_pptr
Definition:
ip_icmp.h:56
icmp::irt_lifetime
u_int16_t irt_lifetime
Definition:
ip_icmp.h:72
icmp::icmp_code
u_int8_t icmp_code
Definition:
ip_icmp.h:53
icmp::irt_num_addrs
u_int8_t irt_num_addrs
Definition:
ip_icmp.h:70
icmp::its_rtime
u_int32_t its_rtime
Definition:
ip_icmp.h:88
icmp_ra_addr
Definition:
ip_icmp.h:43
icmp::icmp_cksum
u_int16_t icmp_cksum
Definition:
ip_icmp.h:54
icmp
Definition:
ip_icmp.h:51
icmp::id_mask
u_int32_t id_mask
Definition:
ip_icmp.h:96
icmp::ipm_nextmtu
int16_t ipm_nextmtu
Definition:
ip_icmp.h:67
icmp::icd_seq
int16_t icd_seq
Definition:
ip_icmp.h:60
ip
Definition:
ip.h:47
icmp::its_ttime
u_int32_t its_ttime
Definition:
ip_icmp.h:89
icmp::irt_wpa
u_int8_t irt_wpa
Definition:
ip_icmp.h:71
icmp::icmp_type
u_int8_t icmp_type
Definition:
ip_icmp.h:52
icmp_ra_addr::ira_preference
u_int32_t ira_preference
Definition:
ip_icmp.h:45
icmp::icd_id
int16_t icd_id
Definition:
ip_icmp.h:59
icmp_ra_addr::ira_addr
u_int32_t ira_addr
Definition:
ip_icmp.h:44
icmp::its_otime
u_int32_t its_otime
Definition:
ip_icmp.h:87
icmp::ipm_void
int16_t ipm_void
Definition:
ip_icmp.h:66
includes
netinet
ip_icmp.h
Generated on Mon Aug 8 2016 18:15:05 for ISC DHCP by
1.8.11