1 /* $NetBSD: rsrr.h,v 1.2 2002/10/01 03:41:13 itojun Exp $ */
4 * Copyright (c) 1993, 1998-2001.
5 * The University of Southern California/Information Sciences Institute.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
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.
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
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"
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))
43 /* Current maximum number of vifs. */
44 #define RSRR_MAX_VIFS 32
46 /* Maximum acceptable version */
47 #define RSRR_MAX_VERSION 1
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
56 /* RSRR Initial Reply (Vif) Status bits
57 * Each definition represents the position of the bit from right to left.
59 * Right-most bit is the disabled bit, set if the vif is administratively
62 #define RSRR_DISABLED_BIT 0
63 /* All other bits are zeroes */
65 /* RSRR Route Query/Reply flag bits
66 * Each definition represents the position of the bit from right to left.
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.
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 */
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.
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 */
89 /* Definition of a vif as seen by the reservation protocol.
91 * Routing gives the reservation protocol a list of vifs in the
94 * We explicitly list the ID because we can't assume that all routing
95 * protocols will use the same numbering scheme.
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.
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.
105 * The local address is the address of the physical interface over which
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 */
115 /* Definition of an RSRR Route Query.
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.
124 struct in_addr dest_addr
; /* destination */
125 struct in_addr source_addr
; /* source */
126 u_long query_id
; /* query ID */
129 /* Definition of an RSRR Route Reply.
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.
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 */