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