Annotation of embedaddon/mrouted/rsrr.h, revision 1.1.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>