home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / detk45he.zip / net / route.h < prev   
Text File  |  1999-05-11  |  11KB  |  231 lines

  1. /*
  2.  * Copyright (c) 1980, 1986, 1993
  3.  *      The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *      This product includes software developed by the University of
  16.  *      California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *      @(#)route.h     8.5 (Berkeley) 2/8/95
  34.  */
  35.  
  36. /*
  37.  * Kernel resident routing tables.
  38.  *
  39.  * The routing tables are initialized when interface addresses
  40.  * are set by making entries for all directly connected interfaces.
  41.  */
  42. #ifndef _NET_ROUTE_H_
  43. #define _NET_ROUTE_H_
  44.  
  45. #ifdef TCPV40HDRS
  46. #include <stack16\net\route.h>
  47. #else
  48. /*
  49.  * These numbers are used by reliable protocols for determining
  50.  * retransmission behavior and are included in the routing structure.
  51.  */
  52. struct rt_metrics {
  53.         u_long  rmx_locks;      /* Kernel must leave these values alone */
  54.         u_long  rmx_mtu;        /* MTU for this path */
  55.         u_long  rmx_hopcount;   /* max hops expected */
  56.         u_long  rmx_expire;     /* lifetime for route, e.g. redirect */
  57.         u_long  rmx_recvpipe;   /* inbound delay-bandwith product */
  58.         u_long  rmx_sendpipe;   /* outbound delay-bandwith product */
  59.         u_long  rmx_ssthresh;   /* outbound gateway buffer limit */
  60.         u_long  rmx_rtt;        /* estimated round trip time */
  61.         u_long  rmx_rttvar;     /* estimated rtt variance */
  62.         u_long  rmx_pksent;     /* packets sent using this route */
  63.         u_long  rmx_filler[4];  /* will be used for T/TCP later */
  64. };
  65.  
  66. /*
  67.  * rmx_rtt and rmx_rttvar are stored as microseconds;
  68.  * RTTTOPRHZ(rtt) converts to a value suitable for use
  69.  * by a protocol slowtimo counter.
  70.  */
  71. #define RTM_RTTUNIT     1000000 /* units for rtt, rttvar, as units per sec */
  72. #define RTTTOPRHZ(r)    ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
  73.  
  74. /*
  75.  * Following structure necessary for 4.3 compatibility;
  76.  * We should eventually move it to a compat file.
  77.  */
  78. #pragma pack(1)
  79. struct ortentry {
  80.         u_long  rt_hash;                /* to speed lookups */
  81.         struct  sockaddr rt_dst;        /* key */
  82.         struct  sockaddr rt_gateway;    /* value */
  83.         short   rt_flags;               /* up/down?, host/net */
  84.         short   rt_refcnt;              /* # held references */
  85.         u_long  rt_use;                 /* raw # packets forwarded */
  86.         void    *rt_ifp;                /* the answer: interface to use */
  87.         long  metric1;                  /* routing metrics for SNMP and Co */
  88.         long  metric2;
  89.         long  metric3;
  90.         long  metric4;
  91. };
  92. #pragma pack()
  93.  
  94. #define RTENTRY_COUNT 512
  95. #pragma pack(1)
  96. struct rtentries {
  97.        short hostcount;
  98.        short netcount;
  99.        struct ortentry rttable[RTENTRY_COUNT];
  100. };
  101. #pragma pack()
  102.  
  103.  
  104. #define RTF_UP          0x1             /* route usable */
  105. #define RTF_GATEWAY     0x2             /* destination is a gateway */
  106. #define RTF_HOST        0x4             /* host entry (net otherwise) */
  107. #define RTF_REJECT      0x8             /* host or net unreachable */
  108. #define RTF_DYNAMIC     0x10            /* created dynamically (by redirect) */
  109. #define RTF_MODIFIED    0x20            /* modified dynamically (by redirect) */
  110. #define RTF_DONE        0x40            /* message confirmed */
  111. #define RTF_MASK        0x80            /* subnet mask present */
  112. #define RTF_CLONING     0x100           /* generate new routes on use */
  113. #define RTF_XRESOLVE    0x200           /* external daemon resolves name */
  114. #define RTF_LLINFO      0x400           /* generated by ARP or ESIS */
  115. #define RTF_STATIC      0x800           /* manually added */
  116. #define RTF_BLACKHOLE   0x1000          /* just discard pkts(during updates) */
  117. #define RTF_LLTEMP      0x2000          /* manually added temporary arp entry */
  118. #define RTF_PROTO2      0x4000          /* protocol specific routing flag */
  119. #define RTF_PROTO1      0x8000          /* protocol specific routing flag */
  120. #define RTF_PRCLONING   0x10000         /* protocol requires cloning */
  121. #define RTF_WASCLONED   0x20000         /* route generated through cloning */
  122. #define RTF_PROTO3      0x40000         /* protocol specific routing flag */
  123. #define RTF_CHAINDELETE 0x80000         /* chain is being deleted (internal) */
  124. #define RTF_PINNED      0x100000        /* future use */
  125. #define RTF_TUNNEL      0x200000        /* tunnelling bit */
  126. #define RTF_CRYPT       0x400000        /* encrypting tunnel */
  127. #define RTF_AUTH        0x800000        /* authenticating tunnel */
  128.  
  129.  
  130. /*
  131.  * Routing statistics.
  132.  */
  133. struct  rtstat {
  134.         short   rts_badredirect;        /* bogus redirect calls */
  135.         short   rts_dynamic;            /* routes created by redirects */
  136.         short   rts_newgateway;         /* routes modified by redirects */
  137.         short   rts_unreach;            /* lookups which failed */
  138.         short   rts_wildcard;           /* lookups satisfied by a wildcard */
  139. };
  140. /*
  141.  * Structures for routing messages.
  142.  */
  143. #pragma pack(1)
  144. struct rt_msghdr {
  145. #define IFNAMSIZ        16
  146.         u_short rtm_msglen;     /* to skip over non-understood messages */
  147.         u_char  rtm_version;    /* future binary compatibility */
  148.         u_char  rtm_type;       /* message type */
  149.         u_short rtm_index;      /* index for associated ifp */
  150.         short   rtm_unit;       /* new field for subnet routing */
  151.         int     rtm_flags;      /* flags, incl. kern & message, e.g. DONE */
  152.         int     rtm_addrs;      /* bitmask identifying sockaddrs in msg */
  153.         pid_t   rtm_pid;        /* identify sender */
  154.         int     rtm_seq;        /* for sender to identify action */
  155.         int     rtm_errno;      /* why failed */
  156.         int     rtm_use;        /* from rtentry */
  157.         u_long  rtm_inits;      /* which metrics we are initializing */
  158.         u_long  rtm_netmask;    /* new field for subnet routing */
  159.         char    rtm_name[IFNAMSIZ]; /* new field for subnet routing */
  160.         struct  rt_metrics rtm_rmx; /* metrics themselves */
  161. };
  162. #pragma pack()
  163.  
  164. #define RTM_VERSION     4       /* Up the ante and ignore older versions */
  165.  
  166. #define RTM_ADD         0x1     /* Add Route */
  167. #define RTM_DELETE      0x2     /* Delete Route */
  168. #define RTM_CHANGE      0x3     /* Change Metrics or flags */
  169. #define RTM_GET         0x4     /* Report Metrics */
  170. #define RTM_LOSING      0x5     /* Kernel Suspects Partitioning */
  171. #define RTM_REDIRECT    0x6     /* Told to use different route */
  172. #define RTM_MISS        0x7     /* Lookup failed on this address */
  173. #define RTM_LOCK        0x8     /* fix specified metrics */
  174. #define RTM_OLDADD      0x9     /* caused by SIOCADDRT */
  175. #define RTM_OLDDEL      0xa     /* caused by SIOCDELRT */
  176. #define RTM_RESOLVE     0xb     /* req to resolve dst to LL addr */
  177. #define RTM_NEWADDR     0xc     /* address being added to iface */
  178. #define RTM_DELADDR     0xd     /* address being removed from iface */
  179. #define RTM_IFINFO      0xe     /* iface going up/down etc. */
  180.  
  181. #define RTV_MTU         0x1     /* init or lock _mtu */
  182. #define RTV_HOPCOUNT    0x2     /* init or lock _hopcount */
  183. #define RTV_EXPIRE      0x4     /* init or lock _hopcount */
  184. #define RTV_RPIPE       0x8     /* init or lock _recvpipe */
  185. #define RTV_SPIPE       0x10    /* init or lock _sendpipe */
  186. #define RTV_SSTHRESH    0x20    /* init or lock _ssthresh */
  187. #define RTV_RTT         0x40    /* init or lock _rtt */
  188. #define RTV_RTTVAR      0x80    /* init or lock _rttvar */
  189.  
  190. /*
  191.  * Bitmask values for rtm_addr.
  192.  */
  193. #define RTA_DST         0x1     /* destination sockaddr present */
  194. #define RTA_GATEWAY     0x2     /* gateway sockaddr present */
  195. #define RTA_NETMASK     0x4     /* netmask sockaddr present */
  196. #define RTA_GENMASK     0x8     /* cloning mask sockaddr present */
  197. #define RTA_IFP         0x10    /* interface name sockaddr present */
  198. #define RTA_IFA         0x20    /* interface addr sockaddr present */
  199. #define RTA_AUTHOR      0x40    /* sockaddr for author of redirect */
  200. #define RTA_BRD         0x80    /* for NEWADDR, broadcast or p-p dest addr */
  201.  
  202. /*
  203.  * Index offsets for sockaddr array for alternate internal encoding.
  204.  */
  205. #define RTAX_DST        0       /* destination sockaddr present */
  206. #define RTAX_GATEWAY    1       /* gateway sockaddr present */
  207. #define RTAX_NETMASK    2       /* netmask sockaddr present */
  208. #define RTAX_GENMASK    3       /* cloning mask sockaddr present */
  209. #define RTAX_IFP        4       /* interface name sockaddr present */
  210. #define RTAX_IFA        5       /* interface addr sockaddr present */
  211. #define RTAX_AUTHOR     6       /* sockaddr for author of redirect */
  212. #define RTAX_BRD        7       /* for NEWADDR, broadcast or p-p dest addr */
  213. #define RTAX_MAX        8       /* size of array to allocate */
  214.  
  215. struct rt_addrinfo {
  216.         int     rti_addrs;
  217.         struct  sockaddr *rti_info[RTAX_MAX];
  218. };
  219.  
  220. struct route_cb {
  221.         int     ip_count;
  222.         int     ns_count;
  223.         int     iso_count;
  224.         int     any_count;
  225. };
  226. #ifdef KERNEL
  227. #include <private/route.h>
  228. #endif
  229. #endif /* TCPV40HDRS */
  230. #endif /* _NET_ROUTE_H_ */
  231.