Annotation of embedaddon/mrouted/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: /* RSRR Initial Reply (Vif) Status bits
        !            55:  * Each definition represents the position of the bit from right to left.
        !            56:  *
        !            57:  * Right-most bit is the disabled bit, set if the vif is administratively
        !            58:  * disabled.
        !            59:  */
        !            60: #define RSRR_DISABLED_BIT 0
        !            61: /* All other bits are zeroes */
        !            62: 
        !            63: /* RSRR Route Query/Reply flag bits
        !            64:  * Each definition represents the position of the bit from right to left.
        !            65:  *
        !            66:  * Right-most bit is the Route Change Notification bit, set if the
        !            67:  * reservation protocol wishes to receive notification of
        !            68:  * a route change for the source-destination pair listed in the query.
        !            69:  * Notification is in the form of an unsolicitied Route Reply.
        !            70:  */
        !            71: #define RSRR_NOTIFICATION_BIT 0
        !            72: /* Next bit indicates an error returning the Route Reply. */
        !            73: #define RSRR_ERROR_BIT 1
        !            74: /* All other bits are zeroes */
        !            75: 
        !            76: /* Definition of an RSRR message header.
        !            77:  * An Initial Query uses only the header, and an Initial Reply uses
        !            78:  * the header and a list of vifs.
        !            79:  */
        !            80: struct rsrr_header {
        !            81:     u_char version;                    /* RSRR Version, currently 1 */
        !            82:     u_char type;                       /* type of message, as defined above */
        !            83:     u_char flags;                      /* flags; defined by type */
        !            84:     u_char num;                                /* number; defined by type */
        !            85: };
        !            86: 
        !            87: /* Definition of a vif as seen by the reservation protocol.
        !            88:  *
        !            89:  * Routing gives the reservation protocol a list of vifs in the
        !            90:  * Initial Reply.
        !            91:  *
        !            92:  * We explicitly list the ID because we can't assume that all routing
        !            93:  * protocols will use the same numbering scheme.
        !            94:  *
        !            95:  * The status is a bitmask of status flags, as defined above.  It is the
        !            96:  * responsibility of the reservation protocol to perform any status checks
        !            97:  * if it uses the MULTICAST_VIF socket option.
        !            98:  *
        !            99:  * The threshold indicates the ttl an outgoing packet needs in order to
        !           100:  * be forwarded. The reservation protocol must perform this check itself if
        !           101:  * it uses the MULTICAST_VIF socket option.
        !           102:  *
        !           103:  * The local address is the address of the physical interface over which
        !           104:  * packets are sent.
        !           105:  */
        !           106: struct rsrr_vif {
        !           107:     u_char id;                         /* vif id */
        !           108:     u_char threshold;                  /* vif threshold ttl */
        !           109:     u_int16_t status;                  /* vif status bitmask */
        !           110:     struct in_addr local_addr;         /* vif local address */
        !           111: };
        !           112: 
        !           113: /* Definition of an RSRR Route Query.
        !           114:  *
        !           115:  * The query asks routing for the forwarding entry for a particular
        !           116:  * source and destination.  The query ID uniquely identifies the query
        !           117:  * for the reservation protocol.  Thus, the combination of the client's
        !           118:  * address and the query ID forms a unique identifier for routing.
        !           119:  * Flags are defined above.
        !           120:  */
        !           121: struct rsrr_rq {
        !           122:     struct in_addr dest_addr;          /* destination */
        !           123:     struct in_addr source_addr;                /* source */
        !           124:     u_long query_id;                   /* query ID */
        !           125: };
        !           126: 
        !           127: /* Definition of an RSRR Route Reply.
        !           128:  *
        !           129:  * Routing uses the reply to give the reservation protocol the
        !           130:  * forwarding entry for a source-destination pair.  Routing copies the
        !           131:  * query ID from the query and fills in the incoming vif and a bitmask
        !           132:  * of the outgoing vifs.
        !           133:  * Flags are defined above.
        !           134:  */
        !           135: struct rsrr_rr {
        !           136:     struct in_addr dest_addr;          /* destination */
        !           137:     struct in_addr source_addr;                /* source */
        !           138:     u_long query_id;                   /* query ID */
        !           139:     u_int16_t in_vif;                  /* incoming vif */
        !           140:     u_int16_t reserved;                        /* reserved */
        !           141:     u_long out_vif_bm;                 /* outgoing vif bitmask */
        !           142: };

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