prune.h revision 1.2 1 /* $NetBSD: prune.h,v 1.2 1995/10/09 03:51:52 thorpej Exp $ */
2
3 /*
4 * The mrouted program is covered by the license in the accompanying file
5 * named "LICENSE". Use of the mrouted program represents acceptance of
6 * the terms and conditions listed in that file.
7 *
8 * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of
9 * Leland Stanford Junior University.
10 */
11
12 /*
13 * Group table
14 *
15 * Each group entry is a member of two doubly-linked lists:
16 *
17 * a) A list hanging off of the routing table entry for this source (rt_groups)
18 * sorted by group address under the routing entry (gt_next, gt_prev)
19 * b) An independent list pointed to by kernel_table, which is a list of
20 * active source,group's (gt_gnext, gt_gprev).
21 *
22 */
23 struct gtable {
24 struct gtable *gt_next; /* pointer to the next entry */
25 struct gtable *gt_prev; /* back pointer for linked list */
26 struct gtable *gt_gnext; /* fwd pointer for group list */
27 struct gtable *gt_gprev; /* rev pointer for group list */
28 u_int32_t gt_mcastgrp; /* multicast group associated */
29 vifbitmap_t gt_scope; /* scoped interfaces */
30 u_char gt_ttls[MAXVIFS]; /* ttl vector for forwarding */
31 vifbitmap_t gt_grpmems; /* forw. vifs for src, grp */
32 int gt_prsent_timer; /* prune timer for this group */
33 int gt_timer; /* timer for this group entry */
34 time_t gt_ctime; /* time of entry creation */
35 u_char gt_grftsnt; /* graft sent/retransmit timer */
36 struct stable *gt_srctbl; /* source table */
37 struct ptable *gt_pruntbl; /* prune table */
38 struct rtentry *gt_route; /* parent route */
39 };
40
41 /*
42 * Source table
43 *
44 * When source-based prunes exist, there will be a struct ptable here as well.
45 */
46 struct stable
47 {
48 struct stable *st_next; /* pointer to the next entry */
49 u_int32_t st_origin; /* host origin of multicasts */
50 u_long st_pktcnt; /* packet count for src-grp entry */
51 };
52
53 /*
54 * structure to store incoming prunes. Can hang off of either group or source.
55 */
56 struct ptable
57 {
58 struct ptable *pt_next; /* pointer to the next entry */
59 u_int32_t pt_router; /* router that sent this prune */
60 vifi_t pt_vifi; /* vif prune received on */
61 int pt_timer; /* timer for prune */
62 };
63
64 /*
65 * The packet format for a traceroute request.
66 */
67 struct tr_query {
68 u_int32_t tr_src; /* traceroute source */
69 u_int32_t tr_dst; /* traceroute destination */
70 u_int32_t tr_raddr; /* traceroute response address */
71 #if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)
72 struct {
73 u_int qid : 24; /* traceroute query id */
74 u_int ttl : 8; /* traceroute response ttl */
75 } q;
76 #else
77 struct {
78 u_int ttl : 8; /* traceroute response ttl */
79 u_int qid : 24; /* traceroute query id */
80 } q;
81 #endif /* BYTE_ORDER */
82 };
83
84 #define tr_rttl q.ttl
85 #define tr_qid q.qid
86
87 /*
88 * Traceroute response format. A traceroute response has a tr_query at the
89 * beginning, followed by one tr_resp for each hop taken.
90 */
91 struct tr_resp {
92 u_int32_t tr_qarr; /* query arrival time */
93 u_int32_t tr_inaddr; /* incoming interface address */
94 u_int32_t tr_outaddr; /* outgoing interface address */
95 u_int32_t tr_rmtaddr; /* parent address in source tree */
96 u_int32_t tr_vifin; /* input packet count on interface */
97 u_int32_t tr_vifout; /* output packet count on interface */
98 u_int32_t tr_pktcnt; /* total incoming packets for src-grp */
99 u_char tr_rproto; /* routing protocol deployed on router */
100 u_char tr_fttl; /* ttl required to forward on outvif */
101 u_char tr_smask; /* subnet mask for src addr */
102 u_char tr_rflags; /* forwarding error codes */
103 };
104
105 /* defs within mtrace */
106 #define QUERY 1
107 #define RESP 2
108 #define QLEN sizeof(struct tr_query)
109 #define RLEN sizeof(struct tr_resp)
110
111 /* fields for tr_rflags (forwarding error codes) */
112 #define TR_NO_ERR 0
113 #define TR_WRONG_IF 1
114 #define TR_PRUNED 2
115 #define TR_OPRUNED 3
116 #define TR_SCOPED 4
117 #define TR_NO_RTE 5
118 #define TR_NO_FWD 7
119 #define TR_NO_SPACE 0x81
120 #define TR_OLD_ROUTER 0x82
121
122 /* fields for tr_rproto (routing protocol) */
123 #define PROTO_DVMRP 1
124 #define PROTO_MOSPF 2
125 #define PROTO_PIM 3
126 #define PROTO_CBT 4
127
128 #define MASK_TO_VAL(x, i) { \
129 u_int32_t _x = ntohl(x); \
130 (i) = 0; \
131 while ((_x) << (i)) \
132 (i)++; \
133 };
134
135 #define VAL_TO_MASK(x, i) { \
136 x = htonl(~((1 << (32 - (i))) - 1)); \
137 };
138
139 #define NBR_VERS(n) (((n)->al_pv << 8) + (n)->al_mv)
140