restore sccs keywords
[unix-history] / usr / src / sys / net / route.h
index 6d369f8..3b78054 100644 (file)
@@ -2,19 +2,9 @@
  * Copyright (c) 1980, 1986 Regents of the University of California.
  * All rights reserved.
  *
  * 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 the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, 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'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * %sccs.include.redist.c%
  *
  *
- *     @(#)route.h     7.7 (Berkeley) %G%
+ *     @(#)route.h     7.15 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -34,6 +24,30 @@ struct route {
        struct  sockaddr ro_dst;
 };
 
        struct  sockaddr ro_dst;
 };
 
+/*
+ * These numbers are used by reliable protocols for determining
+ * retransmission behavior and are included in the routing structure.
+ */
+struct rt_metrics {
+       u_long  rmx_locks;      /* Kernel must leave these values alone */
+       u_long  rmx_mtu;        /* MTU for this path */
+       u_long  rmx_hopcount;   /* max hops expected */
+       u_long  rmx_expire;     /* lifetime for route, e.g. redirect */
+       u_long  rmx_recvpipe;   /* inbound delay-bandwith product */
+       u_long  rmx_sendpipe;   /* outbound delay-bandwith product */
+       u_long  rmx_ssthresh;   /* outbound gateway buffer limit */
+       u_long  rmx_rtt;        /* estimated round trip time */
+       u_long  rmx_rttvar;     /* estimated rtt variance */
+};
+
+/*
+ * rmx_rtt and rmx_rttvar are stored as microseconds;
+ * RTTTOPRHZ(rtt) converts to a value suitable for use
+ * by a protocol slowtimo counter.
+ */
+#define        RTM_RTTUNIT     1000000 /* units for rtt, rttvar, as units per sec */
+#define        RTTTOPRHZ(r)    ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
+
 /*
  * We distinguish between routes to hosts and routes to networks,
  * preferring the former if available.  For each route we infer
 /*
  * We distinguish between routes to hosts and routes to networks,
  * preferring the former if available.  For each route we infer
@@ -42,7 +56,9 @@ struct route {
  * gateways are marked so that the output routines know to address the
  * gateway rather than the ultimate destination.
  */
  * gateways are marked so that the output routines know to address the
  * gateway rather than the ultimate destination.
  */
+#ifndef RNF_NORMAL
 #include "radix.h"
 #include "radix.h"
