Annotation of embedaddon/mrouted/dvmrp.h, revision 1.1

1.1     ! misho       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>