Imported Upstream version 3.1.0
[debian/amanda] / ndmp-src / ndmp3_xmt.c
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_NDMP3
43
44
45 #define xdr_ndmp3_connect_close_request         xdr_void
46 #define xdr_ndmp3_connect_close_reply           xdr_void
47 #define xdr_ndmp3_config_get_host_info_request  xdr_void
48 #define xdr_ndmp3_config_get_connection_type_request xdr_void
49 #define xdr_ndmp3_config_get_butype_info_request xdr_void
50 #define xdr_ndmp3_config_get_fs_info_request    xdr_void
51 #define xdr_ndmp3_config_get_tape_info_request  xdr_void
52 #define xdr_ndmp3_config_get_scsi_info_request  xdr_void
53 #define xdr_ndmp3_config_get_server_info_request xdr_void
54 #define xdr_ndmp3_scsi_close_request            xdr_void
55 #define xdr_ndmp3_scsi_get_state_request        xdr_void
56 #define xdr_ndmp3_scsi_reset_device_request     xdr_void
57 #define xdr_ndmp3_scsi_reset_bus_request        xdr_void
58 #define xdr_ndmp3_tape_close_request            xdr_void
59 #define xdr_ndmp3_tape_get_state_request        xdr_void
60 #define xdr_ndmp3_data_get_state_request        xdr_void
61
62 #define xdr_ndmp3_data_abort_request            xdr_void
63 #define xdr_ndmp3_data_get_env_request          xdr_void
64 #define xdr_ndmp3_data_stop_request             xdr_void
65 #define xdr_ndmp3_notify_data_halted_reply      0
66 #define xdr_ndmp3_notify_connected_reply        0
67 #define xdr_ndmp3_notify_mover_halted_reply     0
68 #define xdr_ndmp3_notify_mover_paused_reply     0
69 #define xdr_ndmp3_notify_data_read_reply        0
70
71 #define xdr_ndmp3_log_message_reply             0
72 #define xdr_ndmp3_log_file_reply                0
73 #define xdr_ndmp3_fh_add_file_reply             0
74 #define xdr_ndmp3_fh_add_dir_reply              0
75 #define xdr_ndmp3_fh_add_node_reply             0
76
77 #define xdr_ndmp3_mover_get_state_request       xdr_void
78 #define xdr_ndmp3_mover_continue_request        xdr_void
79 #define xdr_ndmp3_mover_abort_request           xdr_void
80 #define xdr_ndmp3_mover_stop_request            xdr_void
81 #define xdr_ndmp3_mover_close_request           xdr_void
82
83
84
85
86 struct ndmp_xdr_message_table   ndmp3_xdr_message_table[] = {
87    { NDMP3_CONNECT_OPEN,
88      xdr_ndmp3_connect_open_request,
89      xdr_ndmp3_connect_open_reply,
90    },
91    { NDMP3_CONNECT_CLIENT_AUTH,
92      xdr_ndmp3_connect_client_auth_request,
93      xdr_ndmp3_connect_client_auth_reply,
94    },
95    { NDMP3_CONNECT_CLOSE,
96      xdr_ndmp3_connect_close_request,
97      xdr_ndmp3_connect_close_reply,
98    },
99    { NDMP3_CONNECT_SERVER_AUTH,
100      xdr_ndmp3_connect_server_auth_request,
101      xdr_ndmp3_connect_server_auth_reply,
102    },
103    { NDMP3_CONFIG_GET_HOST_INFO,
104      xdr_ndmp3_config_get_host_info_request,
105      xdr_ndmp3_config_get_host_info_reply,
106    },
107    { NDMP3_CONFIG_GET_CONNECTION_TYPE,
108      xdr_ndmp3_config_get_connection_type_request,
109      xdr_ndmp3_config_get_connection_type_reply,
110    },
111    { NDMP3_CONFIG_GET_AUTH_ATTR,
112      xdr_ndmp3_config_get_auth_attr_request,
113      xdr_ndmp3_config_get_auth_attr_reply,
114    },
115    { NDMP3_CONFIG_GET_BUTYPE_INFO,
116      xdr_ndmp3_config_get_butype_info_request,
117      xdr_ndmp3_config_get_butype_info_reply,
118    },
119    { NDMP3_CONFIG_GET_FS_INFO,
120      xdr_ndmp3_config_get_fs_info_request,
121      xdr_ndmp3_config_get_fs_info_reply,
122    },
123    { NDMP3_CONFIG_GET_TAPE_INFO,
124      xdr_ndmp3_config_get_tape_info_request,
125      xdr_ndmp3_config_get_tape_info_reply,
126    },
127    { NDMP3_CONFIG_GET_SCSI_INFO,
128      xdr_ndmp3_config_get_scsi_info_request,
129      xdr_ndmp3_config_get_scsi_info_reply,
130    },
131    { NDMP3_CONFIG_GET_SERVER_INFO,
132      xdr_ndmp3_config_get_server_info_request,
133      xdr_ndmp3_config_get_server_info_reply,
134    },
135    { NDMP3_SCSI_OPEN,
136      xdr_ndmp3_scsi_open_request,
137      xdr_ndmp3_scsi_open_reply,
138    },
139    { NDMP3_SCSI_CLOSE,
140      xdr_ndmp3_scsi_close_request,
141      xdr_ndmp3_scsi_close_reply,
142    },
143    { NDMP3_SCSI_GET_STATE,
144      xdr_ndmp3_scsi_get_state_request,
145      xdr_ndmp3_scsi_get_state_reply,
146    },
147    { NDMP3_SCSI_SET_TARGET,
148      xdr_ndmp3_scsi_set_target_request,
149      xdr_ndmp3_scsi_set_target_reply,
150    },
151    { NDMP3_SCSI_RESET_DEVICE,
152      xdr_ndmp3_scsi_reset_device_request,
153      xdr_ndmp3_scsi_reset_device_reply,
154    },
155    { NDMP3_SCSI_RESET_BUS,
156      xdr_ndmp3_scsi_reset_bus_request,
157      xdr_ndmp3_scsi_reset_bus_reply,
158    },
159    { NDMP3_SCSI_EXECUTE_CDB,
160      xdr_ndmp3_scsi_execute_cdb_request,
161      xdr_ndmp3_scsi_execute_cdb_reply,
162    },
163    { NDMP3_TAPE_OPEN,
164      xdr_ndmp3_tape_open_request,
165      xdr_ndmp3_tape_open_reply,
166    },
167    { NDMP3_TAPE_CLOSE,
168      xdr_ndmp3_tape_close_request,
169      xdr_ndmp3_tape_close_reply,
170    },
171    { NDMP3_TAPE_GET_STATE,
172      xdr_ndmp3_tape_get_state_request,
173      xdr_ndmp3_tape_get_state_reply,
174    },
175    { NDMP3_TAPE_MTIO,
176      xdr_ndmp3_tape_mtio_request,
177      xdr_ndmp3_tape_mtio_reply,
178    },
179    { NDMP3_TAPE_WRITE,
180      xdr_ndmp3_tape_write_request,
181      xdr_ndmp3_tape_write_reply,
182    },
183    { NDMP3_TAPE_READ,
184      xdr_ndmp3_tape_read_request,
185      xdr_ndmp3_tape_read_reply,
186    },
187    { NDMP3_TAPE_EXECUTE_CDB,
188      xdr_ndmp3_tape_execute_cdb_request,
189      xdr_ndmp3_tape_execute_cdb_reply,
190    },
191    { NDMP3_DATA_GET_STATE,
192      xdr_ndmp3_data_get_state_request,
193      xdr_ndmp3_data_get_state_reply,
194    },
195    { NDMP3_DATA_START_BACKUP,
196      xdr_ndmp3_data_start_backup_request,
197      xdr_ndmp3_data_start_backup_reply,
198    },
199    { NDMP3_DATA_START_RECOVER,
200      xdr_ndmp3_data_start_recover_request,
201      xdr_ndmp3_data_start_recover_reply,
202    },
203    { NDMP3_DATA_START_RECOVER_FILEHIST,
204      xdr_ndmp3_data_start_recover_filehist_request,
205      xdr_ndmp3_data_start_recover_filehist_reply,
206    },
207    { NDMP3_DATA_ABORT,
208      xdr_ndmp3_data_abort_request,
209      xdr_ndmp3_data_abort_reply,
210    },
211    { NDMP3_DATA_GET_ENV,
212      xdr_ndmp3_data_get_env_request,
213      xdr_ndmp3_data_get_env_reply,
214    },
215    { NDMP3_DATA_STOP,
216      xdr_ndmp3_data_stop_request,
217      xdr_ndmp3_data_stop_reply,
218    },
219    { NDMP3_DATA_LISTEN,
220      xdr_ndmp3_data_listen_request,
221      xdr_ndmp3_data_listen_reply,
222    },
223    { NDMP3_DATA_CONNECT,
224      xdr_ndmp3_data_connect_request,
225      xdr_ndmp3_data_connect_reply,
226    },
227    { NDMP3_NOTIFY_DATA_HALTED,
228      xdr_ndmp3_notify_data_halted_request,
229      xdr_ndmp3_notify_data_halted_reply,
230    },
231    { NDMP3_NOTIFY_CONNECTED,
232      xdr_ndmp3_notify_connected_request,
233      xdr_ndmp3_notify_connected_reply,
234    },
235    { NDMP3_NOTIFY_MOVER_HALTED,
236      xdr_ndmp3_notify_mover_halted_request,
237      xdr_ndmp3_notify_mover_halted_reply,
238    },
239    { NDMP3_NOTIFY_MOVER_PAUSED,
240      xdr_ndmp3_notify_mover_paused_request,
241      xdr_ndmp3_notify_mover_paused_reply,
242    },
243    { NDMP3_NOTIFY_DATA_READ,
244      xdr_ndmp3_notify_data_read_request,
245      xdr_ndmp3_notify_data_read_reply,
246    },
247    { NDMP3_LOG_FILE,
248      xdr_ndmp3_log_file_request,
249      xdr_ndmp3_log_file_reply,
250    },
251    { NDMP3_LOG_MESSAGE,
252      xdr_ndmp3_log_message_request,
253      xdr_ndmp3_log_message_reply,
254    },
255    { NDMP3_FH_ADD_FILE,
256      xdr_ndmp3_fh_add_file_request,
257      xdr_ndmp3_fh_add_file_reply,
258    },
259    { NDMP3_FH_ADD_DIR,
260      xdr_ndmp3_fh_add_dir_request,
261      xdr_ndmp3_fh_add_dir_reply,
262    },
263    { NDMP3_FH_ADD_NODE,
264      xdr_ndmp3_fh_add_node_request,
265      xdr_ndmp3_fh_add_node_reply,
266    },
267    { NDMP3_MOVER_GET_STATE,
268      xdr_ndmp3_mover_get_state_request,
269      xdr_ndmp3_mover_get_state_reply,
270    },
271    { NDMP3_MOVER_LISTEN,
272      xdr_ndmp3_mover_listen_request,
273      xdr_ndmp3_mover_listen_reply,
274    },
275    { NDMP3_MOVER_CONTINUE,
276      xdr_ndmp3_mover_continue_request,
277      xdr_ndmp3_mover_continue_reply,
278    },
279    { NDMP3_MOVER_ABORT,
280      xdr_ndmp3_mover_abort_request,
281      xdr_ndmp3_mover_abort_reply,
282    },
283    { NDMP3_MOVER_STOP,
284      xdr_ndmp3_mover_stop_request,
285      xdr_ndmp3_mover_stop_reply,
286    },
287    { NDMP3_MOVER_SET_WINDOW,
288      xdr_ndmp3_mover_set_window_request,
289      xdr_ndmp3_mover_set_window_reply,
290    },
291    { NDMP3_MOVER_READ,
292      xdr_ndmp3_mover_read_request,
293      xdr_ndmp3_mover_read_reply,
294    },
295    { NDMP3_MOVER_CLOSE,
296      xdr_ndmp3_mover_close_request,
297      xdr_ndmp3_mover_close_reply,
298    },
299    { NDMP3_MOVER_SET_RECORD_SIZE,
300      xdr_ndmp3_mover_set_record_size_request,
301      xdr_ndmp3_mover_set_record_size_reply,
302    },
303    { NDMP3_MOVER_CONNECT,
304      xdr_ndmp3_mover_connect_request,
305      xdr_ndmp3_mover_connect_reply,
306    },
307    {0}
308 };
309
310
311
312 /*
313  * XDR unsigned long integers
314  * same as xdr_long - open coded to save a proc call!
315  */
316 bool_t
317 xdr_ndmp3_u_quad(xdrs, objp)
318         register XDR *xdrs;
319         ndmp3_u_quad *objp;
320 {
321         u_long          hi, lo;
322
323         switch (xdrs->x_op) {
324         case XDR_DECODE:
325                 if (XDR_GETLONG(xdrs, (long*)&hi)
326                  && XDR_GETLONG(xdrs, (long*)&lo)) {
327                         *objp = ((unsigned long long)hi << 32) | (lo & 0xffffffff);
328                         return TRUE;
329                 }
330                 break;
331
332         case XDR_ENCODE:
333                 hi = *objp >> 32;
334                 lo = *objp;
335                 return XDR_PUTLONG(xdrs, (long*)&hi)
336                     && XDR_PUTLONG(xdrs, (long*)&lo);
337
338         case XDR_FREE:
339                 return (TRUE);
340         }
341
342         return (FALSE);
343 }
344
345 #endif /* !NDMOS_OPTION_NO_NDMP3 */