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 #ifndef NDMOS_OPTION_NO_NDMP4
43 
44 
45 #define xdr_ndmp4_connect_close_request xdr_void
46 #define xdr_ndmp4_connect_close_reply xdr_void
47 #define xdr_ndmp4_config_get_host_info_request xdr_void
48 #define xdr_ndmp4_config_get_connection_type_request xdr_void
49 #define xdr_ndmp4_config_get_butype_info_request xdr_void
50 #define xdr_ndmp4_config_get_fs_info_request xdr_void
51 #define xdr_ndmp4_config_get_tape_info_request xdr_void
52 #define xdr_ndmp4_config_get_scsi_info_request xdr_void
53 #define xdr_ndmp4_config_get_server_info_request xdr_void
54 #define xdr_ndmp4_scsi_close_request xdr_void
55 #define xdr_ndmp4_scsi_get_state_request xdr_void
56 #define xdr_ndmp4_scsi_reset_device_request xdr_void
57 #define xdr_ndmp4_scsi_reset_bus_request xdr_void
58 #define xdr_ndmp4_tape_close_request xdr_void
59 #define xdr_ndmp4_tape_get_state_request xdr_void
60 #define xdr_ndmp4_data_get_state_request xdr_void
61 
62 #define xdr_ndmp4_data_abort_request xdr_void
63 #define xdr_ndmp4_data_get_env_request xdr_void
64 #define xdr_ndmp4_data_stop_request xdr_void
65 
66 #define xdr_ndmp4_mover_get_state_request xdr_void
67 #define xdr_ndmp4_mover_continue_request xdr_void
68 #define xdr_ndmp4_mover_abort_request xdr_void
69 #define xdr_ndmp4_mover_stop_request xdr_void
70 #define xdr_ndmp4_mover_close_request xdr_void
71 
72 
73 struct ndmp_xdr_message_table ndmp4_xdr_message_table[] = {
74     {
75         NDMP4_CONNECT_OPEN,
76         xdr_ndmp4_connect_open_request,
77         xdr_ndmp4_connect_open_reply,
78     },
79     {
80         NDMP4_CONNECT_CLIENT_AUTH,
81         xdr_ndmp4_connect_client_auth_request,
82         xdr_ndmp4_connect_client_auth_reply,
83     },
84     {
85         NDMP4_CONNECT_CLOSE,
86         xdr_ndmp4_connect_close_request,
87         xdr_ndmp4_connect_close_reply,
88     },
89     {
90         NDMP4_CONNECT_SERVER_AUTH,
91         xdr_ndmp4_connect_server_auth_request,
92         xdr_ndmp4_connect_server_auth_reply,
93     },
94     {
95         NDMP4_CONFIG_GET_HOST_INFO,
96         xdr_ndmp4_config_get_host_info_request,
97         xdr_ndmp4_config_get_host_info_reply,
98     },
99     {
100         NDMP4_CONFIG_GET_CONNECTION_TYPE,
101         xdr_ndmp4_config_get_connection_type_request,
102         xdr_ndmp4_config_get_connection_type_reply,
103     },
104     {
105         NDMP4_CONFIG_GET_AUTH_ATTR,
106         xdr_ndmp4_config_get_auth_attr_request,
107         xdr_ndmp4_config_get_auth_attr_reply,
108     },
109     {
110         NDMP4_CONFIG_GET_BUTYPE_INFO,
111         xdr_ndmp4_config_get_butype_info_request,
112         xdr_ndmp4_config_get_butype_info_reply,
113     },
114     {
115         NDMP4_CONFIG_GET_FS_INFO,
116         xdr_ndmp4_config_get_fs_info_request,
117         xdr_ndmp4_config_get_fs_info_reply,
118     },
119     {
120         NDMP4_CONFIG_GET_TAPE_INFO,
121         xdr_ndmp4_config_get_tape_info_request,
122         xdr_ndmp4_config_get_tape_info_reply,
123     },
124     {
125         NDMP4_CONFIG_GET_SCSI_INFO,
126         xdr_ndmp4_config_get_scsi_info_request,
127         xdr_ndmp4_config_get_scsi_info_reply,
128     },
129     {
130         NDMP4_CONFIG_GET_SERVER_INFO,
131         xdr_ndmp4_config_get_server_info_request,
132         xdr_ndmp4_config_get_server_info_reply,
133     },
134     {
135         NDMP4_SCSI_OPEN,
136         xdr_ndmp4_scsi_open_request,
137         xdr_ndmp4_scsi_open_reply,
138     },
139     {
140         NDMP4_SCSI_CLOSE,
141         xdr_ndmp4_scsi_close_request,
142         xdr_ndmp4_scsi_close_reply,
143     },
144     {
145         NDMP4_SCSI_GET_STATE,
146         xdr_ndmp4_scsi_get_state_request,
147         xdr_ndmp4_scsi_get_state_reply,
148     },
149     {
150         NDMP4_SCSI_RESET_DEVICE,
151         xdr_ndmp4_scsi_reset_device_request,
152         xdr_ndmp4_scsi_reset_device_reply,
153     },
154     {
155         NDMP4_SCSI_EXECUTE_CDB,
156         xdr_ndmp4_scsi_execute_cdb_request,
157         xdr_ndmp4_scsi_execute_cdb_reply,
158     },
159     {
160         NDMP4_TAPE_OPEN,
161         xdr_ndmp4_tape_open_request,
162         xdr_ndmp4_tape_open_reply,
163     },
164     {
165         NDMP4_TAPE_CLOSE,
166         xdr_ndmp4_tape_close_request,
167         xdr_ndmp4_tape_close_reply,
168     },
169     {
170         NDMP4_TAPE_GET_STATE,
171         xdr_ndmp4_tape_get_state_request,
172         xdr_ndmp4_tape_get_state_reply,
173     },
174     {
175         NDMP4_TAPE_MTIO,
176         xdr_ndmp4_tape_mtio_request,
177         xdr_ndmp4_tape_mtio_reply,
178     },
179     {
180         NDMP4_TAPE_WRITE,
181         xdr_ndmp4_tape_write_request,
182         xdr_ndmp4_tape_write_reply,
183     },
184     {
185         NDMP4_TAPE_READ,
186         xdr_ndmp4_tape_read_request,
187         xdr_ndmp4_tape_read_reply,
188     },
189     {
190         NDMP4_TAPE_EXECUTE_CDB,
191         xdr_ndmp4_tape_execute_cdb_request,
192         xdr_ndmp4_tape_execute_cdb_reply,
193     },
194     {
195         NDMP4_DATA_GET_STATE,
196         xdr_ndmp4_data_get_state_request,
197         xdr_ndmp4_data_get_state_reply,
198     },
199     {
200         NDMP4_DATA_START_BACKUP,
201         xdr_ndmp4_data_start_backup_request,
202         xdr_ndmp4_data_start_backup_reply,
203     },
204     {
205         NDMP4_DATA_START_RECOVER,
206         xdr_ndmp4_data_start_recover_request,
207         xdr_ndmp4_data_start_recover_reply,
208     },
209     {
210         NDMP4_DATA_START_RECOVER_FILEHIST,
211         xdr_ndmp4_data_start_recover_filehist_request,
212         xdr_ndmp4_data_start_recover_filehist_reply,
213     },
214     {
215         NDMP4_DATA_ABORT,
216         xdr_ndmp4_data_abort_request,
217         xdr_ndmp4_data_abort_reply,
218     },
219     {
220         NDMP4_DATA_GET_ENV,
221         xdr_ndmp4_data_get_env_request,
222         xdr_ndmp4_data_get_env_reply,
223     },
224     {
225         NDMP4_DATA_STOP,
226         xdr_ndmp4_data_stop_request,
227         xdr_ndmp4_data_stop_reply,
228     },
229     {
230         NDMP4_DATA_LISTEN,
231         xdr_ndmp4_data_listen_request,
232         xdr_ndmp4_data_listen_reply,
233     },
234     {
235         NDMP4_DATA_CONNECT,
236         xdr_ndmp4_data_connect_request,
237         xdr_ndmp4_data_connect_reply,
238     },
239     {NDMP4_NOTIFY_DATA_HALTED, xdr_ndmp4_notify_data_halted_post, 0},
240     {NDMP4_NOTIFY_CONNECTION_STATUS, xdr_ndmp4_notify_connection_status_post,
241      0},
242     {NDMP4_NOTIFY_MOVER_HALTED, xdr_ndmp4_notify_mover_halted_post, 0},
243     {NDMP4_NOTIFY_MOVER_PAUSED, xdr_ndmp4_notify_mover_paused_post, 0},
244     {NDMP4_NOTIFY_DATA_READ, xdr_ndmp4_notify_data_read_post, 0},
245     {NDMP4_LOG_FILE, xdr_ndmp4_log_file_post, 0},
246     {NDMP4_LOG_MESSAGE, xdr_ndmp4_log_message_post, 0},
247     {NDMP4_FH_ADD_FILE, xdr_ndmp4_fh_add_file_post, 0},
248     {NDMP4_FH_ADD_DIR, xdr_ndmp4_fh_add_dir_post, 0},
249     {NDMP4_FH_ADD_NODE, xdr_ndmp4_fh_add_node_post, 0},
250     {
251         NDMP4_MOVER_GET_STATE,
252         xdr_ndmp4_mover_get_state_request,
253         xdr_ndmp4_mover_get_state_reply,
254     },
255     {
256         NDMP4_MOVER_LISTEN,
257         xdr_ndmp4_mover_listen_request,
258         xdr_ndmp4_mover_listen_reply,
259     },
260     {
261         NDMP4_MOVER_CONTINUE,
262         xdr_ndmp4_mover_continue_request,
263         xdr_ndmp4_mover_continue_reply,
264     },
265     {
266         NDMP4_MOVER_ABORT,
267         xdr_ndmp4_mover_abort_request,
268         xdr_ndmp4_mover_abort_reply,
269     },
270     {
271         NDMP4_MOVER_STOP,
272         xdr_ndmp4_mover_stop_request,
273         xdr_ndmp4_mover_stop_reply,
274     },
275     {
276         NDMP4_MOVER_SET_WINDOW,
277         xdr_ndmp4_mover_set_window_request,
278         xdr_ndmp4_mover_set_window_reply,
279     },
280     {
281         NDMP4_MOVER_READ,
282         xdr_ndmp4_mover_read_request,
283         xdr_ndmp4_mover_read_reply,
284     },
285     {
286         NDMP4_MOVER_CLOSE,
287         xdr_ndmp4_mover_close_request,
288         xdr_ndmp4_mover_close_reply,
289     },
290     {
291         NDMP4_MOVER_SET_RECORD_SIZE,
292         xdr_ndmp4_mover_set_record_size_request,
293         xdr_ndmp4_mover_set_record_size_reply,
294     },
295     {
296         NDMP4_MOVER_CONNECT,
297         xdr_ndmp4_mover_connect_request,
298         xdr_ndmp4_mover_connect_reply,
299     },
300     {0}};
301 
302 
303 /*
304  * XDR unsigned long integers
305  * same as xdr_long - open coded to save a proc call!
306  */
xdr_ndmp4_u_quad(register XDR * xdrs,ndmp4_u_quad * objp)307 bool_t xdr_ndmp4_u_quad(register XDR* xdrs, ndmp4_u_quad* objp)
308 {
309   uint32_t hi, lo;
310 
311   switch (xdrs->x_op) {
312     case XDR_DECODE:
313 #if defined(_LP64)
314       if (XDR_GETINT32(xdrs, (int32_t*)&hi) &&
315           XDR_GETINT32(xdrs, (int32_t*)&lo)) {
316 #else
317       if (XDR_GETLONG(xdrs, (long*)&hi) && XDR_GETLONG(xdrs, (long*)&lo)) {
318 #endif
319         *objp = ((uint64_t)hi << 32) | (lo & 0xffffffff);
320         return TRUE;
321       }
322       break;
323 
324     case XDR_ENCODE:
325       hi = *objp >> 32;
326       lo = *objp & 0xffffffff;
327 #if defined(_LP64)
328       return XDR_PUTINT32(xdrs, (int32_t*)&hi) &&
329              XDR_PUTINT32(xdrs, (int32_t*)&lo);
330 #else
331       return XDR_PUTLONG(xdrs, (long*)&hi) && XDR_PUTLONG(xdrs, (long*)&lo);
332 #endif
333 
334     case XDR_FREE:
335       return (TRUE);
336   }
337 
338   return (FALSE);
339 }
340 
341 #endif /* !NDMOS_OPTION_NO_NDMP4 */
342