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>