X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/f6311fb6ab21020b5f64fc0f4582a0fcf4f4c9a6..5b519e941140a2be657d68865fade9f5aa577b79:/usr/src/sys/net/route.h diff --git a/usr/src/sys/net/route.h b/usr/src/sys/net/route.h index 54fdb54846..7d1e083b14 100644 --- a/usr/src/sys/net/route.h +++ b/usr/src/sys/net/route.h @@ -1,44 +1,87 @@ -/* route.h 4.5 82/03/30 */ - /* - * Structure of kernel resident routing - * data base. Assumption is user routing - * daemon maintains this data base based - * on routing information it gleans from - * gateway protocols it listens to (e.g. GGP). + * 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. * - * TO ADD: - * more statistics -- smooth usage figures + * @(#)route.h 7.3 (Berkeley) %G% */ -struct rtentry { - u_long rt_hash[2]; /* [0] for net, [1] for host */ - struct sockaddr rt_dst; /* match value */ - struct sockaddr rt_gateway; /* who to forward to */ - short rt_flags; /* see below */ - short rt_refcnt; /* # held references */ - u_long rt_use; /* raw # packets forwarded */ - struct ifnet *rt_ifp; /* interface to use */ -}; +/* + * Kernel resident routing tables. + * + * The routing tables are initialized when interface addresses + * are set by making entries for all directly connected interfaces. + */ + +/* + * 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; - caddr_t ro_pcb; /* back pointer? */ }; /* - * Flags and host/network status. + * 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_DIRECT 0x2 /* destination is a neighbor */ +#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) */ -#ifdef KERNEL /* - * Lookup are hashed by a key. Each hash bucket - * consists of a linked list of mbuf's - * containing routing entries. Dead entries are - * reclaimed along with mbufs. + * Routing statistics. */ -#define RTHASHSIZ 16 -struct mbuf *routehash[RTHASHSIZ]; +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