File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mrouted / prune.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:10:48 2012 UTC (12 years, 4 months ago) by misho
Branches: mrouted, MAIN
CVS tags: v3_9_6p0, v3_9_6, v3_9_5, HEAD
mrouted

    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>