MCLALLOC must be called at splimp
[unix-history] / usr / src / sys / net / route.h
... / ...
CommitLineData
1/*
2 * Copyright (c) 1980, 1986 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
6 * @(#)route.h 7.1 (Berkeley) %G%
7 */
8
9/*
10 * Kernel resident routing tables.
11 *
12 * The routing tables are initialized when interface addresses
13 * are set by making entries for all directly connected interfaces.
14 */
15
16/*
17 * A route consists of a destination address and a reference
18 * to a routing entry. These are often held by protocols
19 * in their control blocks, e.g. inpcb.
20 */
21struct route {
22 struct rtentry *ro_rt;
23 struct sockaddr ro_dst;
24};
25
26/*
27 * We distinguish between routes to hosts and routes to networks,
28 * preferring the former if available. For each route we infer
29 * the interface to use from the gateway address supplied when
30 * the route was entered. Routes that forward packets through
31 * gateways are marked so that the output routines know to address the
32 * gateway rather than the ultimate destination.
33 */
34struct rtentry {
35 u_long rt_hash; /* to speed lookups */
36 struct sockaddr rt_dst; /* key */
37 struct sockaddr rt_gateway; /* value */
38 short rt_flags; /* up/down?, host/net */
39 short rt_refcnt; /* # held references */
40 u_long rt_use; /* raw # packets forwarded */
41 struct ifnet *rt_ifp; /* the answer: interface to use */
42};
43
44#define RTF_UP 0x1 /* route useable */
45#define RTF_GATEWAY 0x2 /* destination is a gateway */
46#define RTF_HOST 0x4 /* host entry (net otherwise) */
47#define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */
48
49/*
50 * Routing statistics.
51 */
52struct rtstat {
53 short rts_badredirect; /* bogus redirect calls */
54 short rts_dynamic; /* routes created by redirects */
55 short rts_newgateway; /* routes modified by redirects */
56 short rts_unreach; /* lookups which failed */
57 short rts_wildcard; /* lookups satisfied by a wildcard */
58};
59
60#ifdef KERNEL
61#define RTFREE(rt) \
62 if ((rt)->rt_refcnt == 1) \
63 rtfree(rt); \
64 else \
65 (rt)->rt_refcnt--;
66
67#ifdef GATEWAY
68#define RTHASHSIZ 64
69#else
70#define RTHASHSIZ 8
71#endif
72#if (RTHASHSIZ & (RTHASHSIZ - 1)) == 0
73#define RTHASHMOD(h) ((h) & (RTHASHSIZ - 1))
74#else
75#define RTHASHMOD(h) ((h) % RTHASHSIZ)
76#endif
77struct mbuf *rthost[RTHASHSIZ];
78struct mbuf *rtnet[RTHASHSIZ];
79struct rtstat rtstat;
80#endif