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>