1/*	$NetBSD: rsrr.h,v 1.2 2002/10/01 03:41:13 itojun Exp $	*/
2
3/*
4 * Copyright (c) 1993, 1998-2001.
5 * The University of Southern California/Information Sciences Institute.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the project nor the names of its contributors
17 *    may be used to endorse or promote products derived from this software
18 *    without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33#define RSRR_SERV_PATH "/tmp/.rsrr_svr"
34/* Note this needs to be 14 chars for 4.3 BSD compatibility */
35#define RSRR_CLI_PATH "/tmp/.rsrr_cli"
36
37#define RSRR_MAX_LEN 2048
38#define RSRR_HEADER_LEN (sizeof(struct rsrr_header))
39#define RSRR_RQ_LEN (RSRR_HEADER_LEN + sizeof(struct rsrr_rq))
40#define RSRR_RR_LEN (RSRR_HEADER_LEN + sizeof(struct rsrr_rr))
41#define RSRR_VIF_LEN (sizeof(struct rsrr_vif))
42
43/* Current maximum number of vifs. */
44#define RSRR_MAX_VIFS 32
45
46/* Maximum acceptable version */
47#define RSRR_MAX_VERSION 1
48
49/* RSRR message types */
50#define RSRR_ALL_TYPES     0
51#define RSRR_INITIAL_QUERY 1
52#define RSRR_INITIAL_REPLY 2
53#define RSRR_ROUTE_QUERY   3
54#define RSRR_ROUTE_REPLY   4
55
56/* RSRR Initial Reply (Vif) Status bits
57 * Each definition represents the position of the bit from right to left.
58 *
59 * Right-most bit is the disabled bit, set if the vif is administratively
60 * disabled.
61 */
62#define RSRR_DISABLED_BIT 0
63/* All other bits are zeroes */
64
65/* RSRR Route Query/Reply flag bits
66 * Each definition represents the position of the bit from right to left.
67 *
68 * Right-most bit is the Route Change Notification bit, set if the
69 * reservation protocol wishes to receive notification of
70 * a route change for the source-destination pair listed in the query.
71 * Notification is in the form of an unsolicitied Route Reply.
72 */
73#define RSRR_NOTIFICATION_BIT 0
74/* Next bit indicates an error returning the Route Reply. */
75#define RSRR_ERROR_BIT 1
76/* All other bits are zeroes */
77
78/* Definition of an RSRR message header.
79 * An Initial Query uses only the header, and an Initial Reply uses
80 * the header and a list of vifs.
81 */
82struct rsrr_header {
83    u_char version;			/* RSRR Version, currently 1 */
84    u_char type;			/* type of message, as defined above */
85    u_char flags;			/* flags; defined by type */
86    u_char num;				/* number; defined by type */
87};
88
89/* Definition of a vif as seen by the reservation protocol.
90 *
91 * Routing gives the reservation protocol a list of vifs in the
92 * Initial Reply.
93 *
94 * We explicitly list the ID because we can't assume that all routing
95 * protocols will use the same numbering scheme.
96 *
97 * The status is a bitmask of status flags, as defined above.  It is the
98 * responsibility of the reservation protocol to perform any status checks
99 * if it uses the MULTICAST_VIF socket option.
100 *
101 * The threshold indicates the ttl an outgoing packet needs in order to
102 * be forwarded. The reservation protocol must perform this check itself if
103 * it uses the MULTICAST_VIF socket option.
104 *
105 * The local address is the address of the physical interface over which
106 * packets are sent.
107 */
108struct rsrr_vif {
109    u_char id;				/* vif id */
110    u_char threshold;			/* vif threshold ttl */
111    u_short status;			/* vif status bitmask */
112    struct in_addr local_addr;		/* vif local address */
113};
114
115/* Definition of an RSRR Route Query.
116 *
117 * The query asks routing for the forwarding entry for a particular
118 * source and destination.  The query ID uniquely identifies the query
119 * for the reservation protocol.  Thus, the combination of the client's
120 * address and the query ID forms a unique identifier for routing.
121 * Flags are defined above.
122 */
123struct rsrr_rq {
124    struct in_addr dest_addr;		/* destination */
125    struct in_addr source_addr;		/* source */
126    u_long query_id;			/* query ID */
127};
128
129/* Definition of an RSRR Route Reply.
130 *
131 * Routing uses the reply to give the reservation protocol the
132 * forwarding entry for a source-destination pair.  Routing copies the
133 * query ID from the query and fills in the incoming vif and a bitmask
134 * of the outgoing vifs.
135 * Flags are defined above.
136 */
137struct rsrr_rr {
138    struct in_addr dest_addr;		/* destination */
139    struct in_addr source_addr;		/* source */
140    u_long query_id;			/* query ID */
141    u_short in_vif;			/* incoming vif */
142    u_short reserved;			/* reserved */
143    u_long out_vif_bm;			/* outgoing vif bitmask */
144};
145