Annotation of embedaddon/mrouted/prune.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: #ifndef __MROUTED_PRUNE_H__
11: #define __MROUTED_PRUNE_H__
12:
13: /*
14: * Group table
15: *
16: * Each group entry is a member of two doubly-linked lists:
17: *
18: * a) A list hanging off of the routing table entry for this source (rt_groups)
19: * sorted by group address under the routing entry (gt_next, gt_prev)
20: * b) An independent list pointed to by kernel_table, which is a list of
21: * active source,group's (gt_gnext, gt_gprev).
22: *
23: */
24: struct gtable {
25: struct gtable *gt_next; /* pointer to the next entry */
26: struct gtable *gt_prev; /* back pointer for linked list */
27: struct gtable *gt_gnext; /* fwd pointer for group list */
28: struct gtable *gt_gprev; /* rev pointer for group list */
29: u_int32 gt_mcastgrp; /* multicast group associated */
30: vifbitmap_t gt_scope; /* scoped interfaces */
31: u_char gt_ttls[MAXVIFS]; /* ttl vector for forwarding */
32: vifbitmap_t gt_grpmems; /* forw. vifs for src, grp */
33: int gt_prsent_timer; /* prune timer for this group */
34: int gt_timer; /* timer for this group entry */
35: time_t gt_ctime; /* time of entry creation */
36: u_char gt_grftsnt; /* graft sent/retransmit timer */
37: nbrbitmap_t gt_prunes; /* bitmap of neighbors who pruned */
38: struct stable *gt_srctbl; /* source table */
39: struct ptable *gt_pruntbl; /* prune table */
40: struct rtentry *gt_route; /* parent route */
41: int gt_rexmit_timer; /* timer for prune retransmission */
42: int gt_prune_rexmit; /* time til prune retransmission */
43: #ifdef RSRR
44: struct rsrr_cache *gt_rsrr_cache; /* RSRR cache */
45: #endif /* RSRR */
46: };
47:
48: /*
49: * Source table
50: *
51: * When source-based prunes exist, there will be a struct ptable here as well.
52: */
53: struct stable
54: {
55: struct stable *st_next; /* pointer to the next entry */
56: u_int32 st_origin; /* host origin of multicasts */
57: u_long st_pktcnt; /* packet count for src-grp entry */
58: u_long st_savpkt; /* saved pkt cnt when no krnl entry */
59: time_t st_ctime; /* kernel entry creation time */
60: };
61:
62: /*
63: * structure to store incoming prunes. Can hang off of either group or source.
64: */
65: struct ptable
66: {
67: struct ptable *pt_next; /* pointer to the next entry */
68: u_int32 pt_router; /* router that sent this prune */
69: vifi_t pt_vifi; /* vif prune received on */
70: u_int pt_index; /* neighbor index of router */
71: int pt_timer; /* timer for prune */
72: };
73:
74: #define MIN_PRUNE_LIFE TIMER_INTERVAL /* min prune lifetime to bother with */
75:
76: /*
77: * The packet format for a traceroute request.
78: */
79: struct tr_query {
80: u_int32 tr_src; /* traceroute source */
81: u_int32 tr_dst; /* traceroute destination */
82: u_int32 tr_raddr; /* traceroute response address */
83: #if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)
84: struct {
85: u_int qid : 24; /* traceroute query id */
86: u_int ttl : 8; /* traceroute response ttl */
87: } q;
88: #else
89: struct {
90: u_int ttl : 8; /* traceroute response ttl */
91: u_int qid : 24; /* traceroute query id */
92: } q;
93: #endif /* BYTE_ORDER */
94: };
95:
96: #define tr_rttl q.ttl
97: #define tr_qid q.qid
98:
99: /*
100: * Traceroute response format. A traceroute response has a tr_query at the
101: * beginning, followed by one tr_resp for each hop taken.
102: */
103: struct tr_resp {
104: u_int32 tr_qarr; /* query arrival time */
105: u_int32 tr_inaddr; /* incoming interface address */
106: u_int32 tr_outaddr; /* outgoing interface address */
107: u_int32 tr_rmtaddr; /* parent address in source tree */
108: u_int32 tr_vifin; /* input packet count on interface */
109: u_int32 tr_vifout; /* output packet count on interface */
110: u_int32 tr_pktcnt; /* total incoming packets for src-grp */
111: u_char tr_rproto; /* routing protocol deployed on router */
112: u_char tr_fttl; /* ttl required to forward on outvif */
113: u_char tr_smask; /* subnet mask for src addr */
114: u_char tr_rflags; /* forwarding error codes */
115: };
116:
117: /* defs within mtrace */
118: #define QUERY 1
119: #define RESP 2
120: #define QLEN sizeof(struct tr_query)
121: #define RLEN sizeof(struct tr_resp)
122:
123: /* fields for tr_rflags (forwarding error codes) */
124: #define TR_NO_ERR 0
125: #define TR_WRONG_IF 1
126: #define TR_PRUNED 2
127: #define TR_OPRUNED 3
128: #define TR_SCOPED 4
129: #define TR_NO_RTE 5
130: #define TR_NO_FWD 7
131: #define TR_NO_SPACE 0x81
132: #define TR_OLD_ROUTER 0x82
133:
134: /* fields for tr_rproto (routing protocol) */
135: #define PROTO_DVMRP 1
136: #define PROTO_MOSPF 2
137: #define PROTO_PIM 3
138: #define PROTO_CBT 4
139:
140: #define MASK_TO_VAL(x, i) { \
141: u_int32 _x = ntohl(x); \
142: (i) = 1; \
143: while ((_x) <<= 1) \
144: (i)++; \
145: };
146:
147: #define VAL_TO_MASK(x, i) { \
148: x = i ? htonl(~((1 << (32 - (i))) - 1)) : 0; \
149: };
150:
151: #define NBR_VERS(n) (((n)->al_pv << 8) + (n)->al_mv)
152:
153: #endif /* __MROUTED_PRUNE_H__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>