Annotation of embedaddon/pimdd/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.mrouted". 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.3 1997/03/14 00:28:47 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: /* TODO: now in defs.h
        !           123: #define MAX_IP_PACKET_LEN      576
        !           124: #define MIN_IP_HEADER_LEN      20
        !           125: #define MAX_IP_HEADER_LEN      60
        !           126: */
        !           127: #define MAX_DVMRP_DATA_LEN \
        !           128:                ( MAX_IP_PACKET_LEN - MAX_IP_HEADER_LEN - IGMP_MINLEN )
        !           129: 
        !           130: /*
        !           131:  * Various protocol constants (all times in seconds)
        !           132:  */
        !           133:                                        /* address for multicast DVMRP msgs */
        !           134: #define INADDR_DVMRP_GROUP     (u_int32)0xe0000004     /* 224.0.0.4 */
        !           135: 
        !           136: #define DVMRP_ROUTE_MAX_REPORT_DELAY  5        /* max delay for reporting changes  */
        !           137:                                        /*  (This is the timer interrupt    */
        !           138:                                        /*  interval; all times must be     */
        !           139:                                        /*  multiples of this value.)       */
        !           140: 
        !           141: #define        DVMRP_ROUTE_REPORT_INTERVAL  60 /* periodic route report interval   */
        !           142: #define DVMRP_ROUTE_SWITCH_TIME            140 /* time to switch to equivalent gw  */
        !           143: #define        DVMRP_ROUTE_EXPIRE_TIME     200 /* time to mark route invalid       */
        !           144: #define        DVMRP_ROUTE_DISCARD_TIME    340 /* time to garbage collect route    */
        !           145: #define DVMRP_LEAF_CONFIRMATION_TIME 200 /* time to consider subnet a leaf   */
        !           146: #define DVMRP_NEIGHBOR_PROBE_INTERVAL 10 /* periodic neighbor probe interval */
        !           147: #define DVMRP_NEIGHBOR_EXPIRE_TIME    30 /* time to consider neighbor gone   */
        !           148: #define DVMRP_OLD_NEIGHBOR_EXPIRE_TIME 140 /* time to consider neighbor gone */
        !           149: #define DVMRP_UNREACHABLE            32 /* "infinity" metric, must be <= 64 */
        !           150: 
        !           151:   /* TODO: remove the DVMRP prefix and merge it with the PIM code? */
        !           152: #define DVMRP_MAX_RATE_LIMIT      100000 /* max rate limit                         */
        !           153: #define DVMRP_DEFAULT_PHY_RATE_LIMIT   0 /* default phyint rate limit              */
        !           154: #define DVMRP_DEFAULT_TUN_RATE_LIMIT 500 /* default tunnel rate limit      */
        !           155: 
        !           156: #define DVMRP_DEFAULT_CACHE_LIFETIME 300 /* kernel route entry discard time */
        !           157: #define DVMRP_MIN_CACHE_LIFETIME      60 /* minimum allowed cache lifetime  */
        !           158: #define DVMRP_AVERAGE_PRUNE_LIFETIME 7200 /* average lifetime of prunes sent */
        !           159: #define        DVMRP_MIN_PRUNE_LIFETIME      120 /* minimum allowed prune lifetime  */
        !           160: #define DVMRP_GRAFT_TIMEOUT_VAL                5 /* retransmission time for grafts  */
        !           161: #define        DVMRP_PRUNE_REXMIT_VAL         3 /* initial time for prune rexmission*/
        !           162: 
        !           163: #define DVMRP_OLD_AGE_THRESHOLD               2 /* # of query intervals to remember */
        !           164:                                         /* presence of IGMPv1 member        */
        !           165:                                         /* XXX NOTE that this technically   */
        !           166:                                         /* violates IGMPv2 draft as the     */
        !           167:                                         /* timer is 5 seconds too short     */

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