Annotation of embedaddon/mrouted/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". 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>