Annotation of embedaddon/mrouted/prune.h, revision 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>