+#endif
 struct rtentry {
        struct  radix_node rt_nodes[2]; /* tree glue, and other values */
 #define        rt_key(r)       ((struct sockaddr *)((r)->rt_nodes->rn_key))
 struct rtentry {
        struct  radix_node rt_nodes[2]; /* tree glue, and other values */
 #define        rt_key(r)       ((struct sockaddr *)((r)->rt_nodes->rn_key))
@@ -55,6 +71,8 @@ struct rtentry {
        struct  ifaddr *rt_ifa;         /* the answer: interface to use */
        struct  sockaddr *rt_genmask;   /* for generation of cloned routes */
        caddr_t rt_llinfo;              /* pointer to link level info cache */
        struct  ifaddr *rt_ifa;         /* the answer: interface to use */
        struct  sockaddr *rt_genmask;   /* for generation of cloned routes */
        caddr_t rt_llinfo;              /* pointer to link level info cache */
+       struct  rt_metrics rt_rmx;      /* metrics used by rx'ing protocols */
+       struct  rtentry *rt_gwroute;    /* implied entry for gatewayed routes */
 };
 
 /*
 };
 
 /*
@@ -74,12 +92,17 @@ struct ortentry {
 #define        RTF_UP          0x1             /* route useable */
 #define        RTF_GATEWAY     0x2             /* destination is a gateway */
 #define        RTF_HOST        0x4             /* host entry (net otherwise) */
 #define        RTF_UP          0x1             /* route useable */
 #define        RTF_GATEWAY     0x2             /* destination is a gateway */
 #define        RTF_HOST        0x4             /* host entry (net otherwise) */
+#define        RTF_REJECT      0x8             /* host or net unreachable */
 #define        RTF_DYNAMIC     0x10            /* created dynamically (by redirect) */
 #define        RTF_MODIFIED    0x20            /* modified dynamically (by redirect) */
 #define RTF_DONE       0x40            /* message confirmed */
 #define RTF_MASK       0x80            /* subnet mask present */
 #define RTF_CLONING    0x100           /* generate new routes on use */
 #define RTF_XRESOLVE   0x200           /* external daemon resolves name */
 #define        RTF_DYNAMIC     0x10            /* created dynamically (by redirect) */
 #define        RTF_MODIFIED    0x20            /* modified dynamically (by redirect) */
 #define RTF_DONE       0x40            /* message confirmed */
 #define RTF_MASK       0x80            /* subnet mask present */
 #define RTF_CLONING    0x100           /* generate new routes on use */
 #define RTF_XRESOLVE   0x200           /* external daemon resolves name */
+#define RTF_LLINFO     0x400           /* generated by ARP or ESIS */
+#define RTF_STATIC     0x800           /* manually added */
+#define RTF_PROTO2     0x4000          /* protocol specific routing flag */
+#define RTF_PROTO1     0x8000          /* protocol specific routing flag */
 
 
 /*
 
 
 /*
@@ -95,33 +118,19 @@ struct     rtstat {
 /*
  * Structures for routing messages.
  */
 /*
  * Structures for routing messages.
  */
-struct rt_metrics {
-       u_long  rtm_mtu;        /* MTU for this path */
-       u_long  rtm_hopcount;   /* max hops expected */
-       u_long  rtm_expire;     /* lifetime for route, e.g. redirect */
-       u_long  rtm_recvpipe;   /* inbound delay-bandwith product */
-       u_long  rtm_sendpipe;   /* outbound delay-bandwith product */
-       u_long  rtm_ssthresh;   /* outbound gateway buffer limit */
-       u_long  rtm_rtt;        /* estimated round trip time */
-       u_long  rtm_rttvar;     /* estimated rtt variance */
-};
-
 struct rt_msghdr {
        u_short rtm_msglen;     /* to skip over non-understood messages */
        u_char  rtm_version;    /* future binary compatability */
        u_char  rtm_type;       /* message type */
 struct rt_msghdr {
        u_short rtm_msglen;     /* to skip over non-understood messages */
        u_char  rtm_version;    /* future binary compatability */
        u_char  rtm_type;       /* message type */
-       u_char  rtm_count;      /* number of sockaddrs */
+       u_short rtm_index;      /* index for associated ifp */
        pid_t   rtm_pid;        /* identify sender */
        pid_t   rtm_pid;        /* identify sender */
+       int     rtm_addrs;      /* bitmask identifying sockaddrs in msg */
        int     rtm_seq;        /* for sender to identify action */
        int     rtm_errno;      /* why failed */
        int     rtm_flags;      /* flags, incl. kern & message, e.g. DONE */
        int     rtm_seq;        /* for sender to identify action */
        int     rtm_errno;      /* why failed */
        int     rtm_flags;      /* flags, incl. kern & message, e.g. DONE */
-       int     rtm_locks;      /* which values kernel can alter */
-       int     rtm_inits;      /* which values we are initializing */
-};
-
-struct rt_chgmsg {             /* Good for RTM_ADD, RTM_CHANGE, RTM_GET */
-       struct  rt_msghdr cm_h;
-       struct  rt_metrics cm_m;
+       int     rtm_use;        /* from rtentry */
+       u_long  rtm_inits;      /* which metrics we are initializing */
+       struct  rt_metrics rtm_rmx; /* metrics themselves */
 };
 
 struct route_cb {
 };
 
 struct route_cb {
@@ -130,6 +139,7 @@ struct route_cb {
        int     iso_count;
        int     any_count;
 };
        int     iso_count;
        int     any_count;
 };
+#define RTM_VERSION    2       /* Up the ante and ignore older versions */
 
 #define RTM_ADD                0x1     /* Add Route */
 #define RTM_DELETE     0x2     /* Delete Route */
 
 #define RTM_ADD                0x1     /* Add Route */
 #define RTM_DELETE     0x2     /* Delete Route */
@@ -152,6 +162,14 @@ struct route_cb {
 #define RTV_RTT                0x40    /* init or lock _rtt */
 #define RTV_RTTVAR     0x80    /* init or lock _rttvar */
 
 #define RTV_RTT                0x40    /* init or lock _rtt */
 #define RTV_RTTVAR     0x80    /* init or lock _rttvar */
 
+#define RTA_DST                0x1     /* destination sockaddr present */
+#define RTA_GATEWAY    0x2     /* gateway sockaddr present */
+#define RTA_NETMASK    0x4     /* netmask sockaddr present */
+#define RTA_GENMASK    0x8     /* cloning mask sockaddr present */
+#define RTA_IFP                0x10    /* interface name sockaddr present */
+#define RTA_IFA                0x20    /* interface addr sockaddr present */
+#define RTA_AUTHOR     0x40    /* sockaddr for author of redirect */
+
 #ifdef KERNEL
 struct route_cb route_cb;
 #endif
 #ifdef KERNEL
 struct route_cb route_cb;
 #endif
@@ -177,4 +195,5 @@ struct      mbuf *rthost[RTHASHSIZ];
 struct mbuf *rtnet[RTHASHSIZ];
 struct rtstat  rtstat;
 struct rtentry *rtalloc1();
 struct mbuf *rtnet[RTHASHSIZ];
 struct rtstat  rtstat;
 struct rtentry *rtalloc1();
+struct radix_node_head *rt_tables[AF_MAX+1];
 #endif
 #endif