BSD 4_3_Tahoe release
[unix-history] / usr / src / etc / routed / table.h
/*
* Copyright (c) 1983 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.
*
* @(#)table.h 5.5 (Berkeley) 2/16/88
*/
/*
* Routing table management daemon.
*/
/*
* Routing table structure; differs a bit from kernel tables.
*
* Note: the union below must agree in the first 4 members
* so the ioctl's will work.
*/
struct rthash {
struct rt_entry *rt_forw;
struct rt_entry *rt_back;
};
struct rt_entry {
struct rt_entry *rt_forw;
struct rt_entry *rt_back;
union {
struct rtentry rtu_rt;
struct {
u_long rtu_hash;
struct sockaddr rtu_dst;
struct sockaddr rtu_router;
short rtu_flags;
short rtu_state;
int rtu_timer;
int rtu_metric;
int rtu_ifmetric;
struct interface *rtu_ifp;
} rtu_entry;
} rt_rtu;
};
#define rt_rt rt_rtu.rtu_rt /* pass to ioctl */
#define rt_hash rt_rtu.rtu_entry.rtu_hash /* for net or host */
#define rt_dst rt_rtu.rtu_entry.rtu_dst /* match value */
#define rt_router rt_rtu.rtu_entry.rtu_router /* who to forward to */
#define rt_flags rt_rtu.rtu_entry.rtu_flags /* kernel flags */
#define rt_timer rt_rtu.rtu_entry.rtu_timer /* for invalidation */
#define rt_state rt_rtu.rtu_entry.rtu_state /* see below */
#define rt_metric rt_rtu.rtu_entry.rtu_metric /* cost of route */
#define rt_ifmetric rt_rtu.rtu_entry.rtu_ifmetric /* cost of route if */
#define rt_ifp rt_rtu.rtu_entry.rtu_ifp /* interface to take */
#define ROUTEHASHSIZ 32 /* must be a power of 2 */
#define ROUTEHASHMASK (ROUTEHASHSIZ - 1)
/*
* "State" of routing table entry.
*/
#define RTS_CHANGED 0x1 /* route has been altered recently */
#define RTS_EXTERNAL 0x2 /* extern info, not installed or sent */
#define RTS_INTERNAL 0x4 /* internal route, not installed */
#define RTS_PASSIVE IFF_PASSIVE /* don't time out route */
#define RTS_INTERFACE IFF_INTERFACE /* route is for network interface */
#define RTS_REMOTE IFF_REMOTE /* route is for ``remote'' entity */
#define RTS_SUBNET IFF_SUBNET /* route is for network subnet */
/*
* Flags are same as kernel, with this addition for af_rtflags:
*/
#define RTF_SUBNET 0x8000 /* pseudo: route to subnet */
struct rthash nethash[ROUTEHASHSIZ];
struct rthash hosthash[ROUTEHASHSIZ];
struct rt_entry *rtlookup();
struct rt_entry *rtfind();