Annotation of embedaddon/pimdd/trace.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  *  Copyright (c) 1998 by the University of Southern California.
        !             3:  *  All rights reserved.
        !             4:  *
        !             5:  *  Permission to use, copy, modify, and distribute this software and
        !             6:  *  its documentation in source and binary forms for lawful
        !             7:  *  purposes and without fee is hereby granted, provided
        !             8:  *  that the above copyright notice appear in all copies and that both
        !             9:  *  the copyright notice and this permission notice appear in supporting
        !            10:  *  documentation, and that any documentation, advertising materials,
        !            11:  *  and other materials related to such distribution and use acknowledge
        !            12:  *  that the software was developed by the University of Southern
        !            13:  *  California and/or Information Sciences Institute.
        !            14:  *  The name of the University of Southern California may not
        !            15:  *  be used to endorse or promote products derived from this software
        !            16:  *  without specific prior written permission.
        !            17:  *
        !            18:  *  THE UNIVERSITY OF SOUTHERN CALIFORNIA DOES NOT MAKE ANY REPRESENTATIONS
        !            19:  *  ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE.  THIS SOFTWARE IS
        !            20:  *  PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
        !            21:  *  INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
        !            22:  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND 
        !            23:  *  NON-INFRINGEMENT.
        !            24:  *
        !            25:  *  IN NO EVENT SHALL USC, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
        !            26:  *  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT,
        !            27:  *  TORT, OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH,
        !            28:  *  THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            29:  *
        !            30:  *  Other copyrights might apply to parts of this software and are so
        !            31:  *  noted when applicable.
        !            32:  */
        !            33: /*
        !            34:  *  Questions concerning this software should be directed to 
        !            35:  *  Pavlin Ivanov Radoslavov (pavlin@catarina.usc.edu)
        !            36:  *
        !            37:  *  $Id: trace.h,v 1.1.1.1 1998/05/11 17:39:34 kurtw Exp $
        !            38:  */
        !            39: /*
        !            40:  * Part of this program has been derived from mrouted.
        !            41:  * The mrouted program is covered by the license in the accompanying file
        !            42:  * named "LICENSE.mrouted".
        !            43:  *
        !            44:  * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of
        !            45:  * Leland Stanford Junior University.
        !            46:  *
        !            47:  */
        !            48: 
        !            49: 
        !            50: /*
        !            51:  * The packet format for a traceroute request.
        !            52:  */
        !            53: struct tr_query {
        !            54:     u_int32  tr_src;           /* traceroute source */
        !            55:     u_int32  tr_dst;           /* traceroute destination */
        !            56:     u_int32  tr_raddr;         /* traceroute response address */
        !            57: #if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)
        !            58:     struct {
        !            59:        u_int   qid : 24;       /* traceroute query id */
        !            60:        u_int   ttl : 8;        /* traceroute response ttl */
        !            61:     } q;
        !            62: #else
        !            63:     struct {
        !            64:        u_int   ttl : 8;        /* traceroute response ttl */
        !            65:        u_int   qid : 24;       /* traceroute query id */
        !            66:     } q;
        !            67: #endif /* BYTE_ORDER */
        !            68: };
        !            69: 
        !            70: #define tr_rttl q.ttl
        !            71: #define tr_qid  q.qid
        !            72: 
        !            73: /*
        !            74:  * Traceroute response format.  A traceroute response has a tr_query at the
        !            75:  * beginning, followed by one tr_resp for each hop taken.
        !            76:  */
        !            77: struct tr_resp {
        !            78:     u_int32 tr_qarr;           /* query arrival time */
        !            79:     u_int32 tr_inaddr;         /* incoming interface address */
        !            80:     u_int32 tr_outaddr;                /* outgoing interface address */
        !            81:     u_int32 tr_rmtaddr;                /* parent address in source tree */
        !            82:     u_int32 tr_vifin;          /* input packet count on interface */
        !            83:     u_int32 tr_vifout;         /* output packet count on interface */
        !            84:     u_int32 tr_pktcnt;         /* total incoming packets for src-grp */
        !            85:     u_char  tr_rproto;         /* routing protocol deployed on router */
        !            86:     u_char  tr_fttl;           /* ttl required to forward on outvif */
        !            87:     u_char  tr_smask;          /* subnet mask for src addr */
        !            88:     u_char  tr_rflags;         /* forwarding error codes */
        !            89: };
        !            90: 
        !            91: /* defs within mtrace */
        !            92: #define QUERY  1
        !            93: #define RESP   2
        !            94: #define QLEN   sizeof(struct tr_query)
        !            95: #define RLEN   sizeof(struct tr_resp)
        !            96: 
        !            97: /* fields for tr_rflags (forwarding error codes) */
        !            98: #define TR_NO_ERR      0       /* No error */
        !            99: #define TR_WRONG_IF    1       /* traceroute arrived on non-oif */
        !           100: #define TR_PRUNED      2       /* router has sent a prune upstream */
        !           101: #define TR_OPRUNED     3       /* stop forw. after request from next hop rtr*/
        !           102: #define TR_SCOPED      4       /* group adm. scoped at this hop */
        !           103: #define TR_NO_RTE      5       /* no route for the source */
        !           104: #define TR_NO_LHR       6       /* not the last-hop router */
        !           105: #define TR_NO_FWD      7       /* not forwarding for this (S,G). Reason = ? */
        !           106: #define TR_RP           8       /* I am the RP/Core */
        !           107: #define TR_IIF          9       /* request arrived on the iif */
        !           108: #define TR_NO_MULTI     0x0a    /* multicast disabled on that interface */
        !           109: #define TR_NO_SPACE    0x81    /* no space to insert responce data block */
        !           110: #define TR_OLD_ROUTER  0x82    /* previous hop does not support traceroute */
        !           111: #define TR_ADMIN_PROHIB 0x83    /* traceroute adm. prohibited */
        !           112: 
        !           113: /* fields for tr_smask */
        !           114: #define TR_GROUP_ONLY   0x2f    /* forwarding solely on group state */
        !           115: #define TR_SUBNET_COUNT 0x40    /* pkt count for (S,G) is for source network */
        !           116: 
        !           117: /* fields for packets count */
        !           118: #define TR_CANT_COUNT   0xffffffff  /* no count can be reported */
        !           119: 
        !           120: /* fields for tr_rproto (routing protocol) */
        !           121: #define PROTO_DVMRP       1
        !           122: #define PROTO_MOSPF       2
        !           123: #define PROTO_PIM         3
        !           124: #define PROTO_CBT         4
        !           125: #define PROTO_PIM_SPECIAL  5
        !           126: #define PROTO_PIM_STATIC   6
        !           127: #define PROTO_DVMRP_STATIC 7
        !           128: 
        !           129: #define MASK_TO_VAL(x, i) { \
        !           130:                        u_int32 _x = ntohl(x); \
        !           131:                        (i) = 1; \
        !           132:                        while ((_x) <<= 1) \
        !           133:                                (i)++; \
        !           134:                        };
        !           135: 
        !           136: #define VAL_TO_MASK(x, i) { \
        !           137:                        x = htonl(~((1 << (32 - (i))) - 1)); \
        !           138:                        };
        !           139: 
        !           140: #define NBR_VERS(n)    (((n)->al_pv << 8) + (n)->al_mv)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>