Home | History | Annotate | Line # | Download | only in mrouted
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