add RELOAD flag to reload filesystem after fsck; FORCE flag now
[unix-history] / usr / src / sys / net / route.h
CommitLineData
cb1c44c2 1/*
1810611d 2 * Copyright (c) 1980, 1986 Regents of the University of California.
5b519e94 3 * All rights reserved.
cb1c44c2 4 *
dbf0c423 5 * %sccs.include.redist.c%
5b519e94 6 *
5548a02f 7 * @(#)route.h 7.17 (Berkeley) %G%
cb1c44c2 8 */
6c0a063b
SL
9
10/*
a9f3e174
SL
11 * Kernel resident routing tables.
12 *
a839f328
MK
13 * The routing tables are initialized when interface addresses
14 * are set by making entries for all directly connected interfaces.
6c0a063b 15 */
6c0a063b 16
a13c006d
BJ
17/*
18 * A route consists of a destination address and a reference
19 * to a routing entry. These are often held by protocols
20 * in their control blocks, e.g. inpcb.
21 */
6c0a063b
SL
22struct route {
23 struct rtentry *ro_rt;
24 struct sockaddr ro_dst;
6c0a063b
SL
25};
26
d281dcc1
KS
27/*
28 * These numbers are used by reliable protocols for determining
29 * retransmission behavior and are included in the routing structure.
30 */
31struct rt_metrics {
32 u_long rmx_locks; /* Kernel must leave these values alone */
33 u_long rmx_mtu; /* MTU for this path */
34 u_long rmx_hopcount; /* max hops expected */
35 u_long rmx_expire; /* lifetime for route, e.g. redirect */
36 u_long rmx_recvpipe; /* inbound delay-bandwith product */
37 u_long rmx_sendpipe; /* outbound delay-bandwith product */
38 u_long rmx_ssthresh; /* outbound gateway buffer limit */
39 u_long rmx_rtt; /* estimated round trip time */
40 u_long rmx_rttvar; /* estimated rtt variance */
9ffee3f5 41 u_long rmx_pksent; /* packets sent using this route */
d281dcc1
KS
42};
43
ae5e8a71
MK
44/*
45 * rmx_rtt and rmx_rttvar are stored as microseconds;
46 * RTTTOPRHZ(rtt) converts to a value suitable for use
47 * by a protocol slowtimo counter.
48 */
49#define RTM_RTTUNIT 1000000 /* units for rtt, rttvar, as units per sec */
50#define RTTTOPRHZ(r) ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
51
6c0a063b 52/*
a13c006d
BJ
53 * We distinguish between routes to hosts and routes to networks,
54 * preferring the former if available. For each route we infer
55 * the interface to use from the gateway address supplied when
56 * the route was entered. Routes that forward packets through
57 * gateways are marked so that the output routines know to address the
58 * gateway rather than the ultimate destination.
6c0a063b 59 */
aaf06fbd 60#ifndef RNF_NORMAL
5548a02f 61#include <net/radix.h>
aaf06fbd 62#endif
a13c006d 63struct rtentry {
573d82c4
KS
64 struct radix_node rt_nodes[2]; /* tree glue, and other values */
65#define rt_key(r) ((struct sockaddr *)((r)->rt_nodes->rn_key))
66#define rt_mask(r) ((struct sockaddr *)((r)->rt_nodes->rn_mask))
67 struct sockaddr *rt_gateway; /* value */
68 short rt_flags; /* up/down?, host/net */
69 short rt_refcnt; /* # held references */
70 u_long rt_use; /* raw # packets forwarded */
71 struct ifnet *rt_ifp; /* the answer: interface to use */
b72a6efb 72 struct ifaddr *rt_ifa; /* the answer: interface to use */
c050ffea
KS
73 struct sockaddr *rt_genmask; /* for generation of cloned routes */
74 caddr_t rt_llinfo; /* pointer to link level info cache */
d281dcc1 75 struct rt_metrics rt_rmx; /* metrics used by rx'ing protocols */
92e18d47 76 struct rtentry *rt_gwroute; /* implied entry for gatewayed routes */
573d82c4
KS
77};
78
79/*
80 * Following structure necessary for 4.3 compatibility;
81 * We should eventually move it to a compat file.
82 */
83struct ortentry {
a13c006d
BJ
84 u_long rt_hash; /* to speed lookups */
85 struct sockaddr rt_dst; /* key */
86 struct sockaddr rt_gateway; /* value */
87 short rt_flags; /* up/down?, host/net */
88 short rt_refcnt; /* # held references */
89 u_long rt_use; /* raw # packets forwarded */
90 struct ifnet *rt_ifp; /* the answer: interface to use */
91};
a13c006d 92
ee787340 93#define RTF_UP 0x1 /* route useable */
a13c006d 94#define RTF_GATEWAY 0x2 /* destination is a gateway */
fc74f0c9 95#define RTF_HOST 0x4 /* host entry (net otherwise) */
b4cd1ddd 96#define RTF_REJECT 0x8 /* host or net unreachable */
a839f328 97#define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */
31150b52 98#define RTF_MODIFIED 0x20 /* modified dynamically (by redirect) */
573d82c4
KS
99#define RTF_DONE 0x40 /* message confirmed */
100#define RTF_MASK 0x80 /* subnet mask present */
c050ffea
KS
101#define RTF_CLONING 0x100 /* generate new routes on use */
102#define RTF_XRESOLVE 0x200 /* external daemon resolves name */
0492b696 103#define RTF_LLINFO 0x400 /* generated by ARP or ESIS */
1cc2aa92 104#define RTF_STATIC 0x800 /* manually added */
aaf06fbd
KS
105#define RTF_PROTO2 0x4000 /* protocol specific routing flag */
106#define RTF_PROTO1 0x8000 /* protocol specific routing flag */
573d82c4 107
6c0a063b 108
a9ea8834
SL
109/*
110 * Routing statistics.
111 */
112struct rtstat {
113 short rts_badredirect; /* bogus redirect calls */
114 short rts_dynamic; /* routes created by redirects */
115 short rts_newgateway; /* routes modified by redirects */
116 short rts_unreach; /* lookups which failed */
117 short rts_wildcard; /* lookups satisfied by a wildcard */
118};
573d82c4
KS
119/*
120 * Structures for routing messages.
121 */
573d82c4
KS
122struct rt_msghdr {
123 u_short rtm_msglen; /* to skip over non-understood messages */
124 u_char rtm_version; /* future binary compatability */
125 u_char rtm_type; /* message type */
d281dcc1 126 u_short rtm_index; /* index for associated ifp */
9ffee3f5 127 int rtm_flags; /* flags, incl. kern & message, e.g. DONE */
d281dcc1 128 int rtm_addrs; /* bitmask identifying sockaddrs in msg */
9ffee3f5 129 pid_t rtm_pid; /* identify sender */
573d82c4
KS
130 int rtm_seq; /* for sender to identify action */
131 int rtm_errno; /* why failed */
d281dcc1
KS
132 int rtm_use; /* from rtentry */
133 u_long rtm_inits; /* which metrics we are initializing */
134 struct rt_metrics rtm_rmx; /* metrics themselves */
573d82c4
KS
135};
136
9ffee3f5 137#define RTM_VERSION 3 /* Up the ante and ignore older versions */
573d82c4
KS
138
139#define RTM_ADD 0x1 /* Add Route */
140#define RTM_DELETE 0x2 /* Delete Route */
141#define RTM_CHANGE 0x3 /* Change Metrics or flags */
142#define RTM_GET 0x4 /* Report Metrics */
143#define RTM_LOSING 0x5 /* Kernel Suspects Partitioning */
144#define RTM_REDIRECT 0x6 /* Told to use different route */
145#define RTM_MISS 0x7 /* Lookup failed on this address */
146#define RTM_LOCK 0x8 /* fix specified metrics */
147#define RTM_OLDADD 0x9 /* caused by SIOCADDRT */
148#define RTM_OLDDEL 0xa /* caused by SIOCDELRT */
c050ffea 149#define RTM_RESOLVE 0xb /* req to resolve dst to LL addr */
9ffee3f5
KS
150#define RTM_NEWADDR 0xc /* address being added to iface */
151#define RTM_DELADDR 0xd /* address being removed from iface */
152#define RTM_IFINFO 0xe /* iface going up/down etc. */
573d82c4
KS
153
154#define RTV_MTU 0x1 /* init or lock _mtu */
155#define RTV_HOPCOUNT 0x2 /* init or lock _hopcount */
156#define RTV_EXPIRE 0x4 /* init or lock _hopcount */
157#define RTV_RPIPE 0x8 /* init or lock _recvpipe */
158#define RTV_SPIPE 0x10 /* init or lock _sendpipe */
159#define RTV_SSTHRESH 0x20 /* init or lock _ssthresh */
160#define RTV_RTT 0x40 /* init or lock _rtt */
161#define RTV_RTTVAR 0x80 /* init or lock _rttvar */
162
9ffee3f5
KS
163/*
164 * Bitmask values for rtm_addr.
165 */
d281dcc1
KS
166#define RTA_DST 0x1 /* destination sockaddr present */
167#define RTA_GATEWAY 0x2 /* gateway sockaddr present */
168#define RTA_NETMASK 0x4 /* netmask sockaddr present */
169#define RTA_GENMASK 0x8 /* cloning mask sockaddr present */
170#define RTA_IFP 0x10 /* interface name sockaddr present */
171#define RTA_IFA 0x20 /* interface addr sockaddr present */
172#define RTA_AUTHOR 0x40 /* sockaddr for author of redirect */
9ffee3f5 173#define RTA_BRD 0x80 /* for NEWADDR, broadcast or p-p dest addr */
d281dcc1 174
9ffee3f5
KS
175/*
176 * Index offsets for sockaddr array for alternate internal encoding.
177 */
178#define RTAX_DST 0 /* destination sockaddr present */
179#define RTAX_GATEWAY 1 /* gateway sockaddr present */
180#define RTAX_NETMASK 2 /* netmask sockaddr present */
181#define RTAX_GENMASK 3 /* cloning mask sockaddr present */
182#define RTAX_IFP 4 /* interface name sockaddr present */
183#define RTAX_IFA 5 /* interface addr sockaddr present */
184#define RTAX_AUTHOR 6 /* sockaddr for author of redirect */
185#define RTAX_BRD 7 /* for NEWADDR, broadcast or p-p dest addr */
186#define RTAX_MAX 8 /* size of array to allocate */
187
188struct rt_addrinfo {
189 int rti_addrs;
190 struct sockaddr *rti_info[RTAX_MAX];
191};
192
193struct route_cb {
194 int ip_count;
195 int ns_count;
196 int iso_count;
197 int any_count;
198};
a9ea8834
SL
199
200#ifdef KERNEL
a9f3e174 201#define RTFREE(rt) \
c050ffea 202 if ((rt)->rt_refcnt <= 1) \
a9f3e174
SL
203 rtfree(rt); \
204 else \
205 (rt)->rt_refcnt--;
a9ea8834 206
9ffee3f5 207struct route_cb route_cb;
a9ea8834 208struct rtstat rtstat;
573d82c4 209struct rtentry *rtalloc1();
1cc2aa92 210struct radix_node_head *rt_tables[AF_MAX+1];
a9ea8834 211#endif