Annotation of embedaddon/pimd/dvmrp.h, revision 1.1.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     (uint32_t)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>