|
|
1.1 root 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) 6/4/86
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: */
21: struct 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: */
34: struct 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: */
52: struct 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
77: struct mbuf *rthost[RTHASHSIZ];
78: struct mbuf *rtnet[RTHASHSIZ];
79: struct rtstat rtstat;
80: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.