1 /* 2 * Copyright (c) 1983 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 * @(#)table.h 5.1 (Berkeley) 06/04/85 7 */ 8 9 /* 10 * Routing table management daemon. 11 */ 12 13 /* 14 * Routing table structure; differs a bit from kernel tables. 15 * 16 * Note: the union below must agree in the first 4 members 17 * so the ioctl's will work. 18 */ 19 struct rthash { 20 struct rt_entry *rt_forw; 21 struct rt_entry *rt_back; 22 }; 23 24 struct rt_entry { 25 struct rt_entry *rt_forw; 26 struct rt_entry *rt_back; 27 union { 28 struct rtentry rtu_rt; 29 struct { 30 u_long rtu_hash; 31 struct sockaddr rtu_dst; 32 struct sockaddr rtu_router; 33 short rtu_flags; 34 short rtu_state; 35 int rtu_timer; 36 int rtu_metric; 37 struct interface *rtu_ifp; 38 } rtu_entry; 39 } rt_rtu; 40 }; 41 42 #define rt_rt rt_rtu.rtu_rt /* pass to ioctl */ 43 #define rt_hash rt_rtu.rtu_entry.rtu_hash /* for net or host */ 44 #define rt_dst rt_rtu.rtu_entry.rtu_dst /* match value */ 45 #define rt_router rt_rtu.rtu_entry.rtu_router /* who to forward to */ 46 #define rt_flags rt_rtu.rtu_entry.rtu_flags /* kernel flags */ 47 #define rt_timer rt_rtu.rtu_entry.rtu_timer /* for invalidation */ 48 #define rt_state rt_rtu.rtu_entry.rtu_state /* see below */ 49 #define rt_metric rt_rtu.rtu_entry.rtu_metric /* cost of route */ 50 #define rt_ifp rt_rtu.rtu_entry.rtu_ifp /* interface to take */ 51 52 #define ROUTEHASHSIZ 32 /* must be a power of 2 */ 53 #define ROUTEHASHMASK (ROUTEHASHSIZ - 1) 54 55 /* 56 * "State" of routing table entry. 57 */ 58 #define RTS_CHANGED 0x1 /* route has been altered recently */ 59 #define RTS_PASSIVE IFF_PASSIVE /* don't time out route */ 60 #define RTS_INTERFACE IFF_INTERFACE /* route is for network interface */ 61 #define RTS_REMOTE IFF_REMOTE /* route is for ``remote'' entity */ 62 63 struct rthash nethash[ROUTEHASHSIZ]; 64 struct rthash hosthash[ROUTEHASHSIZ]; 65 struct rt_entry *rtlookup(); 66 struct rt_entry *rtfind(); 67