Annotation of embedaddon/pimd/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 (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>