File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mrouted / dvmrp.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:10:48 2012 UTC (12 years, 3 months ago) by misho
Branches: mrouted, MAIN
CVS tags: v3_9_6p0, v3_9_6, v3_9_5, HEAD
mrouted

    1: /*
    2:  * The mrouted program is covered by the license in the accompanying file
    3:  * named "LICENSE".  Use of the mrouted program represents acceptance of
    4:  * the terms and conditions listed in that file.
    5:  *
    6:  * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of
    7:  * Leland Stanford Junior University.
    8:  *
    9:  *
   10:  * dvmrp.h,v 3.8.4.5 1997/11/18 23:25:57 fenner Exp
   11:  */
   12: 
   13: /*
   14:  * A DVMRP message consists of an IP header + an IGMP header + (for some types)
   15:  * zero or more bytes of data.
   16:  *
   17:  * For REPORT messages, the data is route information; the route information
   18:  * consists of one or more lists of the following form:
   19:  *
   20:  *		(mask, (origin, metric), (origin, metric), ...)
   21:  *
   22:  * where:
   23:  *
   24:  *	"mask" is the subnet mask for all the origins in the list.
   25:  *		It is always THREE bytes long, containing the low-order
   26:  *		three bytes of the mask (the high-order byte is always
   27:  *		0xff and therefore need not be transmitted).
   28:  *
   29:  *	"origin" is the number of a subnet from which multicast datagrams
   30:  *		may originate.  It is from one to four bytes long,
   31:  *		depending on the value of "mask":
   32:  *			if all bytes of the mask are zero
   33:  *			    the subnet number is one byte long
   34:  *			else if the low-order two bytes of the mask are zero
   35:  *			    the subnet number is two bytes long
   36:  *			else if the lowest-order byte of the mask is zero
   37:  *			    the subnet number is three bytes long,
   38:  *			else
   39:  *			    the subnet number is four bytes long.
   40:  *
   41:  *	"metric" is a one-byte value consisting of two subfields:
   42:  *		- the high-order bit is a flag which, when set, indicates
   43:  *		  the last (origin, metric) pair of a list.
   44:  *		- the low-order seven bits contain the routing metric for
   45:  *		  the corresponding origin, relative to the sender of the
   46:  *		  DVMRP report.  The metric may have the value of UNREACHABLE
   47:  *		  added to it as a "split horizon" indication (so called
   48:  *		  "poisoned reverse").
   49:  *
   50:  * Within a list, the origin subnet numbers must be in ascending order, and
   51:  * the lists themselves are in order of increasing mask value.  A message may
   52:  * not exceed 576 bytes, the default maximum IP reassembly size, including
   53:  * the IP and IGMP headers; the route information may be split across more
   54:  * than one message if necessary, by terminating a list in one message and
   55:  * starting a new list in the next message (repeating the same mask value,
   56:  * if necessary).
   57:  *
   58:  * For NEIGHBORS messages, the data is neighboring-router information
   59:  * consisting of one or more lists of the following form:
   60:  *
   61:  *	(local-addr, metric, threshold, ncount, neighbor, neighbor, ...)
   62:  *
   63:  * where:
   64:  *
   65:  *	"local-addr" is the sending router's address as seen by the neighbors
   66:  *		     in this list; it is always four bytes long.
   67:  *	"metric" is a one-byte unsigned value, the TTL `cost' of forwarding
   68:  *		 packets to any of the neighbors on this list.
   69:  *	"threshold" is a one-byte unsigned value, a lower bound on the TTL a
   70:  *		    packet must have to be forwarded to any of the neighbors on
   71:  *		    this list.
   72:  *	"ncount" is the number of neighbors in this list.
   73:  *	"neighbor" is the address of a neighboring router, four bytes long.
   74:  *
   75:  * As with REPORT messages, NEIGHBORS messages should not exceed 576 bytes,
   76:  * including the IP and IGMP headers; split longer messages by terminating the
   77:  * list in one and continuing in another, repeating the local-addr, etc., if
   78:  * necessary.
   79:  *
   80:  * For NEIGHBORS2 messages, the data is identical to NEIGHBORS except
   81:  * there is a flags byte before the neighbor count:
   82:  *
   83:  *	(local-addr, metric, threshold, flags, ncount, neighbor, neighbor, ...)
   84:  */
   85: 
   86: /*
   87:  * DVMRP message types (carried in the "code" field of an IGMP header)
   88:  */
   89: #define DVMRP_PROBE		1	/* for finding neighbors             */
   90: #define DVMRP_REPORT		2	/* for reporting some or all routes  */
   91: #define DVMRP_ASK_NEIGHBORS	3	/* sent by mapper, asking for a list */
   92: 					/* of this router's neighbors. */
   93: #define DVMRP_NEIGHBORS		4	/* response to such a request */
   94: #define DVMRP_ASK_NEIGHBORS2	5	/* as above, want new format reply */
   95: #define DVMRP_NEIGHBORS2	6
   96: #define DVMRP_PRUNE		7	/* prune message */
   97: #define DVMRP_GRAFT		8	/* graft message */
   98: #define DVMRP_GRAFT_ACK		9	/* graft acknowledgement */
   99: #define DVMRP_INFO_REQUEST	10	/* information request */
  100: #define DVMRP_INFO_REPLY	11	/* information reply */
  101: 
  102: /*
  103:  * 'flags' byte values in DVMRP_NEIGHBORS2 reply.
  104:  */
  105: #define DVMRP_NF_TUNNEL		0x01	/* neighbors reached via tunnel */
  106: #define DVMRP_NF_SRCRT		0x02	/* tunnel uses IP source routing */
  107: #define DVMRP_NF_PIM		0x04	/* neighbor is a PIM neighbor */
  108: #define DVMRP_NF_DOWN		0x10	/* kernel state of interface */
  109: #define DVMRP_NF_DISABLED	0x20	/* administratively disabled */
  110: #define DVMRP_NF_QUERIER	0x40	/* I am the subnet's querier */
  111: #define DVMRP_NF_LEAF		0x80	/* Neighbor reports that it is a leaf */
  112: 
  113: /*
  114:  * Request/reply types for info queries/replies
  115:  */
  116: #define DVMRP_INFO_VERSION	1	/* version string */
  117: #define DVMRP_INFO_NEIGHBORS	2	/* neighbors2 data */
  118: 
  119: /*
  120:  * Limit on length of route data
  121:  */
  122: #define MAX_IP_PACKET_LEN	576
  123: #define MIN_IP_HEADER_LEN	20
  124: #define MAX_IP_HEADER_LEN	60
  125: #define MAX_DVMRP_DATA_LEN \
  126: 		( MAX_IP_PACKET_LEN - MAX_IP_HEADER_LEN - IGMP_MINLEN )
  127: 
  128: /*
  129:  * Various protocol constants (all times in seconds)
  130:  */
  131: 				        /* address for multicast DVMRP msgs */
  132: #define INADDR_DVMRP_GROUP	(u_int32)0xe0000004     /* 224.0.0.4 */
  133: /*
  134:  * The IGMPv2 <netinet/in.h> defines INADDR_ALLRTRS_GROUP, but earlier
  135:  * ones don't, so we define it conditionally here.
  136:  */
  137: #ifndef INADDR_ALLRTRS_GROUP
  138: 					/* address for multicast mtrace msg */
  139: #define INADDR_ALLRTRS_GROUP	(u_int32)0xe0000002	/* 224.0.0.2 */
  140: #endif
  141: 
  142: #define ROUTE_MAX_REPORT_DELAY	5	/* max delay for reporting changes  */
  143: 					/*  (This is the timer interrupt    */
  144: 					/*  interval; all times must be     */
  145: 					/*  multiples of this value.)       */
  146: 
  147: #define	ROUTE_REPORT_INTERVAL	60	/* periodic route report interval   */
  148: #define ROUTE_SWITCH_TIME	140	/* time to switch to equivalent gw  */
  149: #define	ROUTE_EXPIRE_TIME	200	/* time to mark route invalid       */
  150: #define	ROUTE_DISCARD_TIME	340	/* time to garbage collect route    */
  151: 
  152: #define LEAF_CONFIRMATION_TIME	200	/* time to consider subnet a leaf   */
  153: 
  154: #define NEIGHBOR_PROBE_INTERVAL	10	/* periodic neighbor probe interval */
  155: #define NEIGHBOR_EXPIRE_TIME	30	/* time to consider neighbor gone   */
  156: #define OLD_NEIGHBOR_EXPIRE_TIME 140	/* time to consider neighbor gone   */
  157: 
  158: #define UNREACHABLE		32	/* "infinity" metric, must be <= 64 */
  159: #define DEFAULT_METRIC		1	/* default subnet/tunnel metric     */
  160: #define DEFAULT_THRESHOLD	1	/* default subnet/tunnel threshold  */
  161: 
  162: #define MAX_RATE_LIMIT      	100000 	/* max rate limit      	    	    */
  163: #define DEFAULT_PHY_RATE_LIMIT  0 	/* default phyint rate limit  	    */
  164: #define DEFAULT_TUN_RATE_LIMIT	0	/* default tunnel rate limit	    */
  165: 
  166: #define DEFAULT_CACHE_LIFETIME 	300   	/* kernel route entry discard time  */
  167: #define MIN_CACHE_LIFETIME	60	/* minimum allowed cache lifetime   */
  168: #define AVERAGE_PRUNE_LIFETIME 	7200   	/* average lifetime of prunes sent  */
  169: #define	MIN_PRUNE_LIFETIME	120	/* minimum allowed prune lifetime   */
  170: #define GRAFT_TIMEOUT_VAL	5	/* retransmission time for grafts   */
  171: #define	PRUNE_REXMIT_VAL	3	/* initial time for prune rexmission*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>