mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-12-22 14:30:29 +00:00
96 lines
2.9 KiB
C
96 lines
2.9 KiB
C
|
/*
|
||
|
* Mach Operating System
|
||
|
* Copyright (c) 1987 Carnegie-Mellon University
|
||
|
* All rights reserved. The CMU software License Agreement specifies
|
||
|
* the terms and conditions for use and redistribution.
|
||
|
*/
|
||
|
/*
|
||
|
* Copyright (c) 1980, 1986 Regents of the University of California.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms are permitted
|
||
|
* provided that this notice is preserved and that due credit is given
|
||
|
* to the University of California at Berkeley. The name of the University
|
||
|
* may not be used to endorse or promote products derived from this
|
||
|
* software without specific prior written permission. This software
|
||
|
* is provided ``as is'' without express or implied warranty.
|
||
|
*
|
||
|
* @(#)route.h 7.3 (Berkeley) 12/30/87
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Kernel resident routing tables.
|
||
|
*
|
||
|
* The routing tables are initialized when interface addresses
|
||
|
* are set by making entries for all directly connected interfaces.
|
||
|
*/
|
||
|
|
||
|
#if 0
|
||
|
/*
|
||
|
* A route consists of a destination address and a reference
|
||
|
* to a routing entry. These are often held by protocols
|
||
|
* in their control blocks, e.g. inpcb.
|
||
|
*/
|
||
|
struct route {
|
||
|
struct rtentry *ro_rt;
|
||
|
struct sockaddr ro_dst;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* We distinguish between routes to hosts and routes to networks,
|
||
|
* preferring the former if available. For each route we infer
|
||
|
* the interface to use from the gateway address supplied when
|
||
|
* the route was entered. Routes that forward packets through
|
||
|
* gateways are marked so that the output routines know to address the
|
||
|
* gateway rather than the ultimate destination.
|
||
|
*/
|
||
|
struct rtentry {
|
||
|
u_long rt_hash; /* to speed lookups */
|
||
|
struct sockaddr rt_dst; /* key */
|
||
|
struct sockaddr rt_gateway; /* value */
|
||
|
short rt_flags; /* up/down?, host/net */
|
||
|
short rt_refcnt; /* # held references */
|
||
|
u_long rt_use; /* raw # packets forwarded */
|
||
|
struct ifnet *rt_ifp; /* the answer: interface to use */
|
||
|
};
|
||
|
|
||
|
#define RTF_UP 0x1 /* route useable */
|
||
|
#define RTF_GATEWAY 0x2 /* destination is a gateway */
|
||
|
#define RTF_HOST 0x4 /* host entry (net otherwise) */
|
||
|
#define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */
|
||
|
#define RTF_MODIFIED 0x20 /* modified dynamically (by redirect) */
|
||
|
|
||
|
/*
|
||
|
* Routing statistics.
|
||
|
*/
|
||
|
struct rtstat {
|
||
|
short rts_badredirect; /* bogus redirect calls */
|
||
|
short rts_dynamic; /* routes created by redirects */
|
||
|
short rts_newgateway; /* routes modified by redirects */
|
||
|
short rts_unreach; /* lookups which failed */
|
||
|
short rts_wildcard; /* lookups satisfied by a wildcard */
|
||
|
};
|
||
|
|
||
|
#ifdef KERNEL
|
||
|
#define RTFREE(rt) \
|
||
|
if ((rt)->rt_refcnt == 1) \
|
||
|
rtfree(rt); \
|
||
|
else \
|
||
|
(rt)->rt_refcnt--;
|
||
|
|
||
|
#ifdef GATEWAY
|
||
|
#define RTHASHSIZ 64
|
||
|
#else
|
||
|
#define RTHASHSIZ 8
|
||
|
#endif
|
||
|
#if (RTHASHSIZ & (RTHASHSIZ - 1)) == 0
|
||
|
#define RTHASHMOD(h) ((h) & (RTHASHSIZ - 1))
|
||
|
#else
|
||
|
#define RTHASHMOD(h) ((h) % RTHASHSIZ)
|
||
|
#endif
|
||
|
struct mbuf *rthost[RTHASHSIZ];
|
||
|
struct mbuf *rtnet[RTHASHSIZ];
|
||
|
struct rtstat rtstat;
|
||
|
#endif
|