1
+ /*
2
+ * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
3
+ *
4
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5
+ *
6
+ * This file contains Original Code and/or Modifications of Original Code
7
+ * as defined in and that are subject to the Apple Public Source License
8
+ * Version 2.0 (the 'License'). You may not use this file except in
9
+ * compliance with the License. The rights granted to you under the License
10
+ * may not be used to create, or enable the creation or redistribution of,
11
+ * unlawful or unlicensed copies of an Apple operating system, or to
12
+ * circumvent, violate, or enable the circumvention or violation of, any
13
+ * terms of an Apple operating system software license agreement.
14
+ *
15
+ * Please obtain a copy of the License at
16
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
17
+ *
18
+ * The Original Code and all software distributed under the License are
19
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23
+ * Please see the License for the specific language governing rights and
24
+ * limitations under the License.
25
+ *
26
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27
+ */
28
+ /*
29
+ * Copyright (c) 1980, 1986, 1993
30
+ * The Regents of the University of California. All rights reserved.
31
+ *
32
+ * Redistribution and use in source and binary forms, with or without
33
+ * modification, are permitted provided that the following conditions
34
+ * are met:
35
+ * 1. Redistributions of source code must retain the above copyright
36
+ * notice, this list of conditions and the following disclaimer.
37
+ * 2. Redistributions in binary form must reproduce the above copyright
38
+ * notice, this list of conditions and the following disclaimer in the
39
+ * documentation and/or other materials provided with the distribution.
40
+ * 3. All advertising materials mentioning features or use of this software
41
+ * must display the following acknowledgement:
42
+ * This product includes software developed by the University of
43
+ * California, Berkeley and its contributors.
44
+ * 4. Neither the name of the University nor the names of its contributors
45
+ * may be used to endorse or promote products derived from this software
46
+ * without specific prior written permission.
47
+ *
48
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
49
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
52
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58
+ * SUCH DAMAGE.
59
+ *
60
+ * @(#)route.h 8.3 (Berkeley) 4/19/94
61
+ * $FreeBSD: src/sys/net/route.h,v 1.36.2.1 2000/08/16 06:14:23 jayanth Exp $
62
+ */
63
+
64
+ #ifndef _NET_ROUTE_H_
65
+ #define _NET_ROUTE_H_
66
+ #include <sys/appleapiopts.h>
67
+ #include <stdint.h>
68
+ #include <sys/types.h>
69
+ #include <sys/socket.h>
70
+
71
+ /*
72
+ * Kernel resident routing tables.
73
+ *
74
+ * The routing tables are initialized when interface addresses
75
+ * are set by making entries for all directly connected interfaces.
76
+ */
77
+
78
+ /*
79
+ * A route consists of a destination address and a reference
80
+ * to a routing entry. These are often held by protocols
81
+ * in their control blocks, e.g. inpcb.
82
+ */
83
+ struct route ;
84
+
85
+ /*
86
+ * These numbers are used by reliable protocols for determining
87
+ * retransmission behavior and are included in the routing structure.
88
+ */
89
+ struct rt_metrics {
90
+ u_int32_t rmx_locks ; /* Kernel must leave these values alone */
91
+ u_int32_t rmx_mtu ; /* MTU for this path */
92
+ u_int32_t rmx_hopcount ; /* max hops expected */
93
+ int32_t rmx_expire ; /* lifetime for route, e.g. redirect */
94
+ u_int32_t rmx_recvpipe ; /* inbound delay-bandwidth product */
95
+ u_int32_t rmx_sendpipe ; /* outbound delay-bandwidth product */
96
+ u_int32_t rmx_ssthresh ; /* outbound gateway buffer limit */
97
+ u_int32_t rmx_rtt ; /* estimated round trip time */
98
+ u_int32_t rmx_rttvar ; /* estimated rtt variance */
99
+ u_int32_t rmx_pksent ; /* packets sent using this route */
100
+ u_int32_t rmx_filler [4 ]; /* will be used for T/TCP later */
101
+ };
102
+
103
+ /*
104
+ * rmx_rtt and rmx_rttvar are stored as microseconds;
105
+ */
106
+ #define RTM_RTTUNIT 1000000 /* units for rtt, rttvar, as units per sec */
107
+
108
+ /*
109
+ * We distinguish between routes to hosts and routes to networks,
110
+ * preferring the former if available. For each route we infer
111
+ * the interface to use from the gateway address supplied when
112
+ * the route was entered. Routes that forward packets through
113
+ * gateways are marked so that the output routines know to address the
114
+ * gateway rather than the ultimate destination.
115
+ */
116
+
117
+
118
+ #define RTF_UP 0x1 /* route usable */
119
+ #define RTF_GATEWAY 0x2 /* destination is a gateway */
120
+ #define RTF_HOST 0x4 /* host entry (net otherwise) */
121
+ #define RTF_REJECT 0x8 /* host or net unreachable */
122
+ #define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */
123
+ #define RTF_MODIFIED 0x20 /* modified dynamically (by redirect) */
124
+ #define RTF_DONE 0x40 /* message confirmed */
125
+ #define RTF_DELCLONE 0x80 /* delete cloned route */
126
+ #define RTF_CLONING 0x100 /* generate new routes on use */
127
+ #define RTF_XRESOLVE 0x200 /* external daemon resolves name */
128
+ #define RTF_LLINFO 0x400 /* generated by link layer (e.g. ARP) */
129
+ #define RTF_STATIC 0x800 /* manually added */
130
+ #define RTF_BLACKHOLE 0x1000 /* just discard pkts (during updates) */
131
+ #define RTF_PROTO2 0x4000 /* protocol specific routing flag */
132
+ #define RTF_PROTO1 0x8000 /* protocol specific routing flag */
133
+
134
+ #define RTF_PRCLONING 0x10000 /* protocol requires cloning */
135
+ #define RTF_WASCLONED 0x20000 /* route generated through cloning */
136
+ #define RTF_PROTO3 0x40000 /* protocol specific routing flag */
137
+ /* 0x80000 unused */
138
+ #define RTF_PINNED 0x100000 /* future use */
139
+ #define RTF_LOCAL 0x200000 /* route represents a local address */
140
+ #define RTF_BROADCAST 0x400000 /* route represents a bcast address */
141
+ #define RTF_MULTICAST 0x800000 /* route represents a mcast address */
142
+ #define RTF_IFSCOPE 0x1000000 /* has valid interface scope */
143
+ #define RTF_CONDEMNED 0x2000000 /* defunct; no longer modifiable */
144
+ /* 0x4000000 and up unassigned */
145
+
146
+ /*
147
+ * Routing statistics.
148
+ */
149
+ struct rtstat {
150
+ short rts_badredirect ; /* bogus redirect calls */
151
+ short rts_dynamic ; /* routes created by redirects */
152
+ short rts_newgateway ; /* routes modified by redirects */
153
+ short rts_unreach ; /* lookups which failed */
154
+ short rts_wildcard ; /* lookups satisfied by a wildcard */
155
+ };
156
+
157
+ /*
158
+ * Structures for routing messages.
159
+ */
160
+ struct rt_msghdr {
161
+ u_short rtm_msglen ; /* to skip over non-understood messages */
162
+ u_char rtm_version ; /* future binary compatibility */
163
+ u_char rtm_type ; /* message type */
164
+ u_short rtm_index ; /* index for associated ifp */
165
+ int rtm_flags ; /* flags, incl. kern & message, e.g. DONE */
166
+ int rtm_addrs ; /* bitmask identifying sockaddrs in msg */
167
+ pid_t rtm_pid ; /* identify sender */
168
+ int rtm_seq ; /* for sender to identify action */
169
+ int rtm_errno ; /* why failed */
170
+ int rtm_use ; /* from rtentry */
171
+ u_int32_t rtm_inits ; /* which metrics we are initializing */
172
+ struct rt_metrics rtm_rmx ; /* metrics themselves */
173
+ };
174
+
175
+ struct rt_msghdr2 {
176
+ u_short rtm_msglen ; /* to skip over non-understood messages */
177
+ u_char rtm_version ; /* future binary compatibility */
178
+ u_char rtm_type ; /* message type */
179
+ u_short rtm_index ; /* index for associated ifp */
180
+ int rtm_flags ; /* flags, incl. kern & message, e.g. DONE */
181
+ int rtm_addrs ; /* bitmask identifying sockaddrs in msg */
182
+ int32_t rtm_refcnt ; /* reference count */
183
+ int rtm_parentflags ; /* flags of the parent route */
184
+ int rtm_reserved ; /* reserved field set to 0 */
185
+ int rtm_use ; /* from rtentry */
186
+ u_int32_t rtm_inits ; /* which metrics we are initializing */
187
+ struct rt_metrics rtm_rmx ; /* metrics themselves */
188
+ };
189
+
190
+
191
+ #define RTM_VERSION 5 /* Up the ante and ignore older versions */
192
+
193
+ /*
194
+ * Message types.
195
+ */
196
+ #define RTM_ADD 0x1 /* Add Route */
197
+ #define RTM_DELETE 0x2 /* Delete Route */
198
+ #define RTM_CHANGE 0x3 /* Change Metrics or flags */
199
+ #define RTM_GET 0x4 /* Report Metrics */
200
+ #define RTM_LOSING 0x5 /* Kernel Suspects Partitioning */
201
+ #define RTM_REDIRECT 0x6 /* Told to use different route */
202
+ #define RTM_MISS 0x7 /* Lookup failed on this address */
203
+ #define RTM_LOCK 0x8 /* fix specified metrics */
204
+ #define RTM_OLDADD 0x9 /* caused by SIOCADDRT */
205
+ #define RTM_OLDDEL 0xa /* caused by SIOCDELRT */
206
+ #define RTM_RESOLVE 0xb /* req to resolve dst to LL addr */
207
+ #define RTM_NEWADDR 0xc /* address being added to iface */
208
+ #define RTM_DELADDR 0xd /* address being removed from iface */
209
+ #define RTM_IFINFO 0xe /* iface going up/down etc. */
210
+ #define RTM_NEWMADDR 0xf /* mcast group membership being added to if */
211
+ #define RTM_DELMADDR 0x10 /* mcast group membership being deleted */
212
+ #define RTM_IFINFO2 0x12 /* */
213
+ #define RTM_NEWMADDR2 0x13 /* */
214
+ #define RTM_GET2 0x14 /* */
215
+
216
+ /*
217
+ * Bitmask values for rtm_inits and rmx_locks.
218
+ */
219
+ #define RTV_MTU 0x1 /* init or lock _mtu */
220
+ #define RTV_HOPCOUNT 0x2 /* init or lock _hopcount */
221
+ #define RTV_EXPIRE 0x4 /* init or lock _expire */
222
+ #define RTV_RPIPE 0x8 /* init or lock _recvpipe */
223
+ #define RTV_SPIPE 0x10 /* init or lock _sendpipe */
224
+ #define RTV_SSTHRESH 0x20 /* init or lock _ssthresh */
225
+ #define RTV_RTT 0x40 /* init or lock _rtt */
226
+ #define RTV_RTTVAR 0x80 /* init or lock _rttvar */
227
+
228
+ /*
229
+ * Bitmask values for rtm_addrs.
230
+ */
231
+ #define RTA_DST 0x1 /* destination sockaddr present */
232
+ #define RTA_GATEWAY 0x2 /* gateway sockaddr present */
233
+ #define RTA_NETMASK 0x4 /* netmask sockaddr present */
234
+ #define RTA_GENMASK 0x8 /* cloning mask sockaddr present */
235
+ #define RTA_IFP 0x10 /* interface name sockaddr present */
236
+ #define RTA_IFA 0x20 /* interface addr sockaddr present */
237
+ #define RTA_AUTHOR 0x40 /* sockaddr for author of redirect */
238
+ #define RTA_BRD 0x80 /* for NEWADDR, broadcast or p-p dest addr */
239
+
240
+ /*
241
+ * Index offsets for sockaddr array for alternate internal encoding.
242
+ */
243
+ #define RTAX_DST 0 /* destination sockaddr present */
244
+ #define RTAX_GATEWAY 1 /* gateway sockaddr present */
245
+ #define RTAX_NETMASK 2 /* netmask sockaddr present */
246
+ #define RTAX_GENMASK 3 /* cloning mask sockaddr present */
247
+ #define RTAX_IFP 4 /* interface name sockaddr present */
248
+ #define RTAX_IFA 5 /* interface addr sockaddr present */
249
+ #define RTAX_AUTHOR 6 /* sockaddr for author of redirect */
250
+ #define RTAX_BRD 7 /* for NEWADDR, broadcast or p-p dest addr */
251
+ #define RTAX_MAX 8 /* size of array to allocate */
252
+
253
+ struct rt_addrinfo {
254
+ int rti_addrs ;
255
+ struct sockaddr * rti_info [RTAX_MAX ];
256
+ };
257
+
258
+ struct route_cb {
259
+ int ip_count ;
260
+ int ip6_count ;
261
+ int ipx_count ;
262
+ int ns_count ;
263
+ int iso_count ;
264
+ int any_count ;
265
+ };
266
+
267
+
268
+
269
+ #endif
0 commit comments