File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pimd / rsrr.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jun 12 07:59:37 2017 UTC (7 years ago) by misho
Branches: pimd, MAIN
CVS tags: v2_3_2, HEAD
pimd 2.3.2

    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>