Annotation of embedaddon/pimd/rsrr.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (c) 1993, 1998-2001.
        !             3:  * The University of Southern California/Information Sciences Institute.
        !             4:  * All rights reserved.
        !             5:  *
        !             6:  * Redistribution and use in source and binary forms, with or without
        !             7:  * modification, are permitted provided that the following conditions
        !             8:  * are met:
        !             9:  * 1. Redistributions of source code must retain the above copyright
        !            10:  *    notice, this list of conditions and the following disclaimer.
        !            11:  * 2. Redistributions in binary form must reproduce the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer in the
        !            13:  *    documentation and/or other materials provided with the distribution.
        !            14:  * 3. Neither the name of the project nor the names of its contributors
        !            15:  *    may be used to endorse or promote products derived from this software
        !            16:  *    without specific prior written permission.
        !            17:  *
        !            18:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
        !            19:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            20:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            21:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
        !            22:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            23:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            24:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            25:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            26:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            27:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            28:  * SUCH DAMAGE.
        !            29:  */
        !            30: 
        !            31: #define RSRR_SERV_PATH "/tmp/.rsrr_svr"
        !            32: /* Note this needs to be 14 chars for 4.3 BSD compatibility */
        !            33: #define RSRR_CLI_PATH "/tmp/.rsrr_cli"
        !            34: 
        !            35: #define RSRR_MAX_LEN 2048
        !            36: #define RSRR_HEADER_LEN (sizeof(struct rsrr_header))
        !            37: #define RSRR_RQ_LEN (RSRR_HEADER_LEN + sizeof(struct rsrr_rq))
        !            38: #define RSRR_RR_LEN (RSRR_HEADER_LEN + sizeof(struct rsrr_rr))
        !            39: #define RSRR_VIF_LEN (sizeof(struct rsrr_vif))
        !            40: 
        !            41: /* Current maximum number of vifs. */
        !            42: #define RSRR_MAX_VIFS 32
        !            43: 
        !            44: /* Maximum acceptable version */
        !            45: #define RSRR_MAX_VERSION 1
        !            46: 
        !            47: /* RSRR message types */
        !            48: #define RSRR_ALL_TYPES     0
        !            49: #define RSRR_INITIAL_QUERY 1
        !            50: #define RSRR_INITIAL_REPLY 2
        !            51: #define RSRR_ROUTE_QUERY   3
        !            52: #define RSRR_ROUTE_REPLY   4
        !            53: 
        !            54: /* Each definition represents the position of the bit from right to left. */
        !            55: /* All not defined bits are zeroes */
        !            56: 
        !            57: /* RSRR Initial Reply (Vif) Status bits
        !            58:  *
        !            59:  * 0 = disabled bit, set if the vif is administratively disabled.
        !            60:  */
        !            61: #define RSRR_DISABLED_BIT 0
        !            62: 
        !            63: /* RSRR Route Query/Reply flag bits
        !            64:  *
        !            65:  * 0 = Route Change Notification bit, set if the reservation protocol
        !            66:  *     wishes to receive notification of a route change for the
        !            67:  *     source-destination pair listed in the query. Notification is in the
        !            68:  *     form of an unsolicitied Route Reply.
        !            69:  * 1 = Error bit, set if routing doesn't have a routing entry for
        !            70:  *     the source-destination pair.
        !            71:  * (TODO: XXX: currently not used by rsvpd?)
        !            72:  * (2,3) = Shared tree (Reply only)
        !            73:  *         = 01 if the listed sender is using a shared tree, but some other
        !            74:  *              senders for the same destination use sender (source-specific)
        !            75:  *              trees.
        !            76:  *         = 10 if all senders for the destination use shared tree.
        !            77:  *         = 00 otherwise
        !            78:  */
        !            79: #define RSRR_NOTIFICATION_BIT 0
        !            80: #define RSRR_ERROR_BIT 1
        !            81: #define RSRR_THIS_SENDER_SHARED_TREE 2
        !            82: #define RSRR_ALL_SENDERS_SHARED_TREE 3
        !            83: #define RSRR_SET_ALL_SENDERS_SHARED_TREE(X)             \
        !            84:           BIT_SET((X), RSRR_ALL_SENDERS_SHARED_TREE);  \
        !            85:           BIT_CLR((X), RSRR_THIS_SENDER_SHARED_TREE);
        !            86: #define RSRR_THIS_SENDER_SHARED_TREE_SOME_OTHER_NOT(X)  \
        !            87:           BIT_SET((X), RSRR_THIS_SENDER_SHARED_TREE);   \
        !            88:           BIT_CLR((X), RSRR_ALL_SENDERS_SHARED_TREE)
        !            89: 
        !            90: /* Definition of an RSRR message header.
        !            91:  * An Initial Query uses only the header, and an Initial Reply uses
        !            92:  * the header and a list of vifs.
        !            93:  */
        !            94: struct rsrr_header {
        !            95:     uint8_t version;                   /* RSRR Version, currently 1        */
        !            96:     uint8_t type;                      /* type of message, as defined above*/
        !            97:     uint8_t flags;                     /* flags; defined by type           */
        !            98:     uint8_t num;                       /* number; defined by type          */
        !            99: };
        !           100: 
        !           101: /* Definition of a vif as seen by the reservation protocol.
        !           102:  *
        !           103:  * Routing gives the reservation protocol a list of vifs in the
        !           104:  * Initial Reply.
        !           105:  *
        !           106:  * We explicitly list the ID because we can't assume that all routing
        !           107:  * protocols will use the same numbering scheme.
        !           108:  *
        !           109:  * The status is a bitmask of status flags, as defined above.  It is the
        !           110:  * responsibility of the reservation protocol to perform any status checks
        !           111:  * if it uses the MULTICAST_VIF socket option.
        !           112:  *
        !           113:  * The threshold indicates the ttl an outgoing packet needs in order to
        !           114:  * be forwarded. The reservation protocol must perform this check itself if
        !           115:  * it uses the MULTICAST_VIF socket option.
        !           116:  *
        !           117:  * The local address is the address of the physical interface over which
        !           118:  * packets are sent.
        !           119:  */
        !           120: struct rsrr_vif {
        !           121:     uint8_t id;                                /* vif id             */
        !           122:     uint8_t threshold;                 /* vif threshold ttl  */
        !           123:     uint16_t status;                   /* vif status bitmask */
        !           124:     uint32_t local_addr;               /* vif local address  */
        !           125: };
        !           126: 
        !           127: /* Definition of an RSRR Route Query.
        !           128:  * 
        !           129:  * The query asks routing for the forwarding entry for a particular
        !           130:  * source and destination.  The query ID uniquely identifies the query
        !           131:  * for the reservation protocol.  Thus, the combination of the client's
        !           132:  * address and the query ID forms a unique identifier for routing.
        !           133:  * Flags are defined above.
        !           134:  */
        !           135: struct rsrr_rq {
        !           136:     uint32_t dest_addr;                        /* destination */
        !           137:     uint32_t source_addr;              /* source      */
        !           138:     uint32_t query_id;                 /* query ID    */
        !           139: };
        !           140: 
        !           141: /* Definition of an RSRR Route Reply.
        !           142:  *
        !           143:  * Routing uses the reply to give the reservation protocol the
        !           144:  * forwarding entry for a source-destination pair.  Routing copies the
        !           145:  * query ID from the query and fills in the incoming vif and a bitmask
        !           146:  * of the outgoing vifs.
        !           147:  * Flags are defined above.
        !           148:  */
        !           149: /* TODO: XXX: in_vif is 16 bits here, but in rsrr_vif it is 8 bits.
        !           150:  * Bug in the spec?
        !           151:  */
        !           152: struct rsrr_rr {
        !           153:     uint32_t dest_addr;                /* destination          */
        !           154:     uint32_t source_addr;              /* source               */
        !           155:     uint32_t query_id;                 /* query ID             */
        !           156:     uint16_t in_vif;                   /* incoming vif         */
        !           157:     uint16_t reserved;                 /* reserved             */
        !           158:     uint32_t out_vif_bm;               /* outgoing vif bitmask */
        !           159: };
        !           160: 
        !           161: 
        !           162: /* TODO: XXX: THIS IS NOT IN THE SPEC! (OBSOLETE?) */
        !           163: #ifdef NOT_IN_THE_SPEC
        !           164: /* Definition of an RSRR Service Query/Reply.
        !           165:  * 
        !           166:  * The query asks routing to perform a service for a particular
        !           167:  * source/destination combination.  The query also lists the vif
        !           168:  * that the service applies to.
        !           169:  */
        !           170: struct rsrr_sqr {
        !           171:     uint32_t dest_addr;                  /* destination */
        !           172:     uint32_t source_addr;                /* source      */
        !           173:     uint32_t query_id;                   /* query ID    */
        !           174:     uint16_t vif;                        /* vif         */
        !           175:     uint16_t reserved;                   /* reserved    */
        !           176: };
        !           177: #endif /* NOT_IN_THE_SPEC */
        !           178: 
        !           179: /**
        !           180:  * Local Variables:
        !           181:  *  version-control: t
        !           182:  *  indent-tabs-mode: t
        !           183:  *  c-file-style: "ellemtel"
        !           184:  *  c-basic-offset: 4
        !           185:  * End:
        !           186:  */

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