3 * Traakan, Inc., Los Altos, CA
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice unmodified, this list of conditions, and the following
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.
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
38 #include "ndmos.h" /* rpc/rpc.h */
39 #include "ndmprotocol.h"
40 #include "ndmp_msg_buf.h"
41 #include "ndmp_translate.h"
44 #ifndef NDMOS_OPTION_NO_NDMP2
49 ****************************************************************
56 struct enum_conversion ndmp_29_error[] = {
57 { NDMP2_UNDEFINED_ERR, NDMP9_UNDEFINED_ERR }, /* default */
58 { NDMP2_NO_ERR, NDMP9_NO_ERR },
59 { NDMP2_NOT_SUPPORTED_ERR, NDMP9_NOT_SUPPORTED_ERR },
60 { NDMP2_DEVICE_BUSY_ERR, NDMP9_DEVICE_BUSY_ERR },
61 { NDMP2_DEVICE_OPENED_ERR, NDMP9_DEVICE_OPENED_ERR },
62 { NDMP2_NOT_AUTHORIZED_ERR, NDMP9_NOT_AUTHORIZED_ERR },
63 { NDMP2_PERMISSION_ERR, NDMP9_PERMISSION_ERR },
64 { NDMP2_DEV_NOT_OPEN_ERR, NDMP9_DEV_NOT_OPEN_ERR },
65 { NDMP2_IO_ERR, NDMP9_IO_ERR },
66 { NDMP2_TIMEOUT_ERR, NDMP9_TIMEOUT_ERR },
67 { NDMP2_ILLEGAL_ARGS_ERR, NDMP9_ILLEGAL_ARGS_ERR },
68 { NDMP2_NO_TAPE_LOADED_ERR, NDMP9_NO_TAPE_LOADED_ERR },
69 { NDMP2_WRITE_PROTECT_ERR, NDMP9_WRITE_PROTECT_ERR },
70 { NDMP2_EOF_ERR, NDMP9_EOF_ERR },
71 { NDMP2_EOM_ERR, NDMP9_EOM_ERR },
72 { NDMP2_FILE_NOT_FOUND_ERR, NDMP9_FILE_NOT_FOUND_ERR },
73 { NDMP2_BAD_FILE_ERR, NDMP9_BAD_FILE_ERR },
74 { NDMP2_NO_DEVICE_ERR, NDMP9_NO_DEVICE_ERR },
75 { NDMP2_NO_BUS_ERR, NDMP9_NO_BUS_ERR },
76 { NDMP2_XDR_DECODE_ERR, NDMP9_XDR_DECODE_ERR },
77 { NDMP2_ILLEGAL_STATE_ERR, NDMP9_ILLEGAL_STATE_ERR },
78 { NDMP2_UNDEFINED_ERR, NDMP9_UNDEFINED_ERR },
79 { NDMP2_XDR_ENCODE_ERR, NDMP9_XDR_ENCODE_ERR },
80 { NDMP2_NO_MEM_ERR, NDMP9_NO_MEM_ERR },
81 END_ENUM_CONVERSION_TABLE
90 *error9 = convert_enum_to_9 (ndmp_29_error, *error2);
99 *error2 = convert_enum_from_9 (ndmp_29_error, *error9);
106 ****************************************************************
114 CNVT_STRDUP_TO_9(pval2, pval9, name);
115 CNVT_STRDUP_TO_9(pval2, pval9, value);
125 CNVT_STRDUP_FROM_9(pval2, pval9, name);
126 CNVT_STRDUP_FROM_9(pval2, pval9, value);
139 for (i = 0; i < n_pval; i++)
140 ndmp_2to9_pval (&pval2[i], &pval9[i]);
153 for (i = 0; i < n_pval; i++)
154 ndmp_9to2_pval (&pval9[i], &pval2[i]);
160 ndmp_2to9_pval_vec_dup (
162 ndmp9_pval **pval9_p,
165 *pval9_p = NDMOS_MACRO_NEWN (ndmp9_pval, n_pval);
169 return ndmp_2to9_pval_vec (pval2, *pval9_p, n_pval);
173 ndmp_9to2_pval_vec_dup (
175 ndmp2_pval **pval2_p,
178 *pval2_p = NDMOS_MACRO_NEWN (ndmp2_pval, n_pval);
182 return ndmp_9to2_pval_vec (pval9, *pval2_p, n_pval);
190 struct enum_conversion ndmp_29_mover_addr_type[] = {
191 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL }, /* default */
192 { NDMP2_ADDR_LOCAL, NDMP9_ADDR_LOCAL },
193 { NDMP2_ADDR_TCP, NDMP9_ADDR_TCP },
194 END_ENUM_CONVERSION_TABLE
199 ndmp_2to9_mover_addr (
200 ndmp2_mover_addr *addr2,
203 switch (addr2->addr_type) {
204 case NDMP2_ADDR_LOCAL:
205 addr9->addr_type = NDMP9_ADDR_LOCAL;
209 addr9->addr_type = NDMP9_ADDR_TCP;
210 addr9->ndmp9_addr_u.tcp_addr.ip_addr =
211 addr2->ndmp2_mover_addr_u.addr.ip_addr;
212 addr9->ndmp9_addr_u.tcp_addr.port =
213 addr2->ndmp2_mover_addr_u.addr.port;
217 NDMOS_MACRO_ZEROFILL (addr9);
218 addr9->addr_type = -1;
226 ndmp_9to2_mover_addr (
228 ndmp2_mover_addr *addr2)
230 switch (addr9->addr_type) {
231 case NDMP9_ADDR_LOCAL:
232 addr2->addr_type = NDMP2_ADDR_LOCAL;
236 addr2->addr_type = NDMP2_ADDR_TCP;
237 addr2->ndmp2_mover_addr_u.addr.ip_addr =
238 addr9->ndmp9_addr_u.tcp_addr.ip_addr;
239 addr2->ndmp2_mover_addr_u.addr.port =
240 addr9->ndmp9_addr_u.tcp_addr.port;
244 NDMOS_MACRO_ZEROFILL (addr2);
245 addr2->addr_type = -1;
257 ****************************************************************
260 struct enum_conversion ndmp_29_auth_type[] = {
261 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL }, /* default */
262 { NDMP2_AUTH_NONE, NDMP9_AUTH_NONE },
263 { NDMP2_AUTH_TEXT, NDMP9_AUTH_TEXT },
264 { NDMP2_AUTH_MD5, NDMP9_AUTH_MD5 },
265 END_ENUM_CONVERSION_TABLE
269 ndmp_2to9_auth_data (
270 ndmp2_auth_data *auth_data2,
271 ndmp9_auth_data *auth_data9)
275 ndmp2_auth_text *text2;
276 ndmp9_auth_text *text9;
277 ndmp2_auth_md5 *md52;
278 ndmp9_auth_md5 *md59;
280 switch (auth_data2->auth_type) {
281 case NDMP2_AUTH_NONE:
282 auth_data9->auth_type = NDMP9_AUTH_NONE;
285 case NDMP2_AUTH_TEXT:
286 auth_data9->auth_type = NDMP9_AUTH_TEXT;
287 text2 = &auth_data2->ndmp2_auth_data_u.auth_text;
288 text9 = &auth_data9->ndmp9_auth_data_u.auth_text;
289 rc = CNVT_STRDUP_TO_9(text2, text9, auth_id);
291 return rc; /* no mem */
293 rc = CNVT_STRDUP_TO_9(text2, text9, auth_password);
295 NDMOS_API_FREE (text9->auth_id);
297 return rc; /* no mem */
302 auth_data9->auth_type = NDMP9_AUTH_MD5;
303 md52 = &auth_data2->ndmp2_auth_data_u.auth_md5;
304 md59 = &auth_data9->ndmp9_auth_data_u.auth_md5;
305 rc = CNVT_STRDUP_TO_9(md52, md59, auth_id);
307 return rc; /* no mem */
309 NDMOS_API_BCOPY (md52->auth_digest, md59->auth_digest, 16);
313 auth_data9->auth_type = auth_data2->auth_type;
314 NDMOS_MACRO_ZEROFILL (&auth_data9->ndmp9_auth_data_u);
323 ndmp_9to2_auth_data (
324 ndmp9_auth_data *auth_data9,
325 ndmp2_auth_data *auth_data2)
329 ndmp9_auth_text *text9;
330 ndmp2_auth_text *text2;
331 ndmp9_auth_md5 *md59;
332 ndmp2_auth_md5 *md52;
334 switch (auth_data9->auth_type) {
335 case NDMP9_AUTH_NONE:
336 auth_data2->auth_type = NDMP2_AUTH_NONE;
339 case NDMP9_AUTH_TEXT:
340 auth_data2->auth_type = NDMP2_AUTH_TEXT;
341 text9 = &auth_data9->ndmp9_auth_data_u.auth_text;
342 text2 = &auth_data2->ndmp2_auth_data_u.auth_text;
343 rc = CNVT_STRDUP_FROM_9(text2, text9, auth_id);
345 return rc; /* no mem */
347 rc = CNVT_STRDUP_FROM_9(text2, text9, auth_password);
349 NDMOS_API_FREE (text9->auth_id);
351 return rc; /* no mem */
356 auth_data2->auth_type = NDMP2_AUTH_MD5;
357 md59 = &auth_data9->ndmp9_auth_data_u.auth_md5;
358 md52 = &auth_data2->ndmp2_auth_data_u.auth_md5;
359 rc = CNVT_STRDUP_FROM_9(md52, md59, auth_id);
361 return rc; /* no mem */
363 NDMOS_API_BCOPY (md59->auth_digest, md52->auth_digest, 16);
367 auth_data2->auth_type = auth_data9->auth_type;
368 NDMOS_MACRO_ZEROFILL (&auth_data2->ndmp2_auth_data_u);
377 ndmp_2to9_auth_attr (
378 ndmp2_auth_attr *auth_attr2,
379 ndmp9_auth_attr *auth_attr9)
383 switch (auth_attr2->auth_type) {
384 case NDMP2_AUTH_NONE:
385 auth_attr9->auth_type = NDMP9_AUTH_NONE;
388 case NDMP2_AUTH_TEXT:
389 auth_attr9->auth_type = NDMP9_AUTH_TEXT;
393 auth_attr9->auth_type = NDMP9_AUTH_MD5;
394 NDMOS_API_BCOPY (auth_attr2->ndmp2_auth_attr_u.challenge,
395 auth_attr9->ndmp9_auth_attr_u.challenge, 64);
399 auth_attr9->auth_type = auth_attr2->auth_type;
400 NDMOS_MACRO_ZEROFILL (&auth_attr9->ndmp9_auth_attr_u);
409 ndmp_9to2_auth_attr (
410 ndmp9_auth_attr *auth_attr9,
411 ndmp2_auth_attr *auth_attr2)
415 switch (auth_attr9->auth_type) {
416 case NDMP9_AUTH_NONE:
417 auth_attr2->auth_type = NDMP2_AUTH_NONE;
420 case NDMP9_AUTH_TEXT:
421 auth_attr2->auth_type = NDMP2_AUTH_TEXT;
425 auth_attr2->auth_type = NDMP2_AUTH_MD5;
426 NDMOS_API_BCOPY (auth_attr9->ndmp9_auth_attr_u.challenge,
427 auth_attr2->ndmp2_auth_attr_u.challenge, 64);
431 auth_attr2->auth_type = auth_attr9->auth_type;
432 NDMOS_MACRO_ZEROFILL (&auth_attr2->ndmp2_auth_attr_u);
447 ndmp_2to9_connect_open_request (
448 ndmp2_connect_open_request *request2,
449 ndmp9_connect_open_request *request9)
451 CNVT_TO_9 (request2, request9, protocol_version);
456 ndmp_9to2_connect_open_request (
457 ndmp9_connect_open_request *request9,
458 ndmp2_connect_open_request *request2)
460 CNVT_FROM_9 (request2, request9, protocol_version);
466 * ndmp_connect_client_auth
473 ndmp_2to9_connect_client_auth_request (
474 ndmp2_connect_client_auth_request *request2,
475 ndmp9_connect_client_auth_request *request9)
479 rc = ndmp_2to9_auth_data (&request2->auth_data, &request9->auth_data);
485 ndmp_9to2_connect_client_auth_request (
486 ndmp9_connect_client_auth_request *request9,
487 ndmp2_connect_client_auth_request *request2)
491 rc = ndmp_9to2_auth_data (&request9->auth_data, &request2->auth_data);
499 * no arg request, **NO REPLY**
503 * ndmp_connect_server_auth
508 ndmp_2to9_connect_server_auth_request (
509 ndmp2_connect_server_auth_request *request2,
510 ndmp9_connect_server_auth_request *request9)
516 ndmp_9to2_connect_server_auth_request (
517 ndmp9_connect_server_auth_request *request9,
518 ndmp2_connect_server_auth_request *request2)
528 ****************************************************************
532 * ndmp_config_get_host_info
537 ndmp_2to9_config_get_host_info_reply (
538 ndmp2_config_get_host_info_reply *reply2,
539 ndmp9_config_get_host_info_reply *reply9)
541 unsigned int i, n_error = 0;
543 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
544 CNVT_STRDUP_TO_9x (reply2, reply9, hostname, config_info.hostname);
545 CNVT_STRDUP_TO_9x (reply2, reply9, os_type, config_info.os_type);
546 CNVT_STRDUP_TO_9x (reply2, reply9, os_vers, config_info.os_vers);
547 CNVT_STRDUP_TO_9x (reply2, reply9, hostid, config_info.hostid);
549 reply9->config_info.authtypes = 0;
550 for (i = 0; i < reply2->auth_type.auth_type_len; i++) {
551 switch (reply2->auth_type.auth_type_val[i]) {
552 case NDMP2_AUTH_NONE:
553 reply9->config_info.authtypes |=
554 NDMP9_CONFIG_AUTHTYPE_NONE;
557 case NDMP2_AUTH_TEXT:
558 reply9->config_info.authtypes |=
559 NDMP9_CONFIG_AUTHTYPE_TEXT;
563 reply9->config_info.authtypes |=
564 NDMP9_CONFIG_AUTHTYPE_MD5;
578 ndmp_9to2_config_get_host_info_reply (
579 ndmp9_config_get_host_info_reply *reply9,
580 ndmp2_config_get_host_info_reply *reply2)
584 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
585 CNVT_STRDUP_FROM_9x (reply2, reply9, hostname, config_info.hostname);
586 CNVT_STRDUP_FROM_9x (reply2, reply9, os_type, config_info.os_type);
587 CNVT_STRDUP_FROM_9x (reply2, reply9, os_vers, config_info.os_vers);
588 CNVT_STRDUP_FROM_9x (reply2, reply9, hostid, config_info.hostid);
590 reply2->auth_type.auth_type_val = NDMOS_MACRO_NEWN(ndmp2_auth_type, 3);
591 if (!reply2->auth_type.auth_type_val) {
596 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_NONE) {
597 reply2->auth_type.auth_type_val[i++] = NDMP2_AUTH_NONE;
599 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_TEXT) {
600 reply2->auth_type.auth_type_val[i++] = NDMP2_AUTH_TEXT;
602 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_MD5) {
603 reply2->auth_type.auth_type_val[i++] = NDMP2_AUTH_MD5;
605 reply2->auth_type.auth_type_len = i;
612 * ndmp_config_get_butype_attr
613 * ndmp2_config_get_butype_attr handled
614 * as version specific dispatch function
615 * in ndma_comm_dispatch.c
620 * ndmp_config_get_mover_type
625 ndmp_2to9_config_get_mover_type_reply (
626 ndmp2_config_get_mover_type_reply *reply2,
627 ndmp9_config_get_connection_type_reply *reply9)
632 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
633 for (i = 0; i < reply2->methods.methods_len; i++) {
634 switch (reply2->methods.methods_val[i]) {
635 case NDMP2_ADDR_LOCAL:
636 reply9->config_info.conntypes |=
637 NDMP9_CONFIG_CONNTYPE_LOCAL;
641 reply9->config_info.conntypes |=
642 NDMP9_CONFIG_CONNTYPE_TCP;
656 ndmp_9to2_config_get_mover_type_reply (
657 ndmp9_config_get_connection_type_reply *reply9,
658 ndmp2_config_get_mover_type_reply *reply2)
662 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
664 reply2->methods.methods_val =
665 NDMOS_MACRO_NEWN(ndmp2_mover_addr_type, 3);
666 if (!reply2->methods.methods_val) {
667 return -1; /* no mem */
671 if (reply9->config_info.conntypes & NDMP9_CONFIG_CONNTYPE_LOCAL) {
672 reply2->methods.methods_val[i++] = NDMP2_ADDR_LOCAL;
674 if (reply9->config_info.conntypes & NDMP9_CONFIG_CONNTYPE_TCP) {
675 reply2->methods.methods_val[i++] = NDMP2_ADDR_TCP;
677 reply2->methods.methods_len = i;
684 * ndmp_config_get_auth_attr
688 ndmp_2to9_config_get_auth_attr_request (
689 struct ndmp2_config_get_auth_attr_request *request2,
690 struct ndmp9_config_get_auth_attr_request *request9)
695 rc = CNVT_E_TO_9 (request2, request9, auth_type, ndmp_29_auth_type);
696 if (rc == NDMP_INVALID_GENERAL) {
697 CNVT_TO_9 (request2, request9, auth_type);
705 ndmp_9to2_config_get_auth_attr_request (
706 struct ndmp9_config_get_auth_attr_request *request9,
707 struct ndmp2_config_get_auth_attr_request *request2)
712 rc = CNVT_E_FROM_9 (request2, request9, auth_type, ndmp_29_auth_type);
713 if (rc == NDMP_INVALID_GENERAL) {
714 CNVT_FROM_9 (request2, request9, auth_type);
722 ndmp_2to9_config_get_auth_attr_reply (
723 struct ndmp2_config_get_auth_attr_reply *reply2,
724 struct ndmp9_config_get_auth_attr_reply *reply9)
728 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
730 n_error += ndmp_2to9_auth_attr (&reply2->server_attr,
731 &reply9->server_attr);
737 ndmp_9to2_config_get_auth_attr_reply (
738 struct ndmp9_config_get_auth_attr_reply *reply9,
739 struct ndmp2_config_get_auth_attr_reply *reply2)
743 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
745 n_error += ndmp_9to2_auth_attr (&reply9->server_attr,
746 &reply2->server_attr);
756 ****************************************************************
764 ndmp_2to9_scsi_open_request (
765 ndmp2_scsi_open_request *request2,
766 ndmp9_scsi_open_request *request9)
768 request9->device = NDMOS_API_STRDUP (request2->device.name);
769 if (!request9->device) {
770 return -1; /* no memory */
776 ndmp_9to2_scsi_open_request (
777 ndmp9_scsi_open_request *request9,
778 ndmp2_scsi_open_request *request2)
780 request2->device.name = NDMOS_API_STRDUP (request9->device);
781 if (!request2->device.name) {
782 return -1; /* no memory */
789 * no args request, just error reply
793 * ndmp_scsi_get_state
798 ndmp_2to9_scsi_get_state_reply (
799 ndmp2_scsi_get_state_reply *reply2,
800 ndmp9_scsi_get_state_reply *reply9)
802 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
803 CNVT_TO_9 (reply2, reply9, target_controller);
804 CNVT_TO_9 (reply2, reply9, target_id);
805 CNVT_TO_9 (reply2, reply9, target_lun);
811 ndmp_9to2_scsi_get_state_reply (
812 ndmp9_scsi_get_state_reply *reply9,
813 ndmp2_scsi_get_state_reply *reply2)
815 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
816 CNVT_FROM_9 (reply2, reply9, target_controller);
817 CNVT_FROM_9 (reply2, reply9, target_id);
818 CNVT_FROM_9 (reply2, reply9, target_lun);
824 * ndmp_scsi_set_target -- deprecated
829 ndmp_2to9_scsi_set_target_request (
830 ndmp2_scsi_set_target_request *request2,
831 ndmp9_scsi_set_target_request *request9)
833 request9->device = NDMOS_API_STRDUP (request2->device.name);
834 if (!request9->device) {
835 return -1; /* no memory */
838 CNVT_TO_9 (request2, request9, target_controller);
839 CNVT_TO_9 (request2, request9, target_id);
840 CNVT_TO_9 (request2, request9, target_lun);
846 ndmp_9to2_scsi_set_target_request (
847 ndmp9_scsi_set_target_request *request9,
848 ndmp2_scsi_set_target_request *request2)
850 request2->device.name = NDMOS_API_STRDUP (request9->device);
851 if (!request2->device.name) {
852 return -1; /* no memory */
855 CNVT_FROM_9 (request2, request9, target_controller);
856 CNVT_FROM_9 (request2, request9, target_id);
857 CNVT_FROM_9 (request2, request9, target_lun);
863 * ndmp_scsi_reset_device
864 * no args request, just error reply
868 * ndmp_scsi_reset_bus -- deprecated
869 * no args request, just error reply
874 * ndmp_tape_execute_cdb
875 * ndmp_scsi_execute_cdb
879 ndmp_2to9_execute_cdb_request (
880 ndmp2_execute_cdb_request *request2,
881 ndmp9_execute_cdb_request *request9)
887 switch (request2->flags) {
889 request9->data_dir = NDMP9_SCSI_DATA_DIR_NONE;
892 case NDMP2_SCSI_DATA_IN:
893 request9->data_dir = NDMP9_SCSI_DATA_DIR_IN;
896 case NDMP2_SCSI_DATA_OUT:
897 request9->data_dir = NDMP9_SCSI_DATA_DIR_IN;
901 /* deemed insolvable */
906 CNVT_TO_9 (request2, request9, timeout);
907 CNVT_TO_9 (request2, request9, datain_len);
909 len = request2->dataout.dataout_len;
911 p = NDMOS_API_MALLOC (len);
915 NDMOS_API_BCOPY (request2->dataout.dataout_val, p, len);
920 request9->dataout.dataout_len = len;
921 request9->dataout.dataout_val = p;
923 len = request2->cdb.cdb_len;
925 p = NDMOS_API_MALLOC (len);
927 if (request9->dataout.dataout_val) {
928 NDMOS_API_FREE (request9->dataout.dataout_val);
929 request9->dataout.dataout_len = 0;
930 request9->dataout.dataout_val = 0;
934 NDMOS_API_BCOPY (request2->cdb.cdb_val, p, len);
939 request9->cdb.cdb_len = len;
940 request9->cdb.cdb_val = p;
946 ndmp_9to2_execute_cdb_request (
947 ndmp9_execute_cdb_request *request9,
948 ndmp2_execute_cdb_request *request2)
954 switch (request9->data_dir) {
955 case NDMP9_SCSI_DATA_DIR_NONE:
959 case NDMP9_SCSI_DATA_DIR_IN:
960 request2->flags = NDMP2_SCSI_DATA_IN;
963 case NDMP9_SCSI_DATA_DIR_OUT:
964 request2->flags = NDMP2_SCSI_DATA_OUT;
968 /* deemed insolvable */
973 CNVT_FROM_9 (request2, request9, timeout);
974 CNVT_FROM_9 (request2, request9, datain_len);
976 len = request9->dataout.dataout_len;
978 p = NDMOS_API_MALLOC (len);
982 NDMOS_API_BCOPY (request9->dataout.dataout_val, p, len);
987 request2->dataout.dataout_len = len;
988 request2->dataout.dataout_val = p;
990 len = request9->cdb.cdb_len;
992 p = NDMOS_API_MALLOC (len);
994 if (request2->dataout.dataout_val) {
995 NDMOS_API_FREE (request2->dataout.dataout_val);
996 request2->dataout.dataout_len = 0;
997 request2->dataout.dataout_val = 0;
1001 NDMOS_API_BCOPY (request9->cdb.cdb_val, p, len);
1006 request2->cdb.cdb_len = len;
1007 request2->cdb.cdb_val = p;
1013 ndmp_2to9_execute_cdb_reply (
1014 ndmp2_execute_cdb_reply *reply2,
1015 ndmp9_execute_cdb_reply *reply9)
1020 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1021 CNVT_TO_9 (reply2, reply9, status);
1022 CNVT_TO_9 (reply2, reply9, dataout_len);
1024 len = reply2->datain.datain_len;
1026 p = NDMOS_API_MALLOC (len);
1030 NDMOS_API_BCOPY (reply2->datain.datain_val, p, len);
1035 reply9->datain.datain_len = len;
1036 reply9->datain.datain_val = p;
1038 len = reply2->ext_sense.ext_sense_len;
1040 p = NDMOS_API_MALLOC (len);
1042 if (reply9->datain.datain_val) {
1043 NDMOS_API_FREE (reply9->datain.datain_val);
1044 reply9->datain.datain_len = 0;
1045 reply9->datain.datain_val = 0;
1049 NDMOS_API_BCOPY (reply2->ext_sense.ext_sense_val, p, len);
1054 reply9->ext_sense.ext_sense_len = len;
1055 reply9->ext_sense.ext_sense_val = p;
1061 ndmp_9to2_execute_cdb_reply (
1062 ndmp9_execute_cdb_reply *reply9,
1063 ndmp2_execute_cdb_reply *reply2)
1068 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1069 CNVT_FROM_9 (reply2, reply9, status);
1070 CNVT_FROM_9 (reply2, reply9, dataout_len);
1072 len = reply9->datain.datain_len;
1074 p = NDMOS_API_MALLOC (len);
1078 NDMOS_API_BCOPY (reply9->datain.datain_val, p, len);
1083 reply2->datain.datain_len = len;
1084 reply2->datain.datain_val = p;
1086 len = reply9->ext_sense.ext_sense_len;
1088 p = NDMOS_API_MALLOC (len);
1090 if (reply2->datain.datain_val) {
1091 NDMOS_API_FREE (reply9->datain.datain_val);
1092 reply2->datain.datain_len = 0;
1093 reply2->datain.datain_val = 0;
1097 NDMOS_API_BCOPY (reply9->ext_sense.ext_sense_val, p, len);
1102 reply2->ext_sense.ext_sense_len = len;
1103 reply2->ext_sense.ext_sense_val = p;
1113 ****************************************************************
1118 * ndmp_tape_open_request
1122 struct enum_conversion ndmp_29_tape_open_mode[] = {
1123 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1124 { NDMP2_TAPE_READ_MODE, NDMP9_TAPE_READ_MODE },
1125 { NDMP2_TAPE_WRITE_MODE, NDMP9_TAPE_RDWR_MODE },
1126 END_ENUM_CONVERSION_TABLE
1132 ndmp_2to9_tape_open_request (
1133 ndmp2_tape_open_request *request2,
1134 ndmp9_tape_open_request *request9)
1140 * Mode codes are compatible between versions.
1141 * We let untranslated values through to
1142 * facilitate testing illegal values.
1144 rc = convert_enum_to_9 (ndmp_29_tape_open_mode, request2->mode);
1145 if (rc == NDMP_INVALID_GENERAL) {
1147 request9->mode = request2->mode;
1149 request9->mode = rc;
1152 request9->device = NDMOS_API_STRDUP (request2->device.name);
1153 if (!request9->device) {
1154 return -1; /* no memory */
1161 ndmp_9to2_tape_open_request (
1162 ndmp9_tape_open_request *request9,
1163 ndmp2_tape_open_request *request2)
1168 rc = convert_enum_from_9 (ndmp_29_tape_open_mode, request9->mode);
1169 if (rc == NDMP_INVALID_GENERAL) {
1171 request2->mode = request9->mode;
1173 request2->mode = rc;
1176 request2->device.name = NDMOS_API_STRDUP (request9->device);
1177 if (!request2->device.name) {
1178 return -1; /* no memory */
1187 * no arg request, just error reply
1192 * ndmp_tape_get_state_reply
1197 ndmp_2to9_tape_get_state_reply (
1198 ndmp2_tape_get_state_reply *reply2,
1199 ndmp9_tape_get_state_reply *reply9)
1201 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1202 CNVT_TO_9 (reply2, reply9, flags);
1203 CNVT_VUL_TO_9 (reply2, reply9, file_num);
1204 CNVT_VUL_TO_9 (reply2, reply9, soft_errors);
1205 CNVT_VUL_TO_9 (reply2, reply9, block_size);
1206 CNVT_VUL_TO_9 (reply2, reply9, blockno);
1207 CNVT_VUQ_TO_9 (reply2, reply9, total_space);
1208 CNVT_VUQ_TO_9 (reply2, reply9, space_remain);
1214 ndmp_9to2_tape_get_state_reply (
1215 ndmp9_tape_get_state_reply *reply9,
1216 ndmp2_tape_get_state_reply *reply2)
1218 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1219 CNVT_FROM_9 (reply2, reply9, flags);
1220 CNVT_VUL_FROM_9 (reply2, reply9, file_num);
1221 CNVT_VUL_FROM_9 (reply2, reply9, soft_errors);
1222 CNVT_VUL_FROM_9 (reply2, reply9, block_size);
1223 CNVT_VUL_FROM_9 (reply2, reply9, blockno);
1224 CNVT_VUQ_FROM_9 (reply2, reply9, total_space);
1225 CNVT_VUQ_FROM_9 (reply2, reply9, space_remain);
1232 * ndmp_tape_mtio_request
1235 struct enum_conversion ndmp_29_tape_mtio_op[] = {
1236 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1237 { NDMP2_MTIO_FSF, NDMP9_MTIO_FSF },
1238 { NDMP2_MTIO_BSF, NDMP9_MTIO_BSF },
1239 { NDMP2_MTIO_FSR, NDMP9_MTIO_FSR },
1240 { NDMP2_MTIO_BSR, NDMP9_MTIO_BSR },
1241 { NDMP2_MTIO_REW, NDMP9_MTIO_REW },
1242 { NDMP2_MTIO_EOF, NDMP9_MTIO_EOF },
1243 { NDMP2_MTIO_OFF, NDMP9_MTIO_OFF },
1244 END_ENUM_CONVERSION_TABLE
1249 ndmp_2to9_tape_mtio_request (
1250 ndmp2_tape_mtio_request *request2,
1251 ndmp9_tape_mtio_request *request9)
1256 rc = CNVT_E_TO_9 (request2, request9, tape_op, ndmp_29_tape_mtio_op);
1257 if (rc == NDMP_INVALID_GENERAL) {
1259 CNVT_TO_9(request2, request9, tape_op);
1262 CNVT_TO_9(request2, request9, count);
1268 ndmp_9to2_tape_mtio_request (
1269 ndmp9_tape_mtio_request *request9,
1270 ndmp2_tape_mtio_request *request2)
1275 rc = CNVT_E_FROM_9 (request2, request9, tape_op, ndmp_29_tape_mtio_op);
1276 if (rc == NDMP_INVALID_GENERAL) {
1278 CNVT_FROM_9(request2, request9, tape_op);
1281 CNVT_FROM_9(request2, request9, count);
1287 ndmp_2to9_tape_mtio_reply (
1288 ndmp2_tape_mtio_reply *reply2,
1289 ndmp9_tape_mtio_reply *reply9)
1291 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1292 CNVT_TO_9 (reply2, reply9, resid_count);
1297 ndmp_9to2_tape_mtio_reply (
1298 ndmp9_tape_mtio_reply *reply9,
1299 ndmp2_tape_mtio_reply *reply2)
1301 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1302 CNVT_FROM_9 (reply2, reply9, resid_count);
1312 ndmp_2to9_tape_write_request (
1313 ndmp2_tape_write_request *request2,
1314 ndmp9_tape_write_request *request9)
1319 len = request2->data_out.data_out_len;
1321 p = NDMOS_API_MALLOC (len);
1326 NDMOS_API_BCOPY (request2->data_out.data_out_val, p, len);
1328 request9->data_out.data_out_val = p;
1329 request9->data_out.data_out_len = len;
1335 ndmp_9to2_tape_write_request (
1336 ndmp9_tape_write_request *request9,
1337 ndmp2_tape_write_request *request2)
1342 len = request9->data_out.data_out_len;
1344 p = NDMOS_API_MALLOC (len);
1349 NDMOS_API_BCOPY (request9->data_out.data_out_val, p, len);
1351 request2->data_out.data_out_val = p;
1352 request2->data_out.data_out_len = len;
1358 ndmp_2to9_tape_write_reply (
1359 ndmp2_tape_write_reply *reply2,
1360 ndmp9_tape_write_reply *reply9)
1362 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1363 CNVT_TO_9 (reply2, reply9, count);
1368 ndmp_9to2_tape_write_reply (
1369 ndmp9_tape_write_reply *reply9,
1370 ndmp2_tape_write_reply *reply2)
1372 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1373 CNVT_FROM_9 (reply2, reply9, count);
1383 ndmp_2to9_tape_read_request (
1384 ndmp2_tape_read_request *request2,
1385 ndmp9_tape_read_request *request9)
1387 CNVT_TO_9 (request2, request9, count);
1392 ndmp_9to2_tape_read_request (
1393 ndmp9_tape_read_request *request9,
1394 ndmp2_tape_read_request *request2)
1396 CNVT_FROM_9 (request2, request9, count);
1401 ndmp_2to9_tape_read_reply (
1402 ndmp2_tape_read_reply *reply2,
1403 ndmp9_tape_read_reply *reply9)
1408 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1410 len = reply2->data_in.data_in_len;
1412 p = NDMOS_API_MALLOC (len);
1416 NDMOS_API_BCOPY (reply2->data_in.data_in_val, p, len);
1422 reply9->data_in.data_in_len = len;
1423 reply9->data_in.data_in_val = p;
1429 ndmp_9to2_tape_read_reply (
1430 ndmp9_tape_read_reply *reply9,
1431 ndmp2_tape_read_reply *reply2)
1436 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1438 len = reply9->data_in.data_in_len;
1440 p = NDMOS_API_MALLOC (len);
1444 NDMOS_API_BCOPY (reply9->data_in.data_in_val, p, len);
1450 reply2->data_in.data_in_len = len;
1451 reply2->data_in.data_in_val = p;
1457 * ndmp_tape_execute_cdb
1458 * see SCSI INTERFACES above
1464 ****************************************************************
1468 * ndmp_mover_get_state
1472 struct enum_conversion ndmp_29_mover_mode[] = {
1473 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1474 { NDMP2_MOVER_MODE_READ, NDMP9_MOVER_MODE_READ },
1475 { NDMP2_MOVER_MODE_WRITE, NDMP9_MOVER_MODE_WRITE },
1477 END_ENUM_CONVERSION_TABLE
1480 struct enum_conversion ndmp_29_mover_state[] = {
1481 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1482 { NDMP2_MOVER_STATE_IDLE, NDMP9_MOVER_STATE_IDLE },
1483 { NDMP2_MOVER_STATE_LISTEN, NDMP9_MOVER_STATE_LISTEN },
1484 { NDMP2_MOVER_STATE_ACTIVE, NDMP9_MOVER_STATE_ACTIVE },
1485 { NDMP2_MOVER_STATE_PAUSED, NDMP9_MOVER_STATE_PAUSED },
1486 { NDMP2_MOVER_STATE_HALTED, NDMP9_MOVER_STATE_HALTED },
1489 { NDMP2_MOVER_STATE_ACTIVE, NDMP9_MOVER_STATE_STANDBY },
1491 END_ENUM_CONVERSION_TABLE
1494 struct enum_conversion ndmp_29_mover_pause_reason[] = {
1495 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1496 { NDMP2_MOVER_PAUSE_NA, NDMP9_MOVER_PAUSE_NA },
1497 { NDMP2_MOVER_PAUSE_EOM, NDMP9_MOVER_PAUSE_EOM },
1498 { NDMP2_MOVER_PAUSE_EOF, NDMP9_MOVER_PAUSE_EOF },
1499 { NDMP2_MOVER_PAUSE_SEEK, NDMP9_MOVER_PAUSE_SEEK },
1500 { NDMP2_MOVER_PAUSE_MEDIA_ERROR, NDMP9_MOVER_PAUSE_MEDIA_ERROR },
1501 END_ENUM_CONVERSION_TABLE
1504 struct enum_conversion ndmp_29_mover_halt_reason[] = {
1505 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1506 { NDMP2_MOVER_HALT_NA, NDMP9_MOVER_HALT_NA },
1507 { NDMP2_MOVER_HALT_CONNECT_CLOSED, NDMP9_MOVER_HALT_CONNECT_CLOSED },
1508 { NDMP2_MOVER_HALT_ABORTED, NDMP9_MOVER_HALT_ABORTED },
1509 { NDMP2_MOVER_HALT_INTERNAL_ERROR, NDMP9_MOVER_HALT_INTERNAL_ERROR },
1510 { NDMP2_MOVER_HALT_CONNECT_ERROR, NDMP9_MOVER_HALT_CONNECT_ERROR },
1511 END_ENUM_CONVERSION_TABLE
1516 ndmp_2to9_mover_get_state_reply (
1517 ndmp2_mover_get_state_reply *reply2,
1518 ndmp9_mover_get_state_reply *reply9)
1520 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1521 CNVT_E_TO_9 (reply2, reply9, state, ndmp_29_mover_state);
1522 CNVT_E_TO_9 (reply2, reply9, pause_reason, ndmp_29_mover_pause_reason);
1523 CNVT_E_TO_9 (reply2, reply9, halt_reason, ndmp_29_mover_halt_reason);
1525 CNVT_TO_9 (reply2, reply9, record_size);
1526 CNVT_TO_9 (reply2, reply9, record_num);
1527 CNVT_TO_9x (reply2, reply9, data_written, bytes_moved);
1528 CNVT_TO_9 (reply2, reply9, seek_position);
1529 CNVT_TO_9 (reply2, reply9, bytes_left_to_read);
1530 CNVT_TO_9 (reply2, reply9, window_offset);
1531 CNVT_TO_9 (reply2, reply9, window_length);
1537 ndmp_9to2_mover_get_state_reply (
1538 ndmp9_mover_get_state_reply *reply9,
1539 ndmp2_mover_get_state_reply *reply2)
1541 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1542 CNVT_E_FROM_9 (reply2, reply9, state, ndmp_29_mover_state);
1543 CNVT_E_FROM_9 (reply2, reply9, pause_reason,
1544 ndmp_29_mover_pause_reason);
1545 CNVT_E_FROM_9 (reply2, reply9, halt_reason,
1546 ndmp_29_mover_halt_reason);
1548 CNVT_FROM_9 (reply2, reply9, record_size);
1549 CNVT_FROM_9 (reply2, reply9, record_num);
1550 CNVT_FROM_9x (reply2, reply9, data_written, bytes_moved);
1551 CNVT_FROM_9 (reply2, reply9, seek_position);
1552 CNVT_FROM_9 (reply2, reply9, bytes_left_to_read);
1553 CNVT_FROM_9 (reply2, reply9, window_offset);
1554 CNVT_FROM_9 (reply2, reply9, window_length);
1565 ndmp_2to9_mover_listen_request (
1566 ndmp2_mover_listen_request *request2,
1567 ndmp9_mover_listen_request *request9)
1571 rc = CNVT_E_TO_9 (request2, request9, mode, ndmp_29_mover_mode);
1572 if (rc == NDMP_INVALID_GENERAL) {
1573 CNVT_TO_9 (request2, request9, mode);
1575 rc = CNVT_E_TO_9 (request2, request9, addr_type,
1576 ndmp_29_mover_addr_type);
1577 if (rc == NDMP_INVALID_GENERAL) {
1578 CNVT_TO_9 (request2, request9, addr_type);
1585 ndmp_9to2_mover_listen_request (
1586 ndmp9_mover_listen_request *request9,
1587 ndmp2_mover_listen_request *request2)
1591 rc = CNVT_E_FROM_9 (request2, request9, mode, ndmp_29_mover_mode);
1592 if (rc == NDMP_INVALID_GENERAL) {
1593 CNVT_FROM_9 (request2, request9, mode);
1595 rc = CNVT_E_FROM_9 (request2, request9, addr_type,
1596 ndmp_29_mover_addr_type);
1597 if (rc == NDMP_INVALID_GENERAL) {
1598 CNVT_FROM_9 (request2, request9, addr_type);
1605 ndmp_2to9_mover_listen_reply (
1606 ndmp2_mover_listen_reply *reply2,
1607 ndmp9_mover_listen_reply *reply9)
1611 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1613 n_error += ndmp_2to9_mover_addr (&reply2->mover,
1614 &reply9->data_connection_addr);
1620 ndmp_9to2_mover_listen_reply (
1621 ndmp9_mover_listen_reply *reply9,
1622 ndmp2_mover_listen_reply *reply2)
1626 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1628 n_error += ndmp_9to2_mover_addr (&reply9->data_connection_addr,
1635 * ndmp_mover_continue
1636 * no args request, just error reply
1641 * no args request, just error reply
1646 * no args request, just error reply
1650 * ndmp_mover_set_window
1655 ndmp_2to9_mover_set_window_request (
1656 ndmp2_mover_set_window_request *request2,
1657 ndmp9_mover_set_window_request *request9)
1659 CNVT_TO_9 (request2, request9, offset);
1660 CNVT_TO_9 (request2, request9, length);
1665 ndmp_9to2_mover_set_window_request (
1666 ndmp9_mover_set_window_request *request9,
1667 ndmp2_mover_set_window_request *request2)
1669 CNVT_FROM_9 (request2, request9, offset);
1670 CNVT_FROM_9 (request2, request9, length);
1681 ndmp_2to9_mover_read_request (
1682 ndmp2_mover_read_request *request2,
1683 ndmp9_mover_read_request *request9)
1685 CNVT_TO_9 (request2, request9, offset);
1686 CNVT_TO_9 (request2, request9, length);
1691 ndmp_9to2_mover_read_request (
1692 ndmp9_mover_read_request *request9,
1693 ndmp2_mover_read_request *request2)
1695 CNVT_FROM_9 (request2, request9, offset);
1696 CNVT_FROM_9 (request2, request9, length);
1702 * no args request, just error reply
1707 * ndmp_mover_set_record_size
1712 ndmp_2to9_mover_set_record_size_request (
1713 ndmp2_mover_set_record_size_request *request2,
1714 ndmp9_mover_set_record_size_request *request9)
1716 CNVT_TO_9x (request2, request9, len, record_size);
1721 ndmp_9to2_mover_set_record_size_request (
1722 ndmp9_mover_set_record_size_request *request9,
1723 ndmp2_mover_set_record_size_request *request2)
1725 CNVT_FROM_9x (request2, request9, len, record_size);
1735 ****************************************************************
1740 ****************************************************************
1748 name9->original_path = NDMOS_API_STRDUP(name2->name);
1749 name9->destination_path = NDMOS_API_STRDUP(name2->dest);
1750 if (name2->fh_info != NDMP_INVALID_U_QUAD) {
1751 name9->fh_info.valid = NDMP9_VALIDITY_VALID;
1752 name9->fh_info.value = name2->fh_info;
1754 name9->fh_info.valid = NDMP9_VALIDITY_INVALID;
1755 name9->fh_info.value = NDMP_INVALID_U_QUAD;
1766 name2->name = NDMOS_API_STRDUP(name9->original_path);
1767 name2->dest = NDMOS_API_STRDUP(name9->destination_path);
1768 if (name9->fh_info.valid == NDMP9_VALIDITY_VALID) {
1769 name2->fh_info = name9->fh_info.value;
1771 name2->fh_info = NDMP_INVALID_U_QUAD;
1780 ndmp_2to9_name_vec (
1787 for (i = 0; i < n_name; i++)
1788 ndmp_2to9_name (&name2[i], &name9[i]);
1794 ndmp_9to2_name_vec (
1801 for (i = 0; i < n_name; i++)
1802 ndmp_9to2_name (&name9[i], &name2[i]);
1808 ndmp_2to9_name_vec_dup (
1810 ndmp9_name **name9_p,
1813 *name9_p = NDMOS_MACRO_NEWN (ndmp9_name, n_name);
1817 return ndmp_2to9_name_vec (name2, *name9_p, n_name);
1821 ndmp_9to2_name_vec_dup (
1823 ndmp2_name **name2_p,
1826 *name2_p = NDMOS_MACRO_NEWN (ndmp2_name, n_name);
1830 return ndmp_9to2_name_vec (name9, *name2_p, n_name);
1835 * ndmp_data_get_state
1839 struct enum_conversion ndmp_29_data_operation[] = {
1840 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1841 { NDMP2_DATA_OP_NOACTION, NDMP9_DATA_OP_NOACTION },
1842 { NDMP2_DATA_OP_BACKUP, NDMP9_DATA_OP_BACKUP },
1843 { NDMP2_DATA_OP_RESTORE, NDMP9_DATA_OP_RECOVER },
1844 { NDMP2_DATA_OP_RESTORE_FILEHIST, NDMP9_DATA_OP_RECOVER_FILEHIST },
1845 END_ENUM_CONVERSION_TABLE
1848 struct enum_conversion ndmp_29_data_state[] = {
1849 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1850 { NDMP2_DATA_STATE_IDLE, NDMP9_DATA_STATE_IDLE },
1851 { NDMP2_DATA_STATE_ACTIVE, NDMP9_DATA_STATE_ACTIVE },
1852 { NDMP2_DATA_STATE_HALTED, NDMP9_DATA_STATE_HALTED },
1855 { NDMP2_DATA_STATE_ACTIVE, NDMP9_DATA_STATE_CONNECTED },
1856 { NDMP2_DATA_STATE_ACTIVE, NDMP9_DATA_STATE_LISTEN },
1858 END_ENUM_CONVERSION_TABLE
1861 struct enum_conversion ndmp_29_data_halt_reason[] = {
1862 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1863 { NDMP2_DATA_HALT_NA, NDMP9_DATA_HALT_NA },
1864 { NDMP2_DATA_HALT_SUCCESSFUL, NDMP9_DATA_HALT_SUCCESSFUL },
1865 { NDMP2_DATA_HALT_ABORTED, NDMP9_DATA_HALT_ABORTED },
1866 { NDMP2_DATA_HALT_INTERNAL_ERROR, NDMP9_DATA_HALT_INTERNAL_ERROR },
1867 { NDMP2_DATA_HALT_CONNECT_ERROR, NDMP9_DATA_HALT_CONNECT_ERROR },
1868 END_ENUM_CONVERSION_TABLE
1873 ndmp_2to9_data_get_state_reply (
1874 ndmp2_data_get_state_reply *reply2,
1875 ndmp9_data_get_state_reply *reply9)
1877 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
1878 CNVT_E_TO_9 (reply2, reply9, operation, ndmp_29_data_operation);
1879 CNVT_E_TO_9 (reply2, reply9, state, ndmp_29_data_state);
1880 CNVT_E_TO_9 (reply2, reply9, halt_reason, ndmp_29_data_halt_reason);
1882 CNVT_TO_9 (reply2, reply9, bytes_processed);
1884 CNVT_VUQ_TO_9 (reply2, reply9, est_bytes_remain);
1885 CNVT_VUL_TO_9 (reply2, reply9, est_time_remain);
1887 ndmp_2to9_mover_addr (&reply2->mover, &reply9->data_connection_addr);
1889 CNVT_TO_9 (reply2, reply9, read_offset);
1890 CNVT_TO_9 (reply2, reply9, read_length);
1896 ndmp_9to2_data_get_state_reply (
1897 ndmp9_data_get_state_reply *reply9,
1898 ndmp2_data_get_state_reply *reply2)
1900 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
1901 CNVT_E_FROM_9 (reply2, reply9, operation, ndmp_29_data_operation);
1902 CNVT_E_FROM_9 (reply2, reply9, state, ndmp_29_data_state);
1903 CNVT_E_FROM_9 (reply2, reply9, halt_reason, ndmp_29_data_halt_reason);
1905 CNVT_FROM_9 (reply2, reply9, bytes_processed);
1907 CNVT_VUQ_FROM_9 (reply2, reply9, est_bytes_remain);
1908 CNVT_VUL_FROM_9 (reply2, reply9, est_time_remain);
1910 ndmp_9to2_mover_addr (&reply9->data_connection_addr, &reply2->mover);
1912 CNVT_FROM_9 (reply2, reply9, read_offset);
1913 CNVT_FROM_9 (reply2, reply9, read_length);
1919 * ndmp_data_start_backup
1924 ndmp_2to9_data_start_backup_request (
1925 ndmp2_data_start_backup_request *request2,
1926 ndmp9_data_start_backup_request *request9)
1930 CNVT_STRDUP_TO_9 (request2, request9, bu_type);
1932 ndmp_2to9_pval_vec_dup (request2->env.env_val,
1933 &request9->env.env_val,
1934 request2->env.env_len);
1936 request9->env.env_len = request2->env.env_len;
1938 n_error += ndmp_2to9_mover_addr (&request2->mover, &request9->addr);
1944 ndmp_9to2_data_start_backup_request (
1945 ndmp9_data_start_backup_request *request9,
1946 ndmp2_data_start_backup_request *request2)
1950 CNVT_STRDUP_FROM_9 (request2, request9, bu_type);
1952 ndmp_9to2_pval_vec_dup (request9->env.env_val,
1953 &request2->env.env_val,
1954 request9->env.env_len);
1956 request2->env.env_len = request9->env.env_len;
1958 n_error += ndmp_9to2_mover_addr (&request9->addr, &request2->mover);
1965 * ndmp_data_start_recover
1966 * ndmp_data_start_recover_filehist
1971 ndmp_2to9_data_start_recover_request (
1972 ndmp2_data_start_recover_request *request2,
1973 ndmp9_data_start_recover_request *request9)
1977 CNVT_STRDUP_TO_9 (request2, request9, bu_type);
1979 ndmp_2to9_pval_vec_dup (request2->env.env_val,
1980 &request9->env.env_val,
1981 request2->env.env_len);
1983 request9->env.env_len = request2->env.env_len;
1985 ndmp_2to9_name_vec_dup (request2->nlist.nlist_val,
1986 &request9->nlist.nlist_val,
1987 request2->nlist.nlist_len);
1989 request9->nlist.nlist_len = request2->nlist.nlist_len;
1991 n_error += ndmp_2to9_mover_addr (&request2->mover, &request9->addr);
1997 ndmp_9to2_data_start_recover_request (
1998 ndmp9_data_start_recover_request *request9,
1999 ndmp2_data_start_recover_request *request2)
2003 CNVT_STRDUP_FROM_9 (request2, request9, bu_type);
2005 ndmp_9to2_pval_vec_dup (request9->env.env_val,
2006 &request2->env.env_val,
2007 request9->env.env_len);
2009 request2->env.env_len = request9->env.env_len;
2011 ndmp_9to2_name_vec_dup (request9->nlist.nlist_val,
2012 &request2->nlist.nlist_val,
2013 request9->nlist.nlist_len);
2015 request2->nlist.nlist_len = request9->nlist.nlist_len;
2017 n_error += ndmp_9to2_mover_addr (&request9->addr, &request2->mover);
2025 * no args request, just error reply
2034 ndmp_2to9_data_get_env_reply (
2035 ndmp2_data_get_env_reply *reply2,
2036 ndmp9_data_get_env_reply *reply9)
2038 CNVT_E_TO_9 (reply2, reply9, error, ndmp_29_error);
2040 ndmp_2to9_pval_vec_dup (reply2->env.env_val,
2041 &reply9->env.env_val,
2042 reply2->env.env_len);
2044 reply9->env.env_len = reply2->env.env_len;
2050 ndmp_9to2_data_get_env_reply (
2051 ndmp9_data_get_env_reply *reply9,
2052 ndmp2_data_get_env_reply *reply2)
2054 CNVT_E_FROM_9 (reply2, reply9, error, ndmp_29_error);
2056 ndmp_9to2_pval_vec_dup (reply9->env.env_val,
2057 &reply2->env.env_val,
2058 reply9->env.env_len);
2060 reply2->env.env_len = reply9->env.env_len;
2068 * no args request, just error reply
2076 ****************************************************************
2080 * ndmp_notify_data_halted
2085 ndmp_2to9_notify_data_halted_request (
2086 ndmp2_notify_data_halted_request *request2,
2087 ndmp9_notify_data_halted_request *request9)
2092 rc = CNVT_E_TO_9 (request2, request9, reason,
2093 ndmp_29_data_halt_reason);
2094 if (rc == NDMP_INVALID_GENERAL) {
2095 CNVT_TO_9 (request2, request9, reason);
2103 ndmp_9to2_notify_data_halted_request (
2104 ndmp9_notify_data_halted_request *request9,
2105 ndmp2_notify_data_halted_request *request2)
2110 rc = CNVT_E_FROM_9 (request2, request9, reason,
2111 ndmp_29_data_halt_reason);
2112 if (rc == NDMP_INVALID_GENERAL) {
2113 CNVT_FROM_9 (request2, request9, reason);
2117 request2->text_reason = NDMOS_API_STRDUP("whatever");
2124 * ndmp_notify_connected
2128 /* NDMP2_NOTIFY_CONNECTED */
2129 struct enum_conversion ndmp_29_connect_reason[] = {
2130 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2131 { NDMP2_CONNECTED, NDMP9_CONNECTED },
2132 { NDMP2_SHUTDOWN, NDMP9_SHUTDOWN },
2133 { NDMP2_REFUSED, NDMP9_REFUSED },
2134 END_ENUM_CONVERSION_TABLE
2138 ndmp_2to9_notify_connected_request (
2139 ndmp2_notify_connected_request *request2,
2140 ndmp9_notify_connected_request *request9)
2145 rc = CNVT_E_TO_9 (request2, request9, reason, ndmp_29_connect_reason);
2146 if (rc == NDMP_INVALID_GENERAL) {
2147 CNVT_TO_9 (request2, request9, reason);
2151 CNVT_TO_9 (request2, request9, protocol_version);
2153 CNVT_STRDUP_TO_9 (request2, request9, text_reason);
2159 ndmp_9to2_notify_connected_request (
2160 ndmp9_notify_connected_request *request9,
2161 ndmp2_notify_connected_request *request2)
2166 rc = CNVT_E_FROM_9(request2, request9, reason, ndmp_29_connect_reason);
2167 if (rc == NDMP_INVALID_GENERAL) {
2168 CNVT_FROM_9 (request2, request9, reason);
2172 CNVT_FROM_9 (request2, request9, protocol_version);
2174 CNVT_STRDUP_FROM_9 (request2, request9, text_reason);
2181 * ndmp_notify_mover_halted
2186 ndmp_2to9_notify_mover_halted_request (
2187 ndmp2_notify_mover_halted_request *request2,
2188 ndmp9_notify_mover_halted_request *request9)
2193 rc = CNVT_E_TO_9 (request2, request9, reason,
2194 ndmp_29_mover_halt_reason);
2195 if (rc == NDMP_INVALID_GENERAL) {
2196 CNVT_TO_9 (request2, request9, reason);
2204 ndmp_9to2_notify_mover_halted_request (
2205 ndmp9_notify_mover_halted_request *request9,
2206 ndmp2_notify_mover_halted_request *request2)
2211 rc = CNVT_E_FROM_9 (request2, request9, reason,
2212 ndmp_29_mover_halt_reason);
2213 if (rc == NDMP_INVALID_GENERAL) {
2214 CNVT_FROM_9 (request2, request9, reason);
2218 request2->text_reason = NDMOS_API_STRDUP ("Whatever");
2225 * ndmp_notify_mover_paused
2230 ndmp_2to9_notify_mover_paused_request (
2231 ndmp2_notify_mover_paused_request *request2,
2232 ndmp9_notify_mover_paused_request *request9)
2237 rc = CNVT_E_TO_9 (request2, request9, reason,
2238 ndmp_29_mover_pause_reason);
2239 if (rc == NDMP_INVALID_GENERAL) {
2240 CNVT_TO_9 (request2, request9, reason);
2244 CNVT_TO_9 (request2, request9, seek_position);
2250 ndmp_9to2_notify_mover_paused_request (
2251 ndmp9_notify_mover_paused_request *request9,
2252 ndmp2_notify_mover_paused_request *request2)
2257 rc = CNVT_E_FROM_9 (request2, request9, reason,
2258 ndmp_29_mover_pause_reason);
2259 if (rc == NDMP_INVALID_GENERAL) {
2260 CNVT_FROM_9 (request2, request9, reason);
2264 CNVT_FROM_9 (request2, request9, seek_position);
2271 * ndmp_notify_data_read
2276 ndmp_2to9_notify_data_read_request (
2277 ndmp2_notify_data_read_request *request2,
2278 ndmp9_notify_data_read_request *request9)
2280 CNVT_TO_9 (request2, request9, offset);
2281 CNVT_TO_9 (request2, request9, length);
2286 ndmp_9to2_notify_data_read_request (
2287 ndmp9_notify_data_read_request *request9,
2288 ndmp2_notify_data_read_request *request2)
2290 CNVT_FROM_9 (request2, request9, offset);
2291 CNVT_FROM_9 (request2, request9, length);
2300 ****************************************************************
2304 * ndmp2_log_log and ndmp2_log_debug are not handled
2305 * by the ndmp9 translater. Like ndmp2_config_get_butype_attr,
2306 * these NDMP2 log interfaces do not pair well with the
2307 * ndmp[349] interfaces. So they are handled directly
2308 * rather than by translation.
2311 struct enum_conversion ndmp_29_recovery_status[] = {
2312 { NDMP2_UNDEFINED_ERR,
2313 NDMP9_RECOVERY_FAILED_UNDEFINED_ERROR }, /* default */
2315 NDMP9_RECOVERY_SUCCESSFUL },
2316 { NDMP2_PERMISSION_ERR,
2317 NDMP9_RECOVERY_FAILED_PERMISSION },
2318 { NDMP2_FILE_NOT_FOUND_ERR,
2319 NDMP9_RECOVERY_FAILED_NOT_FOUND },
2320 { NDMP2_BAD_FILE_ERR,
2321 NDMP9_RECOVERY_FAILED_NO_DIRECTORY },
2323 NDMP9_RECOVERY_FAILED_OUT_OF_MEMORY },
2325 NDMP9_RECOVERY_FAILED_IO_ERROR },
2326 { NDMP2_UNDEFINED_ERR,
2327 NDMP9_RECOVERY_FAILED_UNDEFINED_ERROR },
2328 END_ENUM_CONVERSION_TABLE
2333 ndmp_2to9_log_file_request (
2334 ndmp2_log_file_request *request2,
2335 ndmp9_log_file_request *request9)
2337 request9->recovery_status =
2338 convert_enum_to_9 (ndmp_29_recovery_status, request2->error);
2339 CNVT_STRDUP_TO_9 (request2, request9, name);
2344 ndmp_9to2_log_file_request (
2345 ndmp9_log_file_request *request9,
2346 ndmp2_log_file_request *request2)
2348 request2->error = convert_enum_from_9 (ndmp_29_recovery_status,
2349 request9->recovery_status);
2350 CNVT_STRDUP_FROM_9 (request2, request9, name);
2358 * FILE HISTORY INTERFACES
2359 ****************************************************************
2363 * ndmp[_unix]_file_stat
2366 struct enum_conversion ndmp_29_file_type[] = {
2367 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2368 { NDMP2_FILE_DIR, NDMP9_FILE_DIR },
2369 { NDMP2_FILE_FIFO, NDMP9_FILE_FIFO },
2370 { NDMP2_FILE_CSPEC, NDMP9_FILE_CSPEC },
2371 { NDMP2_FILE_BSPEC, NDMP9_FILE_BSPEC },
2372 { NDMP2_FILE_REG, NDMP9_FILE_REG },
2373 { NDMP2_FILE_SLINK, NDMP9_FILE_SLINK },
2374 { NDMP2_FILE_SOCK, NDMP9_FILE_SOCK },
2375 END_ENUM_CONVERSION_TABLE
2380 ndmp_2to9_unix_file_stat (
2381 ndmp2_unix_file_stat *fstat2,
2382 ndmp9_file_stat *fstat9)
2384 CNVT_E_TO_9 (fstat2, fstat9, ftype, ndmp_29_file_type);
2386 CNVT_VUL_TO_9 (fstat2, fstat9, mtime);
2387 CNVT_VUL_TO_9 (fstat2, fstat9, atime);
2388 CNVT_VUL_TO_9 (fstat2, fstat9, ctime);
2389 CNVT_VUL_TO_9 (fstat2, fstat9, uid);
2390 CNVT_VUL_TO_9 (fstat2, fstat9, gid);
2392 CNVT_VUL_TO_9 (fstat2, fstat9, mode);
2394 CNVT_VUQ_TO_9 (fstat2, fstat9, size);
2395 CNVT_VUQ_TO_9 (fstat2, fstat9, fh_info);
2401 ndmp_9to2_unix_file_stat (
2402 ndmp9_file_stat *fstat9,
2403 ndmp2_unix_file_stat *fstat2)
2405 CNVT_E_FROM_9 (fstat2, fstat9, ftype, ndmp_29_file_type);
2407 CNVT_VUL_FROM_9 (fstat2, fstat9, mtime);
2408 CNVT_VUL_FROM_9 (fstat2, fstat9, atime);
2409 CNVT_VUL_FROM_9 (fstat2, fstat9, ctime);
2410 CNVT_VUL_FROM_9 (fstat2, fstat9, uid);
2411 CNVT_VUL_FROM_9 (fstat2, fstat9, gid);
2413 CNVT_VUL_FROM_9 (fstat2, fstat9, mode);
2415 CNVT_VUQ_FROM_9 (fstat2, fstat9, size);
2416 CNVT_VUQ_FROM_9 (fstat2, fstat9, fh_info);
2425 * ndmp_fh_add_unix_path_request
2429 ndmp_2to9_fh_add_unix_path_request (
2430 ndmp2_fh_add_unix_path_request *request2,
2431 ndmp9_fh_add_file_request *request9)
2433 int n_ent = request2->paths.paths_len;
2437 table = NDMOS_MACRO_NEWN(ndmp9_file, n_ent);
2441 NDMOS_API_BZERO (table, sizeof *table * n_ent);
2443 for (i = 0; i < n_ent; i++) {
2444 ndmp2_fh_unix_path * ent2 = &request2->paths.paths_val[i];
2445 ndmp9_file * ent9 = &table[i];
2447 CNVT_STRDUP_TO_9x (ent2, ent9, name, unix_path);
2448 ndmp_2to9_unix_file_stat (&ent2->fstat, &ent9->fstat);
2451 request9->files.files_len = n_ent;
2452 request9->files.files_val = table;
2458 ndmp_9to2_fh_add_unix_path_request (
2459 ndmp9_fh_add_file_request *request9,
2460 ndmp2_fh_add_unix_path_request *request2)
2462 int n_ent = request9->files.files_len;
2464 ndmp2_fh_unix_path * table;
2466 table = NDMOS_MACRO_NEWN(ndmp2_fh_unix_path, n_ent);
2470 NDMOS_API_BZERO (table, sizeof *table * n_ent);
2472 for (i = 0; i < n_ent; i++) {
2473 ndmp2_fh_unix_path * ent2 = &table[i];
2474 ndmp9_file * ent9 = &request9->files.files_val[i];
2476 CNVT_STRDUP_FROM_9x (ent2, ent9, name, unix_path);
2477 ndmp_9to2_unix_file_stat (&ent9->fstat, &ent2->fstat);
2480 request2->paths.paths_len = n_ent;
2481 request2->paths.paths_val = table;
2488 * ndmp_fh_add_unix_dir
2492 ndmp_2to9_fh_add_unix_dir_request (
2493 ndmp2_fh_add_unix_dir_request *request2,
2494 ndmp9_fh_add_dir_request *request9)
2496 int n_ent = request2->dirs.dirs_len;
2500 table = NDMOS_MACRO_NEWN(ndmp9_dir, n_ent);
2504 NDMOS_API_BZERO (table, sizeof *table * n_ent);
2506 for (i = 0; i < n_ent; i++) {
2507 ndmp2_fh_unix_dir * ent2 = &request2->dirs.dirs_val[i];
2508 ndmp9_dir * ent9 = &table[i];
2510 CNVT_STRDUP_TO_9x (ent2, ent9, name, unix_name);
2511 CNVT_TO_9 (ent2, ent9, node);
2512 CNVT_TO_9 (ent2, ent9, parent);
2515 request9->dirs.dirs_len = n_ent;
2516 request9->dirs.dirs_val = table;
2522 ndmp_2to9_fh_add_unix_dir_free_request (ndmp9_fh_add_dir_request *request9)
2527 if(request9->dirs.dirs_val) {
2528 int n_ent = request9->dirs.dirs_len;
2530 for (i = 0; i < n_ent; i++) {
2531 ndmp9_dir *ent9 = &request9->dirs.dirs_val[i];
2532 if (ent9->unix_name)
2533 NDMOS_API_FREE(ent9->unix_name);
2534 ent9->unix_name = 0;
2537 NDMOS_API_FREE(request9->dirs.dirs_val);
2539 request9->dirs.dirs_val = 0;
2545 ndmp_9to2_fh_add_unix_dir_request (
2546 ndmp9_fh_add_dir_request *request9,
2547 ndmp2_fh_add_unix_dir_request *request2)
2549 int n_ent = request9->dirs.dirs_len;
2551 ndmp2_fh_unix_dir * table;
2553 table = NDMOS_MACRO_NEWN(ndmp2_fh_unix_dir, n_ent);
2557 NDMOS_API_BZERO (table, sizeof *table * n_ent);
2559 for (i = 0; i < n_ent; i++) {
2560 ndmp9_dir * ent9 = &request9->dirs.dirs_val[i];
2561 ndmp2_fh_unix_dir * ent2 = &table[i];
2563 CNVT_STRDUP_FROM_9x (ent2, ent9, name, unix_name);
2564 CNVT_FROM_9 (ent2, ent9, node);
2565 CNVT_FROM_9 (ent2, ent9, parent);
2568 request2->dirs.dirs_len = n_ent;
2569 request2->dirs.dirs_val = table;
2575 ndmp_9to2_fh_add_unix_dir_free_request (ndmp2_fh_add_unix_dir_request *request2)
2580 if(request2->dirs.dirs_val) {
2581 int n_ent = request2->dirs.dirs_len;
2583 for (i = 0; i < n_ent; i++) {
2584 ndmp2_fh_unix_dir *ent2 = &request2->dirs.dirs_val[i];
2587 NDMOS_API_FREE(ent2->name);
2591 NDMOS_API_FREE(request2->dirs.dirs_val);
2593 request2->dirs.dirs_val = 0;
2604 * ndmp_fh_add_unix_node
2608 ndmp_2to9_fh_add_unix_node_request (
2609 ndmp2_fh_add_unix_node_request *request2,
2610 ndmp9_fh_add_node_request *request9)
2612 int n_ent = request2->nodes.nodes_len;
2616 table = NDMOS_MACRO_NEWN(ndmp9_node, n_ent);
2620 NDMOS_API_BZERO (table, sizeof *table * n_ent);
2622 for (i = 0; i < n_ent; i++) {
2623 ndmp2_fh_unix_node * ent2 = &request2->nodes.nodes_val[i];
2624 ndmp9_node * ent9 = &table[i];
2626 ndmp_2to9_unix_file_stat (&ent2->fstat, &ent9->fstat);
2627 ent9->fstat.node.valid = NDMP9_VALIDITY_VALID;
2628 ent9->fstat.node.value = ent2->node;
2631 request9->nodes.nodes_len = n_ent;
2632 request9->nodes.nodes_val = table;
2638 ndmp_2to9_fh_add_unix_node_free_request (ndmp9_fh_add_node_request *request9)
2641 if(request9->nodes.nodes_val) {
2642 NDMOS_API_FREE(request9->nodes.nodes_val);
2644 request9->nodes.nodes_val = 0;
2650 ndmp_9to2_fh_add_unix_node_request (
2651 ndmp9_fh_add_node_request *request9,
2652 ndmp2_fh_add_unix_node_request *request2)
2654 int n_ent = request9->nodes.nodes_len;
2656 ndmp2_fh_unix_node * table;
2658 table = NDMOS_MACRO_NEWN(ndmp2_fh_unix_node, n_ent);
2662 NDMOS_API_BZERO (table, sizeof *table * n_ent);
2664 for (i = 0; i < n_ent; i++) {
2665 ndmp9_node * ent9 = &request9->nodes.nodes_val[i];
2666 ndmp2_fh_unix_node * ent2 = &table[i];
2668 ndmp_9to2_unix_file_stat (&ent9->fstat, &ent2->fstat);
2669 ent2->node = ent9->fstat.node.value;
2672 request2->nodes.nodes_len = n_ent;
2673 request2->nodes.nodes_val = table;
2679 ndmp_9to2_fh_add_unix_node_free_request (ndmp2_fh_add_unix_node_request *request2)
2682 if(request2->nodes.nodes_val) {
2683 NDMOS_API_FREE(request2->nodes.nodes_val);
2685 request2->nodes.nodes_val = 0;
2693 * request/reply translation
2696 #define NO_ARG_REQUEST \
2697 ndmp_xtox_no_arguments, ndmp_xtox_no_arguments
2699 #define JUST_ERROR_REPLY \
2700 ndmp_2to9_error, ndmp_9to2_error
2702 #define NO_ARG_REQUEST_JUST_ERROR_REPLY \
2703 NO_ARG_REQUEST, JUST_ERROR_REPLY
2705 #define NO_MEMUSED_REQUEST \
2706 ndmp_xtox_no_memused, ndmp_xtox_no_memused
2708 #define NO_MEMUSED_REPLY \
2709 ndmp_xtox_no_memused, ndmp_xtox_no_memused
2711 #define NO_MEMUSED \
2712 ndmp_xtox_no_memused, ndmp_xtox_no_memused, ndmp_xtox_no_memused, ndmp_xtox_no_memused
2715 struct reqrep_xlate ndmp2_reqrep_xlate_table[] = {
2717 NDMP2_CONNECT_OPEN, NDMP9_CONNECT_OPEN,
2718 ndmp_2to9_connect_open_request,
2719 ndmp_9to2_connect_open_request,
2721 NO_MEMUSED /* no memory free routines written yet */
2724 NDMP2_CONNECT_CLIENT_AUTH, NDMP9_CONNECT_CLIENT_AUTH,
2725 ndmp_2to9_connect_client_auth_request,
2726 ndmp_9to2_connect_client_auth_request,
2728 NO_MEMUSED /* no memory free routines written yet */
2731 NDMP2_CONNECT_CLOSE, NDMP9_CONNECT_CLOSE,
2732 NO_ARG_REQUEST_JUST_ERROR_REPLY, /* actually no reply */
2733 NO_MEMUSED /* no memory free routines written yet */
2737 NDMP2_CONNECT_SERVER_AUTH, NDMP9_CONNECT_SERVER_AUTH,
2738 ndmp_2to9_connect_server_auth_request,
2739 ndmp_9to2_connect_server_auth_request,
2740 ndmp_2to9_connect_server_auth_reply,
2741 ndmp_9to2_connect_server_auth_reply,
2742 NO_MEMUSED /* no memory free routines written yet */
2746 NDMP2_CONFIG_GET_HOST_INFO, NDMP9_CONFIG_GET_HOST_INFO,
2748 ndmp_2to9_config_get_host_info_reply,
2749 ndmp_9to2_config_get_host_info_reply,
2750 NO_MEMUSED /* no memory free routines written yet */
2753 * ndmp2_config_get_butype_attr handled
2754 * as version specific dispatch function
2755 * in ndma_comm_dispatch.c
2758 NDMP2_CONFIG_GET_MOVER_TYPE, NDMP9_CONFIG_GET_CONNECTION_TYPE,
2760 ndmp_2to9_config_get_mover_type_reply,
2761 ndmp_9to2_config_get_mover_type_reply,
2762 NO_MEMUSED /* no memory free routines written yet */
2765 NDMP2_CONFIG_GET_AUTH_ATTR, NDMP9_CONFIG_GET_AUTH_ATTR,
2766 ndmp_2to9_config_get_auth_attr_request,
2767 ndmp_9to2_config_get_auth_attr_request,
2768 ndmp_2to9_config_get_auth_attr_reply,
2769 ndmp_9to2_config_get_auth_attr_reply,
2770 NO_MEMUSED /* no memory free routines written yet */
2774 NDMP2_SCSI_OPEN, NDMP9_SCSI_OPEN,
2775 ndmp_2to9_scsi_open_request,
2776 ndmp_9to2_scsi_open_request,
2778 NO_MEMUSED /* no memory free routines written yet */
2781 NDMP2_SCSI_CLOSE, NDMP9_SCSI_CLOSE,
2782 NO_ARG_REQUEST_JUST_ERROR_REPLY,
2783 NO_MEMUSED /* no memory free routines written yet */
2786 NDMP2_SCSI_GET_STATE, NDMP9_SCSI_GET_STATE,
2788 ndmp_2to9_scsi_get_state_reply,
2789 ndmp_9to2_scsi_get_state_reply,
2790 NO_MEMUSED /* no memory free routines written yet */
2793 NDMP2_SCSI_SET_TARGET, NDMP9_SCSI_SET_TARGET,
2794 ndmp_2to9_scsi_set_target_request,
2795 ndmp_9to2_scsi_set_target_request,
2797 NO_MEMUSED /* no memory free routines written yet */
2800 NDMP2_SCSI_RESET_DEVICE, NDMP9_SCSI_RESET_DEVICE,
2801 NO_ARG_REQUEST_JUST_ERROR_REPLY,
2802 NO_MEMUSED /* no memory free routines written yet */
2805 NDMP2_SCSI_RESET_BUS, NDMP9_SCSI_RESET_BUS,
2806 NO_ARG_REQUEST_JUST_ERROR_REPLY,
2807 NO_MEMUSED /* no memory free routines written yet */
2810 NDMP2_SCSI_EXECUTE_CDB, NDMP9_SCSI_EXECUTE_CDB,
2811 ndmp_2to9_execute_cdb_request,
2812 ndmp_9to2_execute_cdb_request,
2813 ndmp_2to9_execute_cdb_reply,
2814 ndmp_9to2_execute_cdb_reply,
2815 NO_MEMUSED /* no memory free routines written yet */
2820 NDMP2_TAPE_OPEN, NDMP9_TAPE_OPEN,
2821 ndmp_2to9_tape_open_request,
2822 ndmp_9to2_tape_open_request,
2824 NO_MEMUSED /* no memory free routines written yet */
2827 NDMP2_TAPE_CLOSE, NDMP9_TAPE_CLOSE,
2828 NO_ARG_REQUEST_JUST_ERROR_REPLY,
2829 NO_MEMUSED /* no memory free routines written yet */
2832 NDMP2_TAPE_GET_STATE, NDMP9_TAPE_GET_STATE,
2834 ndmp_2to9_tape_get_state_reply,
2835 ndmp_9to2_tape_get_state_reply,
2836 NO_MEMUSED /* no memory free routines written yet */
2839 NDMP2_TAPE_MTIO, NDMP9_TAPE_MTIO,
2840 ndmp_2to9_tape_mtio_request,
2841 ndmp_9to2_tape_mtio_request,
2842 ndmp_2to9_tape_mtio_reply,
2843 ndmp_9to2_tape_mtio_reply,
2844 NO_MEMUSED /* no memory free routines written yet */
2847 NDMP2_TAPE_WRITE, NDMP9_TAPE_WRITE,
2848 ndmp_2to9_tape_write_request,
2849 ndmp_9to2_tape_write_request,
2850 ndmp_2to9_tape_write_reply,
2851 ndmp_9to2_tape_write_reply,
2852 NO_MEMUSED /* no memory free routines written yet */
2855 NDMP2_TAPE_READ, NDMP9_TAPE_READ,
2856 ndmp_2to9_tape_read_request,
2857 ndmp_9to2_tape_read_request,
2858 ndmp_2to9_tape_read_reply,
2859 ndmp_9to2_tape_read_reply,
2860 NO_MEMUSED /* no memory free routines written yet */
2863 NDMP2_TAPE_EXECUTE_CDB, NDMP9_TAPE_EXECUTE_CDB,
2864 ndmp_2to9_execute_cdb_request,
2865 ndmp_9to2_execute_cdb_request,
2866 ndmp_2to9_execute_cdb_reply,
2867 ndmp_9to2_execute_cdb_reply,
2868 NO_MEMUSED /* no memory free routines written yet */
2872 NDMP2_DATA_GET_STATE, NDMP9_DATA_GET_STATE,
2874 ndmp_2to9_data_get_state_reply,
2875 ndmp_9to2_data_get_state_reply,
2876 NO_MEMUSED /* no memory free routines written yet */
2879 NDMP2_DATA_START_BACKUP, NDMP9_DATA_START_BACKUP,
2880 ndmp_2to9_data_start_backup_request,
2881 ndmp_9to2_data_start_backup_request,
2883 NO_MEMUSED /* no memory free routines written yet */
2886 NDMP2_DATA_START_RECOVER, NDMP9_DATA_START_RECOVER,
2887 ndmp_2to9_data_start_recover_request,
2888 ndmp_9to2_data_start_recover_request,
2890 NO_MEMUSED /* no memory free routines written yet */
2893 NDMP2_DATA_ABORT, NDMP9_DATA_ABORT,
2894 NO_ARG_REQUEST_JUST_ERROR_REPLY,
2895 NO_MEMUSED /* no memory free routines written yet */
2898 NDMP2_DATA_GET_ENV, NDMP9_DATA_GET_ENV,
2900 ndmp_2to9_data_get_env_reply,
2901 ndmp_9to2_data_get_env_reply,
2902 NO_MEMUSED /* no memory free routines written yet */
2905 NDMP2_DATA_STOP, NDMP9_DATA_STOP,
2906 NO_ARG_REQUEST_JUST_ERROR_REPLY,
2907 NO_MEMUSED /* no memory free routines written yet */
2910 NDMP2_DATA_START_RECOVER_FILEHIST, NDMP9_DATA_START_RECOVER_FILEHIST,
2911 ndmp_2to9_data_start_recover_request,
2912 ndmp_9to2_data_start_recover_request,
2914 NO_MEMUSED /* no memory free routines written yet */
2918 NDMP2_NOTIFY_DATA_HALTED, NDMP9_NOTIFY_DATA_HALTED,
2919 ndmp_2to9_notify_data_halted_request,
2920 ndmp_9to2_notify_data_halted_request,
2921 JUST_ERROR_REPLY, /* no reply actually */
2922 NO_MEMUSED /* no memory free routines written yet */
2925 NDMP2_NOTIFY_CONNECTED, NDMP9_NOTIFY_CONNECTED,
2926 ndmp_2to9_notify_connected_request,
2927 ndmp_9to2_notify_connected_request,
2928 JUST_ERROR_REPLY, /* no reply actually */
2929 NO_MEMUSED /* no memory free routines written yet */
2932 NDMP2_NOTIFY_MOVER_HALTED, NDMP9_NOTIFY_MOVER_HALTED,
2933 ndmp_2to9_notify_mover_halted_request,
2934 ndmp_9to2_notify_mover_halted_request,
2935 JUST_ERROR_REPLY, /* no reply actually */
2936 NO_MEMUSED /* no memory free routines written yet */
2939 NDMP2_NOTIFY_MOVER_PAUSED, NDMP9_NOTIFY_MOVER_PAUSED,
2940 ndmp_2to9_notify_mover_paused_request,
2941 ndmp_9to2_notify_mover_paused_request,
2942 JUST_ERROR_REPLY, /* no reply actually */
2943 NO_MEMUSED /* no memory free routines written yet */
2946 NDMP2_NOTIFY_DATA_READ, NDMP9_NOTIFY_DATA_READ,
2947 ndmp_2to9_notify_data_read_request,
2948 ndmp_9to2_notify_data_read_request,
2949 JUST_ERROR_REPLY, /* no reply actually */
2950 NO_MEMUSED /* no memory free routines written yet */
2954 NDMP2_LOG_FILE, NDMP9_LOG_FILE,
2955 ndmp_2to9_log_file_request,
2956 ndmp_9to2_log_file_request,
2957 JUST_ERROR_REPLY, /* no reply actually */
2958 NO_MEMUSED /* no memory free routines written yet */
2962 NDMP2_LOG_MESSAGE, NDMP9_LOG_MESSAGE,
2963 ndmp_2to9_log_message_request,
2964 ndmp_9to2_log_message_request,
2965 JUST_ERROR_REPLY, /* no reply actually */
2966 NO_MEMUSED /* no memory free routines written yet */
2971 NDMP2_FH_ADD_UNIX_PATH, NDMP9_FH_ADD_FILE,
2972 ndmp_2to9_fh_add_unix_path_request,
2973 ndmp_9to2_fh_add_unix_path_request,
2974 JUST_ERROR_REPLY, /* no reply actually */
2975 NO_MEMUSED /* no memory free routines written yet */
2978 NDMP2_FH_ADD_UNIX_DIR, NDMP9_FH_ADD_DIR,
2979 ndmp_2to9_fh_add_unix_dir_request,
2980 ndmp_9to2_fh_add_unix_dir_request,
2981 JUST_ERROR_REPLY, /* no reply actually */
2982 ndmp_2to9_fh_add_unix_dir_free_request,
2983 ndmp_9to2_fh_add_unix_dir_free_request,
2987 NDMP2_FH_ADD_UNIX_NODE, NDMP9_FH_ADD_NODE,
2988 ndmp_2to9_fh_add_unix_node_request,
2989 ndmp_9to2_fh_add_unix_node_request,
2990 JUST_ERROR_REPLY, /* no reply actually */
2991 ndmp_2to9_fh_add_unix_node_free_request,
2992 ndmp_9to2_fh_add_unix_node_free_request,
2997 NDMP2_MOVER_GET_STATE, NDMP9_MOVER_GET_STATE,
2999 ndmp_2to9_mover_get_state_reply,
3000 ndmp_9to2_mover_get_state_reply,
3001 NO_MEMUSED /* no memory free routines written yet */
3004 NDMP2_MOVER_LISTEN, NDMP9_MOVER_LISTEN,
3005 ndmp_2to9_mover_listen_request,
3006 ndmp_9to2_mover_listen_request,
3007 ndmp_2to9_mover_listen_reply,
3008 ndmp_9to2_mover_listen_reply,
3009 NO_MEMUSED /* no memory free routines written yet */
3012 NDMP2_MOVER_SET_RECORD_SIZE, NDMP9_MOVER_SET_RECORD_SIZE,
3013 ndmp_2to9_mover_set_record_size_request,
3014 ndmp_9to2_mover_set_record_size_request,
3016 NO_MEMUSED /* no memory free routines written yet */
3019 NDMP2_MOVER_SET_WINDOW, NDMP9_MOVER_SET_WINDOW,
3020 ndmp_2to9_mover_set_window_request,
3021 ndmp_9to2_mover_set_window_request,
3023 NO_MEMUSED /* no memory free routines written yet */
3026 NDMP2_MOVER_CONTINUE, NDMP9_MOVER_CONTINUE,
3027 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3028 NO_MEMUSED /* no memory free routines written yet */
3031 NDMP2_MOVER_ABORT, NDMP9_MOVER_ABORT,
3032 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3033 NO_MEMUSED /* no memory free routines written yet */
3036 NDMP2_MOVER_STOP, NDMP9_MOVER_STOP,
3037 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3038 NO_MEMUSED /* no memory free routines written yet */
3041 NDMP2_MOVER_READ, NDMP9_MOVER_READ,
3042 ndmp_2to9_mover_read_request,
3043 ndmp_9to2_mover_read_request,
3045 NO_MEMUSED /* no memory free routines written yet */
3048 NDMP2_MOVER_CLOSE, NDMP9_MOVER_CLOSE,
3049 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3050 NO_MEMUSED /* no memory free routines written yet */
3057 #endif /* !NDMOS_OPTION_NO_NDMP2 */