RTEMS CPU Kit with SuperCore
4.11.3
Main Page
Related Pages
Modules
+
Data Structures
Data Structures
+
Data Fields
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Files
File List
+
Globals
+
All
_
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Functions
_
a
b
c
d
e
f
g
i
j
l
m
n
o
p
q
r
s
t
u
v
w
+
Variables
_
b
c
d
i
r
+
Typedefs
a
b
c
d
f
h
i
m
o
p
q
r
s
t
u
w
x
+
Enumerations
b
c
d
e
h
i
m
o
p
r
s
t
w
+
Enumerator
c
i
m
p
r
s
t
w
+
Macros
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
w
mnt
data0
chrisj
rtems
releases
rtems-release.git
4.11.3
ws-rtems
rtems-4.11.3
cpukit
libnetworking
net
route.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1980, 1986, 1993
3
* The Regents of the University of California. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 4. Neither the name of the University nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* @(#)route.h 8.4 (Berkeley) 1/9/95
30
* $FreeBSD: src/sys/net/route.h,v 1.65 2006/03/15 19:39:09 andre Exp $
31
*/
32
33
34
#ifndef _NET_ROUTE_H_
35
#define _NET_ROUTE_H_
36
37
#include <
sys/socket.h
>
/* struct sockaddr */
38
/*
39
* Kernel resident routing tables.
40
*
41
* The routing tables are initialized when interface addresses
42
* are set by making entries for all directly connected interfaces.
43
*/
44
45
/*
46
* A route consists of a destination address and a reference
47
* to a routing entry. These are often held by protocols
48
* in their control blocks, e.g. inpcb.
49
*/
50
struct
route
{
51
struct
rtentry
*ro_rt;
52
struct
sockaddr
ro_dst;
53
};
54
55
/*
56
* These numbers are used by reliable protocols for determining
57
* retransmission behavior and are included in the routing structure.
58
*/
59
struct
rt_metrics_lite
{
60
u_long rmx_mtu;
/* MTU for this path */
61
u_long rmx_expire;
/* lifetime for route, e.g. redirect */
62
u_long rmx_pksent;
/* packets sent using this route */
63
};
64
65
struct
rt_metrics
{
66
u_long rmx_locks;
/* Kernel must leave these values alone */
67
u_long rmx_mtu;
/* MTU for this path */
68
u_long rmx_hopcount;
/* max hops expected */
69
u_long rmx_expire;
/* lifetime for route, e.g. redirect */
70
u_long rmx_recvpipe;
/* inbound delay-bandwidth product */
71
u_long rmx_sendpipe;
/* outbound delay-bandwidth product */
72
u_long rmx_ssthresh;
/* outbound gateway buffer limit */
73
u_long rmx_rtt;
/* estimated round trip time */
74
u_long rmx_rttvar;
/* estimated rtt variance */
75
u_long rmx_pksent;
/* packets sent using this route */
76
u_long rmx_filler[4];
/* will be used for T/TCP later */
77
};
78
79
/*
80
* rmx_rtt and rmx_rttvar are stored as microseconds;
81
* RTTTOPRHZ(rtt) converts to a value suitable for use
82
* by a protocol slowtimo counter.
83
*/
84
#define RTM_RTTUNIT 1000000
/* units for rtt, rttvar, as units per sec */
85
#define RTTTOPRHZ(r) ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
86
87
/*
88
* XXX kernel function pointer `rt_output' is visible to applications.
89
*/
90
struct
mbuf
;
91
92
/*
93
* We distinguish between routes to hosts and routes to networks,
94
* preferring the former if available. For each route we infer
95
* the interface to use from the gateway address supplied when
96
* the route was entered. Routes that forward packets through
97
* gateways are marked so that the output routines know to address the
98
* gateway rather than the ultimate destination.
99
*/
100
#ifndef RNF_NORMAL
101
#include <
net/radix.h
>
102
#endif
103
struct
rtentry
{
104
struct
radix_node
rt_nodes[2];
/* tree glue, and other values */
105
#define rt_key(r) ((struct sockaddr *)((r)->rt_nodes->rn_key))
106
#define rt_mask(r) ((struct sockaddr *)((r)->rt_nodes->rn_mask))
107
struct
sockaddr
*rt_gateway;
/* value */
108
u_long rt_flags;
/* up/down?, host/net */
109
struct
ifnet
*rt_ifp;
/* the answer: interface to use */
110
struct
ifaddr
*rt_ifa;
/* the answer: interface address to use */
111
struct
rt_metrics
rt_rmx;
/* metrics used by rx'ing protocols */
112
long
rt_refcnt;
/* # held references */
113
struct
sockaddr
*rt_genmask;
/* for generation of cloned routes */
114
caddr_t rt_llinfo;
/* pointer to link level info cache */
115
struct
rtentry
*rt_gwroute;
/* implied entry for gatewayed routes */
116
struct
rtentry
*rt_parent;
/* cloning parent of this route */
117
};
118
119
/*
120
* Following structure necessary for 4.3 compatibility;
121
* We should eventually move it to a compat file.
122
*/
123
struct
ortentry
{
124
u_long rt_hash;
/* to speed lookups */
125
struct
sockaddr
rt_dst;
/* key */
126
struct
sockaddr
rt_gateway;
/* value */
127
short
rt_flags;
/* up/down?, host/net */
128
short
rt_refcnt;
/* # held references */
129
u_long rt_use;
/* raw # packets forwarded */
130
struct
ifnet
*rt_ifp;
/* the answer: interface to use */
131
};
132
133
#define rt_use rt_rmx.rmx_pksent
134
135
#define RTF_UP 0x1
/* route usable */
136
#define RTF_GATEWAY 0x2
/* destination is a gateway */
137
#define RTF_HOST 0x4
/* host entry (net otherwise) */
138
#define RTF_REJECT 0x8
/* host or net unreachable */
139
#define RTF_DYNAMIC 0x10
/* created dynamically (by redirect) */
140
#define RTF_MODIFIED 0x20
/* modified dynamically (by redirect) */
141
#define RTF_DONE 0x40
/* message confirmed */
142
/* 0x80 unused, was RTF_DELCLONE */
143
#define RTF_CLONING 0x100
/* generate new routes on use */
144
#define RTF_XRESOLVE 0x200
/* external daemon resolves name */
145
#define RTF_LLINFO 0x400
/* generated by link layer (e.g. ARP) */
146
#define RTF_STATIC 0x800
/* manually added */
147
#define RTF_BLACKHOLE 0x1000
/* just discard pkts (during updates) */
148
#define RTF_PROTO2 0x4000
/* protocol specific routing flag */
149
#define RTF_PROTO1 0x8000
/* protocol specific routing flag */
150
151
#define RTF_PRCLONING 0x10000
/* protocol requires cloning */
152
#define RTF_WASCLONED 0x20000
/* route generated through cloning */
153
#define RTF_PROTO3 0x40000
/* protocol specific routing flag */
154
/* 0x80000 unused */
155
#define RTF_PINNED 0x100000
/* future use */
156
#define RTF_LOCAL 0x200000
/* route represents a local address */
157
#define RTF_BROADCAST 0x400000
/* route represents a bcast address */
158
#define RTF_MULTICAST 0x800000
/* route represents a mcast address */
159
/* 0x1000000 and up unassigned */
160
161
/*
162
* Routing statistics.
163
*/
164
struct
rtstat
{
165
short
rts_badredirect;
/* bogus redirect calls */
166
short
rts_dynamic;
/* routes created by redirects */
167
short
rts_newgateway;
/* routes modified by redirects */
168
short
rts_unreach;
/* lookups which failed */
169
short
rts_wildcard;
/* lookups satisfied by a wildcard */
170
};
171
/*
172
* Structures for routing messages.
173
*/
174
struct
rt_msghdr
{
175
u_short rtm_msglen;
/* to skip over non-understood messages */
176
u_char rtm_version;
/* future binary compatibility */
177
u_char rtm_type;
/* message type */
178
u_short rtm_index;
/* index for associated ifp */
179
int
rtm_flags;
/* flags, incl. kern & message, e.g. DONE */
180
int
rtm_addrs;
/* bitmask identifying sockaddrs in msg */
181
pid_t rtm_pid;
/* identify sender */
182
int
rtm_seq;
/* for sender to identify action */
183
int
rtm_errno;
/* why failed */
184
int
rtm_use;
/* from rtentry */
185
u_long rtm_inits;
/* which metrics we are initializing */
186
struct
rt_metrics
rtm_rmx;
/* metrics themselves */
187
};
188
189
#define RTM_VERSION 5
/* Up the ante and ignore older versions */
190
191
/*
192
* Message types.
193
*/
194
#define RTM_ADD 0x1
/* Add Route */
195
#define RTM_DELETE 0x2
/* Delete Route */
196
#define RTM_CHANGE 0x3
/* Change Metrics or flags */
197
#define RTM_GET 0x4
/* Report Metrics */
198
#define RTM_LOSING 0x5
/* Kernel Suspects Partitioning */
199
#define RTM_REDIRECT 0x6
/* Told to use different route */
200
#define RTM_MISS 0x7
/* Lookup failed on this address */
201
#define RTM_LOCK 0x8
/* fix specified metrics */
202
#define RTM_OLDADD 0x9
/* caused by SIOCADDRT */
203
#define RTM_OLDDEL 0xa
/* caused by SIOCDELRT */
204
#define RTM_RESOLVE 0xb
/* req to resolve dst to LL addr */
205
#define RTM_NEWADDR 0xc
/* address being added to iface */
206
#define RTM_DELADDR 0xd
/* address being removed from iface */
207
#define RTM_IFINFO 0xe
/* iface going up/down etc. */
208
#define RTM_NEWMADDR 0xf
/* mcast group membership being added to if */
209
#define RTM_DELMADDR 0x10
/* mcast group membership being deleted */
210
#define RTM_IFANNOUNCE 0x11
/* iface arrival/departure */
211
#define RTM_IEEE80211 0x12
/* IEEE80211 wireless event */
212
213
/*
214
* Bitmask values for rtm_inits and rmx_locks.
215
*/
216
#define RTV_MTU 0x1
/* init or lock _mtu */
217
#define RTV_HOPCOUNT 0x2
/* init or lock _hopcount */
218
#define RTV_EXPIRE 0x4
/* init or lock _expire */
219
#define RTV_RPIPE 0x8
/* init or lock _recvpipe */
220
#define RTV_SPIPE 0x10
/* init or lock _sendpipe */
221
#define RTV_SSTHRESH 0x20
/* init or lock _ssthresh */
222
#define RTV_RTT 0x40
/* init or lock _rtt */
223
#define RTV_RTTVAR 0x80
/* init or lock _rttvar */
224
225
/*
226
* Bitmask values for rtm_addrs.
227
*/
228
#define RTA_DST 0x1
/* destination sockaddr present */
229
#define RTA_GATEWAY 0x2
/* gateway sockaddr present */
230
#define RTA_NETMASK 0x4
/* netmask sockaddr present */
231
#define RTA_GENMASK 0x8
/* cloning mask sockaddr present */
232
#define RTA_IFP 0x10
/* interface name sockaddr present */
233
#define RTA_IFA 0x20
/* interface addr sockaddr present */
234
#define RTA_AUTHOR 0x40
/* sockaddr for author of redirect */
235
#define RTA_BRD 0x80
/* for NEWADDR, broadcast or p-p dest addr */
236
237
/*
238
* Index offsets for sockaddr array for alternate internal encoding.
239
*/
240
#define RTAX_DST 0
/* destination sockaddr present */
241
#define RTAX_GATEWAY 1
/* gateway sockaddr present */
242
#define RTAX_NETMASK 2
/* netmask sockaddr present */
243
#define RTAX_GENMASK 3
/* cloning mask sockaddr present */
244
#define RTAX_IFP 4
/* interface name sockaddr present */
245
#define RTAX_IFA 5
/* interface addr sockaddr present */
246
#define RTAX_AUTHOR 6
/* sockaddr for author of redirect */
247
#define RTAX_BRD 7
/* for NEWADDR, broadcast or p-p dest addr */
248
#define RTAX_MAX 8
/* size of array to allocate */
249
250
struct
rt_addrinfo
{
251
int
rti_addrs;
252
struct
sockaddr
*rti_info[RTAX_MAX];
253
};
254
255
struct
route_cb {
256
int
ip_count;
257
int
ipx_count;
258
int
ns_count;
259
int
iso_count;
260
int
any_count;
261
};
262
263
#ifdef _KERNEL
264
#define RTFREE(rt) \
265
do { \
266
if ((rt)->rt_refcnt <= 1) \
267
rtfree(rt); \
268
else \
269
(rt)->rt_refcnt--; \
270
} while (0)
271
272
extern
struct
route_cb route_cb;
273
extern
struct
radix_node_head
*rt_tables[AF_MAX+1];
274
275
void
route_init(
void
);
276
void
rt_ifmsg(
struct
ifnet
*);
277
void
rt_missmsg(
int
,
struct
rt_addrinfo
*,
int
,
int
);
278
void
rt_newaddrmsg(
int
,
struct
ifaddr
*,
int
,
struct
rtentry
*);
279
int
rt_setgate(
struct
rtentry
*,
struct
sockaddr
*,
struct
sockaddr
*);
280
void
rtalloc_ign(
struct
route
*,
unsigned
long
);
281
void
rtalloc(
struct
route
*ro);
/* XXX deprecated, use rtalloc_ign(ro, 0) */
282
struct
rtentry
*
283
rtalloc1(
struct
sockaddr
*,
int
,
unsigned
long
);
284
void
rtfree(
struct
rtentry
*);
285
int
rtinit(
struct
ifaddr
*,
int
,
int
);
286
int
rtioctl(
int
, caddr_t,
struct
proc
*);
287
void
rtredirect(
struct
sockaddr
*,
struct
sockaddr
*,
288
struct
sockaddr
*,
int
,
struct
sockaddr
*,
struct
rtentry
**);
289
int
rtrequest(
int
,
struct
sockaddr
*,
290
struct
sockaddr
*,
struct
sockaddr
*,
int
,
struct
rtentry
**);
291
#endif
292
293
#endif
rt_msghdr
Definition:
route.h:175
ortentry
Definition:
route.h:124
radix_node_head
Definition:
radix.h:106
proc
Definition:
proc.h:5
route
Definition:
route.h:51
radix_node
Definition:
radix.h:41
rt_addrinfo
Definition:
route.h:251
rtstat
Definition:
route.h:165
sockaddr
Definition:
socket.h:180
ifnet
Definition:
if_var.h:99
ifaddr
Definition:
if_var.h:211
mbuf
Definition:
mbuf.h:103
rt_metrics_lite
Definition:
route.h:60
radix.h
socket.h
rtentry
Definition:
route.h:104
rt_metrics
Definition:
route.h:66
Generated by
1.8.13