1 /*
2 * Copyright (c) 1998,1999,2000
3 * Traakan, Inc., Los Altos, CA
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 unmodified, this list of conditions, and the following
11 * disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29 /*
30 * Project: NDMJOB
31 * Ident: $Id: $
32 *
33 * Description:
34 *
35 */
36
37
38 #include "ndmos.h"
39 #include "ndmprotocol.h"
40
41
42 struct ndmp_xdr_message_table ndmp9_xdr_message_table[] = {
43 {
44 NDMP9_CONNECT_OPEN,
45 xdr_ndmp9_connect_open_request,
46 xdr_ndmp9_connect_open_reply,
47 },
48 {
49 NDMP9_CONNECT_CLIENT_AUTH,
50 xdr_ndmp9_connect_client_auth_request,
51 xdr_ndmp9_connect_client_auth_reply,
52 },
53 {
54 NDMP9_CONNECT_CLOSE,
55 xdr_ndmp9_connect_close_request,
56 xdr_ndmp9_connect_close_reply,
57 },
58 {
59 NDMP9_CONNECT_SERVER_AUTH,
60 xdr_ndmp9_connect_server_auth_request,
61 xdr_ndmp9_connect_server_auth_reply,
62 },
63 {
64 NDMP9_CONFIG_GET_HOST_INFO,
65 xdr_ndmp9_config_get_host_info_request,
66 xdr_ndmp9_config_get_host_info_reply,
67 },
68 {
69 NDMP9_CONFIG_GET_CONNECTION_TYPE,
70 xdr_ndmp9_config_get_connection_type_request,
71 xdr_ndmp9_config_get_connection_type_reply,
72 },
73 {
74 NDMP9_CONFIG_GET_AUTH_ATTR,
75 xdr_ndmp9_config_get_auth_attr_request,
76 xdr_ndmp9_config_get_auth_attr_reply,
77 },
78 {
79 NDMP9_CONFIG_GET_BUTYPE_INFO,
80 xdr_ndmp9_config_get_butype_info_request,
81 xdr_ndmp9_config_get_butype_info_reply,
82 },
83 {
84 NDMP9_CONFIG_GET_FS_INFO,
85 xdr_ndmp9_config_get_fs_info_request,
86 xdr_ndmp9_config_get_fs_info_reply,
87 },
88 {
89 NDMP9_CONFIG_GET_TAPE_INFO,
90 xdr_ndmp9_config_get_tape_info_request,
91 xdr_ndmp9_config_get_tape_info_reply,
92 },
93 {
94 NDMP9_CONFIG_GET_SCSI_INFO,
95 xdr_ndmp9_config_get_scsi_info_request,
96 xdr_ndmp9_config_get_scsi_info_reply,
97 },
98 {
99 NDMP9_CONFIG_GET_SERVER_INFO,
100 xdr_ndmp9_config_get_server_info_request,
101 xdr_ndmp9_config_get_server_info_reply,
102 },
103 {
104 NDMP9_SCSI_OPEN,
105 xdr_ndmp9_scsi_open_request,
106 xdr_ndmp9_scsi_open_reply,
107 },
108 {
109 NDMP9_SCSI_CLOSE,
110 xdr_ndmp9_scsi_close_request,
111 xdr_ndmp9_scsi_close_reply,
112 },
113 {
114 NDMP9_SCSI_GET_STATE,
115 xdr_ndmp9_scsi_get_state_request,
116 xdr_ndmp9_scsi_get_state_reply,
117 },
118 {
119 NDMP9_SCSI_RESET_DEVICE,
120 xdr_ndmp9_scsi_reset_device_request,
121 xdr_ndmp9_scsi_reset_device_reply,
122 },
123 {
124 NDMP9_SCSI_EXECUTE_CDB,
125 xdr_ndmp9_scsi_execute_cdb_request,
126 xdr_ndmp9_scsi_execute_cdb_reply,
127 },
128 {
129 NDMP9_TAPE_OPEN,
130 xdr_ndmp9_tape_open_request,
131 xdr_ndmp9_tape_open_reply,
132 },
133 {
134 NDMP9_TAPE_CLOSE,
135 xdr_ndmp9_tape_close_request,
136 xdr_ndmp9_tape_close_reply,
137 },
138 {
139 NDMP9_TAPE_GET_STATE,
140 xdr_ndmp9_tape_get_state_request,
141 xdr_ndmp9_tape_get_state_reply,
142 },
143 {
144 NDMP9_TAPE_MTIO,
145 xdr_ndmp9_tape_mtio_request,
146 xdr_ndmp9_tape_mtio_reply,
147 },
148 {
149 NDMP9_TAPE_WRITE,
150 xdr_ndmp9_tape_write_request,
151 xdr_ndmp9_tape_write_reply,
152 },
153 {
154 NDMP9_TAPE_READ,
155 xdr_ndmp9_tape_read_request,
156 xdr_ndmp9_tape_read_reply,
157 },
158 {
159 NDMP9_TAPE_EXECUTE_CDB,
160 xdr_ndmp9_tape_execute_cdb_request,
161 xdr_ndmp9_tape_execute_cdb_reply,
162 },
163 {
164 NDMP9_DATA_GET_STATE,
165 xdr_ndmp9_data_get_state_request,
166 xdr_ndmp9_data_get_state_reply,
167 },
168 {
169 NDMP9_DATA_START_BACKUP,
170 xdr_ndmp9_data_start_backup_request,
171 xdr_ndmp9_data_start_backup_reply,
172 },
173 {
174 NDMP9_DATA_START_RECOVER,
175 xdr_ndmp9_data_start_recover_request,
176 xdr_ndmp9_data_start_recover_reply,
177 },
178 {
179 NDMP9_DATA_START_RECOVER_FILEHIST,
180 xdr_ndmp9_data_start_recover_filehist_request,
181 xdr_ndmp9_data_start_recover_filehist_reply,
182 },
183 {
184 NDMP9_DATA_ABORT,
185 xdr_ndmp9_data_abort_request,
186 xdr_ndmp9_data_abort_reply,
187 },
188 {
189 NDMP9_DATA_GET_ENV,
190 xdr_ndmp9_data_get_env_request,
191 xdr_ndmp9_data_get_env_reply,
192 },
193 {
194 NDMP9_DATA_STOP,
195 xdr_ndmp9_data_stop_request,
196 xdr_ndmp9_data_stop_reply,
197 },
198 {
199 NDMP9_DATA_LISTEN,
200 xdr_ndmp9_data_listen_request,
201 xdr_ndmp9_data_listen_reply,
202 },
203 {
204 NDMP9_DATA_CONNECT,
205 xdr_ndmp9_data_connect_request,
206 xdr_ndmp9_data_connect_reply,
207 },
208 {NDMP9_NOTIFY_DATA_HALTED, xdr_ndmp9_notify_data_halted_request, 0},
209 {NDMP9_NOTIFY_CONNECTED, xdr_ndmp9_notify_connected_request, 0},
210 {NDMP9_NOTIFY_MOVER_HALTED, xdr_ndmp9_notify_mover_halted_request, 0},
211 {NDMP9_NOTIFY_MOVER_PAUSED, xdr_ndmp9_notify_mover_paused_request, 0},
212 {NDMP9_NOTIFY_DATA_READ, xdr_ndmp9_notify_data_read_request, 0},
213 {NDMP9_LOG_FILE, xdr_ndmp9_log_file_request, 0},
214 {NDMP9_LOG_MESSAGE, xdr_ndmp9_log_message_request, 0},
215 {NDMP9_FH_ADD_FILE, xdr_ndmp9_fh_add_file_request, 0},
216 {NDMP9_FH_ADD_DIR, xdr_ndmp9_fh_add_dir_request, 0},
217 {NDMP9_FH_ADD_NODE, xdr_ndmp9_fh_add_node_request, 0},
218 {
219 NDMP9_MOVER_GET_STATE,
220 xdr_ndmp9_mover_get_state_request,
221 xdr_ndmp9_mover_get_state_reply,
222 },
223 {
224 NDMP9_MOVER_LISTEN,
225 xdr_ndmp9_mover_listen_request,
226 xdr_ndmp9_mover_listen_reply,
227 },
228 {
229 NDMP9_MOVER_CONTINUE,
230 xdr_ndmp9_mover_continue_request,
231 xdr_ndmp9_mover_continue_reply,
232 },
233 {
234 NDMP9_MOVER_ABORT,
235 xdr_ndmp9_mover_abort_request,
236 xdr_ndmp9_mover_abort_reply,
237 },
238 {
239 NDMP9_MOVER_STOP,
240 xdr_ndmp9_mover_stop_request,
241 xdr_ndmp9_mover_stop_reply,
242 },
243 {
244 NDMP9_MOVER_SET_WINDOW,
245 xdr_ndmp9_mover_set_window_request,
246 xdr_ndmp9_mover_set_window_reply,
247 },
248 {
249 NDMP9_MOVER_READ,
250 xdr_ndmp9_mover_read_request,
251 xdr_ndmp9_mover_read_reply,
252 },
253 {
254 NDMP9_MOVER_CLOSE,
255 xdr_ndmp9_mover_close_request,
256 xdr_ndmp9_mover_close_reply,
257 },
258 {
259 NDMP9_MOVER_SET_RECORD_SIZE,
260 xdr_ndmp9_mover_set_record_size_request,
261 xdr_ndmp9_mover_set_record_size_reply,
262 },
263 {
264 NDMP9_MOVER_CONNECT,
265 xdr_ndmp9_mover_connect_request,
266 xdr_ndmp9_mover_connect_reply,
267 },
268 {0}};
269
270
271 /*
272 * XDR unsigned long integers
273 * same as xdr_long - open coded to save a proc call!
274 */
xdr_ndmp9_u_quad(register XDR * xdrs,ndmp9_u_quad * objp)275 bool_t xdr_ndmp9_u_quad(register XDR* xdrs, ndmp9_u_quad* objp)
276 {
277 uint32_t hi, lo;
278
279 switch (xdrs->x_op) {
280 case XDR_DECODE:
281 #if defined(_LP64)
282 if (XDR_GETINT32(xdrs, (int32_t*)&hi) &&
283 XDR_GETINT32(xdrs, (int32_t*)&lo)) {
284 #else
285 if (XDR_GETLONG(xdrs, (long*)&hi) && XDR_GETLONG(xdrs, (long*)&lo)) {
286 #endif
287 *objp = ((uint64_t)hi << 32) | (lo & 0xffffffff);
288 return TRUE;
289 }
290 break;
291
292 case XDR_ENCODE:
293 hi = *objp >> 32;
294 lo = *objp & 0xffffffff;
295 #if defined(_LP64)
296 return XDR_PUTINT32(xdrs, (int32_t*)&hi) &&
297 XDR_PUTINT32(xdrs, (int32_t*)&lo);
298 #else
299 return XDR_PUTLONG(xdrs, (long*)&hi) && XDR_PUTLONG(xdrs, (long*)&lo);
300 #endif
301
302 case XDR_FREE:
303 return (TRUE);
304 }
305
306 return (FALSE);
307 }
308
309 bool_t xdr_ndmp9_no_arguments(register XDR* xdrs, ndmp9_u_quad* objp)
310 {
311 return TRUE;
312 }
313