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_NDMP4
49 ****************************************************************
54 ****************************************************************
57 struct enum_conversion ndmp_49_error[] = {
58 { NDMP4_UNDEFINED_ERR, NDMP9_UNDEFINED_ERR }, /* default */
59 { NDMP4_NO_ERR, NDMP9_NO_ERR },
60 { NDMP4_NOT_SUPPORTED_ERR, NDMP9_NOT_SUPPORTED_ERR },
61 { NDMP4_DEVICE_BUSY_ERR, NDMP9_DEVICE_BUSY_ERR },
62 { NDMP4_DEVICE_OPENED_ERR, NDMP9_DEVICE_OPENED_ERR },
63 { NDMP4_NOT_AUTHORIZED_ERR, NDMP9_NOT_AUTHORIZED_ERR },
64 { NDMP4_PERMISSION_ERR, NDMP9_PERMISSION_ERR },
65 { NDMP4_DEV_NOT_OPEN_ERR, NDMP9_DEV_NOT_OPEN_ERR },
66 { NDMP4_IO_ERR, NDMP9_IO_ERR },
67 { NDMP4_TIMEOUT_ERR, NDMP9_TIMEOUT_ERR },
68 { NDMP4_ILLEGAL_ARGS_ERR, NDMP9_ILLEGAL_ARGS_ERR },
69 { NDMP4_NO_TAPE_LOADED_ERR, NDMP9_NO_TAPE_LOADED_ERR },
70 { NDMP4_WRITE_PROTECT_ERR, NDMP9_WRITE_PROTECT_ERR },
71 { NDMP4_EOF_ERR, NDMP9_EOF_ERR },
72 { NDMP4_EOM_ERR, NDMP9_EOM_ERR },
73 { NDMP4_FILE_NOT_FOUND_ERR, NDMP9_FILE_NOT_FOUND_ERR },
74 { NDMP4_BAD_FILE_ERR, NDMP9_BAD_FILE_ERR },
75 { NDMP4_NO_DEVICE_ERR, NDMP9_NO_DEVICE_ERR },
76 { NDMP4_NO_BUS_ERR, NDMP9_NO_BUS_ERR },
77 { NDMP4_XDR_DECODE_ERR, NDMP9_XDR_DECODE_ERR },
78 { NDMP4_ILLEGAL_STATE_ERR, NDMP9_ILLEGAL_STATE_ERR },
79 { NDMP4_UNDEFINED_ERR, NDMP9_UNDEFINED_ERR },
80 { NDMP4_XDR_ENCODE_ERR, NDMP9_XDR_ENCODE_ERR },
81 { NDMP4_NO_MEM_ERR, NDMP9_NO_MEM_ERR },
82 { NDMP4_CONNECT_ERR, NDMP9_CONNECT_ERR },
83 { NDMP4_SEQUENCE_NUM_ERR, NDMP9_SEQUENCE_NUM_ERR },
84 { NDMP4_READ_IN_PROGRESS_ERR, NDMP9_READ_IN_PROGRESS_ERR },
85 { NDMP4_PRECONDITION_ERR, NDMP9_PRECONDITION_ERR },
86 { NDMP4_CLASS_NOT_SUPPORTED, NDMP9_CLASS_NOT_SUPPORTED },
87 { NDMP4_VERSION_NOT_SUPPORTED, NDMP9_VERSION_NOT_SUPPORTED },
88 { NDMP4_EXT_DUPL_CLASSES, NDMP9_EXT_DUPL_CLASSES },
89 { NDMP4_EXT_DN_ILLEGAL, NDMP9_EXT_DN_ILLEGAL },
91 END_ENUM_CONVERSION_TABLE
100 *error9 = convert_enum_to_9 (ndmp_49_error, *error4);
109 *error4 = convert_enum_from_9 (ndmp_49_error, *error9);
118 ****************************************************************
126 CNVT_STRDUP_TO_9(pval4, pval9, name);
127 CNVT_STRDUP_TO_9(pval4, pval9, value);
137 CNVT_STRDUP_FROM_9(pval4, pval9, name);
138 CNVT_STRDUP_FROM_9(pval4, pval9, value);
151 for (i = 0; i < n_pval; i++)
152 ndmp_4to9_pval (&pval4[i], &pval9[i]);
165 for (i = 0; i < n_pval; i++)
166 ndmp_9to4_pval (&pval9[i], &pval4[i]);
172 ndmp_4to9_pval_vec_dup (
174 ndmp9_pval **pval9_p,
177 *pval9_p = NDMOS_MACRO_NEWN (ndmp9_pval, n_pval);
181 return ndmp_4to9_pval_vec (pval4, *pval9_p, n_pval);
185 ndmp_9to4_pval_vec_dup (
187 ndmp4_pval **pval4_p,
190 *pval4_p = NDMOS_MACRO_NEWN (ndmp4_pval, n_pval);
194 return ndmp_9to4_pval_vec (pval9, *pval4_p, n_pval);
200 ****************************************************************
203 struct enum_conversion ndmp_49_addr_type[] = {
204 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL }, /* default */
205 { NDMP4_ADDR_LOCAL, NDMP9_ADDR_LOCAL },
206 { NDMP4_ADDR_TCP, NDMP9_ADDR_TCP },
207 END_ENUM_CONVERSION_TABLE
216 switch (addr4->addr_type) {
217 case NDMP4_ADDR_LOCAL:
218 addr9->addr_type = NDMP9_ADDR_LOCAL;
222 addr9->addr_type = NDMP9_ADDR_TCP;
223 if (addr4->ndmp4_addr_u.tcp_addr.tcp_addr_len < 1)
225 addr9->ndmp9_addr_u.tcp_addr.ip_addr =
226 addr4->ndmp4_addr_u.tcp_addr.tcp_addr_val[0].ip_addr;
227 addr9->ndmp9_addr_u.tcp_addr.port =
228 addr4->ndmp4_addr_u.tcp_addr.tcp_addr_val[0].port;
232 NDMOS_MACRO_ZEROFILL (addr9);
233 addr9->addr_type = -1;
245 ndmp4_tcp_addr * tcp;
247 switch (addr9->addr_type) {
248 case NDMP9_ADDR_LOCAL:
249 addr4->addr_type = NDMP4_ADDR_LOCAL;
253 addr4->addr_type = NDMP4_ADDR_TCP;
255 tcp = NDMOS_MACRO_NEWN(ndmp4_tcp_addr, 1);
256 NDMOS_MACRO_ZEROFILL(tcp);
258 tcp[0].ip_addr = addr9->ndmp9_addr_u.tcp_addr.ip_addr;
259 tcp[0].port = addr9->ndmp9_addr_u.tcp_addr.port;
261 addr4->ndmp4_addr_u.tcp_addr.tcp_addr_val = tcp;
262 addr4->ndmp4_addr_u.tcp_addr.tcp_addr_len = 1;
266 NDMOS_MACRO_ZEROFILL (addr4);
267 addr4->addr_type = -1;
277 ****************************************************************
280 struct enum_conversion ndmp_49_auth_type[] = {
281 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL }, /* default */
282 { NDMP4_AUTH_NONE, NDMP9_AUTH_NONE },
283 { NDMP4_AUTH_TEXT, NDMP9_AUTH_TEXT },
284 { NDMP4_AUTH_MD5, NDMP9_AUTH_MD5 },
285 END_ENUM_CONVERSION_TABLE
289 ndmp_4to9_auth_data (
290 ndmp4_auth_data *auth_data4,
291 ndmp9_auth_data *auth_data9)
295 ndmp4_auth_text *text4;
296 ndmp9_auth_text *text9;
297 ndmp4_auth_md5 *md54;
298 ndmp9_auth_md5 *md59;
300 switch (auth_data4->auth_type) {
301 case NDMP4_AUTH_NONE:
302 auth_data9->auth_type = NDMP9_AUTH_NONE;
305 case NDMP4_AUTH_TEXT:
306 auth_data9->auth_type = NDMP9_AUTH_TEXT;
307 text4 = &auth_data4->ndmp4_auth_data_u.auth_text;
308 text9 = &auth_data9->ndmp9_auth_data_u.auth_text;
309 rc = CNVT_STRDUP_TO_9(text4, text9, auth_id);
311 return rc; /* no mem */
313 rc = CNVT_STRDUP_TO_9(text4, text9, auth_password);
315 NDMOS_API_FREE (text9->auth_id);
317 return rc; /* no mem */
322 auth_data9->auth_type = NDMP9_AUTH_MD5;
323 md54 = &auth_data4->ndmp4_auth_data_u.auth_md5;
324 md59 = &auth_data9->ndmp9_auth_data_u.auth_md5;
325 rc = CNVT_STRDUP_TO_9(md54, md59, auth_id);
327 return rc; /* no mem */
329 NDMOS_API_BCOPY (md54->auth_digest, md59->auth_digest, 16);
333 auth_data9->auth_type = auth_data4->auth_type;
334 NDMOS_MACRO_ZEROFILL (&auth_data9->ndmp9_auth_data_u);
343 ndmp_9to4_auth_data (
344 ndmp9_auth_data *auth_data9,
345 ndmp4_auth_data *auth_data4)
349 ndmp9_auth_text *text9;
350 ndmp4_auth_text *text4;
351 ndmp9_auth_md5 *md59;
352 ndmp4_auth_md5 *md54;
354 switch (auth_data9->auth_type) {
355 case NDMP9_AUTH_NONE:
356 auth_data4->auth_type = NDMP4_AUTH_NONE;
359 case NDMP9_AUTH_TEXT:
360 auth_data4->auth_type = NDMP4_AUTH_TEXT;
361 text9 = &auth_data9->ndmp9_auth_data_u.auth_text;
362 text4 = &auth_data4->ndmp4_auth_data_u.auth_text;
363 rc = CNVT_STRDUP_FROM_9(text4, text9, auth_id);
365 return rc; /* no mem */
367 rc = CNVT_STRDUP_FROM_9(text4, text9, auth_password);
369 NDMOS_API_FREE (text9->auth_id);
371 return rc; /* no mem */
376 auth_data4->auth_type = NDMP4_AUTH_MD5;
377 md59 = &auth_data9->ndmp9_auth_data_u.auth_md5;
378 md54 = &auth_data4->ndmp4_auth_data_u.auth_md5;
379 rc = CNVT_STRDUP_FROM_9(md54, md59, auth_id);
381 return rc; /* no mem */
383 NDMOS_API_BCOPY (md59->auth_digest, md54->auth_digest, 16);
387 auth_data4->auth_type = auth_data9->auth_type;
388 NDMOS_MACRO_ZEROFILL (&auth_data4->ndmp4_auth_data_u);
397 ndmp_4to9_auth_attr (
398 ndmp4_auth_attr *auth_attr4,
399 ndmp9_auth_attr *auth_attr9)
403 switch (auth_attr4->auth_type) {
404 case NDMP4_AUTH_NONE:
405 auth_attr9->auth_type = NDMP9_AUTH_NONE;
408 case NDMP4_AUTH_TEXT:
409 auth_attr9->auth_type = NDMP9_AUTH_TEXT;
413 auth_attr9->auth_type = NDMP9_AUTH_MD5;
414 NDMOS_API_BCOPY (auth_attr4->ndmp4_auth_attr_u.challenge,
415 auth_attr9->ndmp9_auth_attr_u.challenge, 64);
419 auth_attr9->auth_type = auth_attr4->auth_type;
420 NDMOS_MACRO_ZEROFILL (&auth_attr9->ndmp9_auth_attr_u);
429 ndmp_9to4_auth_attr (
430 ndmp9_auth_attr *auth_attr9,
431 ndmp4_auth_attr *auth_attr4)
435 switch (auth_attr9->auth_type) {
436 case NDMP9_AUTH_NONE:
437 auth_attr4->auth_type = NDMP4_AUTH_NONE;
440 case NDMP9_AUTH_TEXT:
441 auth_attr4->auth_type = NDMP4_AUTH_TEXT;
445 auth_attr4->auth_type = NDMP4_AUTH_MD5;
446 NDMOS_API_BCOPY (auth_attr9->ndmp9_auth_attr_u.challenge,
447 auth_attr4->ndmp4_auth_attr_u.challenge, 64);
451 auth_attr4->auth_type = auth_attr9->auth_type;
452 NDMOS_MACRO_ZEROFILL (&auth_attr4->ndmp4_auth_attr_u);
467 ndmp_4to9_connect_open_request (
468 ndmp4_connect_open_request *request4,
469 ndmp9_connect_open_request *request9)
471 CNVT_TO_9 (request4, request9, protocol_version);
476 ndmp_9to4_connect_open_request (
477 ndmp9_connect_open_request *request9,
478 ndmp4_connect_open_request *request4)
480 CNVT_FROM_9 (request4, request9, protocol_version);
486 * ndmp_connect_client_auth
493 ndmp_4to9_connect_client_auth_request (
494 ndmp4_connect_client_auth_request *request4,
495 ndmp9_connect_client_auth_request *request9)
499 rc = ndmp_4to9_auth_data (&request4->auth_data, &request9->auth_data);
505 ndmp_9to4_connect_client_auth_request (
506 ndmp9_connect_client_auth_request *request9,
507 ndmp4_connect_client_auth_request *request4)
511 rc = ndmp_9to4_auth_data (&request9->auth_data, &request4->auth_data);
519 * no arg request, **NO REPLY**
523 * ndmp_connect_server_auth
528 ndmp_4to9_connect_server_auth_request (
529 ndmp4_connect_server_auth_request *request4,
530 ndmp9_connect_server_auth_request *request9)
536 ndmp_9to4_connect_server_auth_request (
537 ndmp9_connect_server_auth_request *request9,
538 ndmp4_connect_server_auth_request *request4)
548 ****************************************************************
552 * ndmp_config_get_host_info
557 ndmp_4to9_config_get_host_info_reply (
558 ndmp4_config_get_host_info_reply *reply4,
559 ndmp9_config_get_host_info_reply *reply9)
563 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
564 CNVT_STRDUP_TO_9x (reply4, reply9, hostname, config_info.hostname);
565 CNVT_STRDUP_TO_9x (reply4, reply9, os_type, config_info.os_type);
566 CNVT_STRDUP_TO_9x (reply4, reply9, os_vers, config_info.os_vers);
567 CNVT_STRDUP_TO_9x (reply4, reply9, hostid, config_info.hostid);
573 ndmp_9to4_config_get_host_info_reply (
574 ndmp9_config_get_host_info_reply *reply9,
575 ndmp4_config_get_host_info_reply *reply4)
577 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
578 CNVT_STRDUP_FROM_9x (reply4, reply9, hostname, config_info.hostname);
579 CNVT_STRDUP_FROM_9x (reply4, reply9, os_type, config_info.os_type);
580 CNVT_STRDUP_FROM_9x (reply4, reply9, os_vers, config_info.os_vers);
581 CNVT_STRDUP_FROM_9x (reply4, reply9, hostid, config_info.hostid);
589 * ndmp_config_get_connection_type
594 ndmp_4to9_config_get_connection_type_reply (
595 ndmp4_config_get_connection_type_reply *reply4,
596 ndmp9_config_get_connection_type_reply *reply9)
601 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
602 for (i = 0; i < reply4->addr_types.addr_types_len; i++) {
603 switch (reply4->addr_types.addr_types_val[i]) {
604 case NDMP4_ADDR_LOCAL:
605 reply9->config_info.conntypes |=
606 NDMP9_CONFIG_CONNTYPE_LOCAL;
610 reply9->config_info.conntypes |=
611 NDMP9_CONFIG_CONNTYPE_TCP;
625 ndmp_9to4_config_get_connection_type_reply (
626 ndmp9_config_get_connection_type_reply *reply9,
627 ndmp4_config_get_connection_type_reply *reply4)
631 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
633 reply4->addr_types.addr_types_val =
634 NDMOS_MACRO_NEWN(ndmp4_addr_type, 3);
635 if (!reply4->addr_types.addr_types_val) {
636 return -1; /* no mem */
640 if (reply9->config_info.conntypes & NDMP9_CONFIG_CONNTYPE_LOCAL) {
641 reply4->addr_types.addr_types_val[i++] = NDMP4_ADDR_LOCAL;
643 if (reply9->config_info.conntypes & NDMP9_CONFIG_CONNTYPE_TCP) {
644 reply4->addr_types.addr_types_val[i++] = NDMP4_ADDR_TCP;
646 reply4->addr_types.addr_types_len = i;
653 * ndmp_config_get_auth_attr
657 ndmp_4to9_config_get_auth_attr_request (
658 struct ndmp4_config_get_auth_attr_request *request4,
659 struct ndmp9_config_get_auth_attr_request *request9)
664 rc = CNVT_E_TO_9 (request4, request9, auth_type, ndmp_49_auth_type);
665 if (rc == NDMP_INVALID_GENERAL) {
666 CNVT_TO_9 (request4, request9, auth_type);
674 ndmp_9to4_config_get_auth_attr_request (
675 struct ndmp9_config_get_auth_attr_request *request9,
676 struct ndmp4_config_get_auth_attr_request *request4)
681 rc = CNVT_E_FROM_9 (request4, request9, auth_type, ndmp_49_auth_type);
682 if (rc == NDMP_INVALID_GENERAL) {
683 CNVT_FROM_9 (request4, request9, auth_type);
691 ndmp_4to9_config_get_auth_attr_reply (
692 struct ndmp4_config_get_auth_attr_reply *reply4,
693 struct ndmp9_config_get_auth_attr_reply *reply9)
697 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
699 n_error += ndmp_4to9_auth_attr (&reply4->server_attr,
700 &reply9->server_attr);
706 ndmp_9to4_config_get_auth_attr_reply (
707 struct ndmp9_config_get_auth_attr_reply *reply9,
708 struct ndmp4_config_get_auth_attr_reply *reply4)
712 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
714 n_error += ndmp_9to4_auth_attr (&reply9->server_attr,
715 &reply4->server_attr);
722 * ndmp_config_get_server_info
727 ndmp_4to9_config_get_server_info_reply (
728 ndmp4_config_get_server_info_reply *reply4,
729 ndmp9_config_get_server_info_reply *reply9)
731 unsigned int i, n_error = 0;
733 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
734 CNVT_STRDUP_TO_9x (reply4, reply9,
735 vendor_name, config_info.vendor_name);
736 CNVT_STRDUP_TO_9x (reply4, reply9,
737 product_name, config_info.product_name);
738 CNVT_STRDUP_TO_9x (reply4, reply9,
739 revision_number, config_info.revision_number);
741 reply9->config_info.authtypes = 0;
742 for (i = 0; i < reply4->auth_type.auth_type_len; i++) {
743 switch (reply4->auth_type.auth_type_val[i]) {
744 case NDMP4_AUTH_NONE:
745 reply9->config_info.authtypes |=
746 NDMP9_CONFIG_AUTHTYPE_NONE;
749 case NDMP4_AUTH_TEXT:
750 reply9->config_info.authtypes |=
751 NDMP9_CONFIG_AUTHTYPE_TEXT;
755 reply9->config_info.authtypes |=
756 NDMP9_CONFIG_AUTHTYPE_MD5;
770 ndmp_9to4_config_get_server_info_reply (
771 ndmp9_config_get_server_info_reply *reply9,
772 ndmp4_config_get_server_info_reply *reply4)
776 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
777 CNVT_STRDUP_FROM_9x (reply4, reply9,
778 vendor_name, config_info.vendor_name);
779 CNVT_STRDUP_FROM_9x (reply4, reply9,
780 product_name, config_info.product_name);
781 CNVT_STRDUP_FROM_9x (reply4, reply9,
782 revision_number, config_info.revision_number);
784 reply4->auth_type.auth_type_val = NDMOS_MACRO_NEWN(ndmp4_auth_type, 3);
785 if (!reply4->auth_type.auth_type_val) {
790 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_NONE) {
791 reply4->auth_type.auth_type_val[i++] = NDMP4_AUTH_NONE;
793 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_TEXT) {
794 reply4->auth_type.auth_type_val[i++] = NDMP4_AUTH_TEXT;
796 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_MD5) {
797 reply4->auth_type.auth_type_val[i++] = NDMP4_AUTH_MD5;
799 reply4->auth_type.auth_type_len = i;
806 * ndmp_config_get_butype_info
811 ndmp_4to9_config_get_butype_info_reply (
812 ndmp4_config_get_butype_info_reply *reply4,
813 ndmp9_config_get_butype_info_reply *reply9)
818 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
820 n = reply4->butype_info.butype_info_len;
822 reply9->config_info.butype_info.butype_info_len = 0;
823 reply9->config_info.butype_info.butype_info_val = 0;
827 reply9->config_info.butype_info.butype_info_val =
828 NDMOS_MACRO_NEWN (ndmp9_butype_info, n);
830 for (i = 0; i < n; i++) {
831 ndmp9_butype_info * bu9;
832 ndmp4_butype_info * bu4;
834 bu4 = &reply4->butype_info.butype_info_val[i];
835 bu9 = &reply9->config_info.butype_info.butype_info_val[i];
837 NDMOS_MACRO_ZEROFILL (bu9);
839 CNVT_STRDUP_TO_9 (bu4, bu9, butype_name);
840 ndmp_4to9_pval_vec_dup (bu4->default_env.default_env_val,
841 &bu9->default_env.default_env_val,
842 bu4->default_env.default_env_len);
844 bu9->default_env.default_env_len =
845 bu4->default_env.default_env_len;
847 bu9->v4attr.valid = NDMP9_VALIDITY_VALID;
848 bu9->v4attr.value = bu4->attrs;
851 reply9->config_info.butype_info.butype_info_len = n;
857 ndmp_9to4_config_get_butype_info_reply (
858 ndmp9_config_get_butype_info_reply *reply9,
859 ndmp4_config_get_butype_info_reply *reply4)
864 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
866 n = reply9->config_info.butype_info.butype_info_len;
868 reply4->butype_info.butype_info_len = 0;
869 reply4->butype_info.butype_info_val = 0;
873 reply4->butype_info.butype_info_val =
874 NDMOS_MACRO_NEWN (ndmp4_butype_info, n);
876 for (i = 0; i < n; i++) {
877 ndmp4_butype_info * bu4;
878 ndmp9_butype_info * bu9;
880 bu9 = &reply9->config_info.butype_info.butype_info_val[i];
881 bu4 = &reply4->butype_info.butype_info_val[i];
883 NDMOS_MACRO_ZEROFILL (bu4);
885 CNVT_STRDUP_FROM_9 (bu4, bu9, butype_name);
886 ndmp_9to4_pval_vec_dup (bu9->default_env.default_env_val,
887 &bu4->default_env.default_env_val,
888 bu9->default_env.default_env_len);
890 bu4->default_env.default_env_len =
891 bu9->default_env.default_env_len;
893 bu4->attrs = bu9->v4attr.value;
896 reply4->butype_info.butype_info_len = n;
903 * ndmp_config_get_fs_info
908 ndmp_4to9_config_get_fs_info_reply (
909 ndmp4_config_get_fs_info_reply *reply4,
910 ndmp9_config_get_fs_info_reply *reply9)
915 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
917 n = reply4->fs_info.fs_info_len;
919 reply9->config_info.fs_info.fs_info_len = 0;
920 reply9->config_info.fs_info.fs_info_val = 0;
924 reply9->config_info.fs_info.fs_info_val =
925 NDMOS_MACRO_NEWN (ndmp9_fs_info, n);
927 for (i = 0; i < n; i++) {
931 fs4 = &reply4->fs_info.fs_info_val[i];
932 fs9 = &reply9->config_info.fs_info.fs_info_val[i];
934 NDMOS_MACRO_ZEROFILL (fs9);
936 CNVT_STRDUP_TO_9 (fs4, fs9, fs_type);
937 CNVT_STRDUP_TO_9 (fs4, fs9, fs_logical_device);
938 CNVT_STRDUP_TO_9 (fs4, fs9, fs_physical_device);
939 CNVT_STRDUP_TO_9 (fs4, fs9, fs_status);
941 ndmp_4to9_pval_vec_dup (fs4->fs_env.fs_env_val,
942 &fs9->fs_env.fs_env_val,
943 fs4->fs_env.fs_env_len);
945 fs9->fs_env.fs_env_len = fs4->fs_env.fs_env_len;
948 reply9->config_info.fs_info.fs_info_len = n;
954 ndmp_9to4_config_get_fs_info_reply (
955 ndmp9_config_get_fs_info_reply *reply9,
956 ndmp4_config_get_fs_info_reply *reply4)
961 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
963 n = reply9->config_info.fs_info.fs_info_len;
965 reply4->fs_info.fs_info_len = 0;
966 reply4->fs_info.fs_info_val = 0;
970 reply4->fs_info.fs_info_val = NDMOS_MACRO_NEWN (ndmp4_fs_info, n);
972 for (i = 0; i < n; i++) {
976 fs9 = &reply9->config_info.fs_info.fs_info_val[i];
977 fs4 = &reply4->fs_info.fs_info_val[i];
979 NDMOS_MACRO_ZEROFILL (fs4);
981 CNVT_STRDUP_FROM_9 (fs4, fs9, fs_type);
982 CNVT_STRDUP_FROM_9 (fs4, fs9, fs_logical_device);
983 CNVT_STRDUP_FROM_9 (fs4, fs9, fs_physical_device);
984 CNVT_STRDUP_FROM_9 (fs4, fs9, fs_status);
986 ndmp_9to4_pval_vec_dup (fs9->fs_env.fs_env_val,
987 &fs4->fs_env.fs_env_val,
988 fs9->fs_env.fs_env_len);
990 fs4->fs_env.fs_env_len = fs9->fs_env.fs_env_len;
993 reply4->fs_info.fs_info_len = n;
1000 * ndmp_config_get_tape_info
1005 * ndmp_config_get_scsi_info
1010 ndmp_4to9_device_info_vec_dup (
1011 ndmp4_device_info *devinf4,
1012 ndmp9_device_info **devinf9_p,
1015 ndmp9_device_info * devinf9;
1019 devinf9 = *devinf9_p = NDMOS_MACRO_NEWN(ndmp9_device_info, n_devinf);
1021 return -1; /* no mem */
1024 for (i = 0; i < n_devinf; i++) {
1025 ndmp4_device_info * di4 = &devinf4[i];
1026 ndmp9_device_info * di9 = &devinf9[i];
1028 NDMOS_MACRO_ZEROFILL (di9);
1030 CNVT_STRDUP_TO_9 (di4, di9, model);
1032 di9->caplist.caplist_val =
1033 NDMOS_MACRO_NEWN (ndmp9_device_capability,
1034 di4->caplist.caplist_len);
1036 if (!di9->caplist.caplist_val) {
1040 for (j = 0; j < di4->caplist.caplist_len; j++) {
1041 ndmp4_device_capability * cap4;
1042 ndmp9_device_capability * cap9;
1044 cap4 = &di4->caplist.caplist_val[j];
1045 cap9 = &di9->caplist.caplist_val[j];
1047 NDMOS_MACRO_ZEROFILL (cap9);
1049 cap9->v4attr.valid = NDMP9_VALIDITY_VALID;
1050 cap9->v4attr.value = cap4->attr;
1052 CNVT_STRDUP_TO_9 (cap4, cap9, device);
1054 ndmp_4to9_pval_vec_dup (
1055 cap4->capability.capability_val,
1056 &cap9->capability.capability_val,
1057 cap4->capability.capability_len);
1059 cap9->capability.capability_len =
1060 cap4->capability.capability_len;
1062 di9->caplist.caplist_len = j;
1069 ndmp_9to4_device_info_vec_dup (
1070 ndmp9_device_info *devinf9,
1071 ndmp4_device_info **devinf4_p,
1074 ndmp4_device_info * devinf4;
1078 devinf4 = *devinf4_p = NDMOS_MACRO_NEWN(ndmp4_device_info, n_devinf);
1080 return -1; /* no mem */
1083 for (i = 0; i < n_devinf; i++) {
1084 ndmp9_device_info * di9 = &devinf9[i];
1085 ndmp4_device_info * di4 = &devinf4[i];
1087 NDMOS_MACRO_ZEROFILL (di4);
1089 CNVT_STRDUP_FROM_9 (di4, di9, model);
1091 di4->caplist.caplist_val =
1092 NDMOS_MACRO_NEWN (ndmp4_device_capability,
1093 di9->caplist.caplist_len);
1095 if (!di4->caplist.caplist_val) {
1099 for (j = 0; j < di9->caplist.caplist_len; j++) {
1100 ndmp9_device_capability * cap9;
1101 ndmp4_device_capability * cap4;
1103 cap9 = &di9->caplist.caplist_val[j];
1104 cap4 = &di4->caplist.caplist_val[j];
1106 NDMOS_MACRO_ZEROFILL (cap4);
1108 CNVT_STRDUP_FROM_9 (cap4, cap9, device);
1110 ndmp_9to4_pval_vec_dup (
1111 cap9->capability.capability_val,
1112 &cap4->capability.capability_val,
1113 cap9->capability.capability_len);
1115 cap4->capability.capability_len =
1116 cap9->capability.capability_len;
1118 di4->caplist.caplist_len = j;
1125 ndmp_4to9_config_get_tape_info_reply (
1126 ndmp4_config_get_tape_info_reply *reply4,
1127 ndmp9_config_get_tape_info_reply *reply9)
1129 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1131 ndmp_4to9_device_info_vec_dup (
1132 reply4->tape_info.tape_info_val,
1133 &reply9->config_info.tape_info.tape_info_val,
1134 reply4->tape_info.tape_info_len);
1136 reply9->config_info.tape_info.tape_info_len =
1137 reply4->tape_info.tape_info_len;
1143 ndmp_9to4_config_get_tape_info_reply (
1144 ndmp9_config_get_tape_info_reply *reply9,
1145 ndmp4_config_get_tape_info_reply *reply4)
1147 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1149 ndmp_9to4_device_info_vec_dup (
1150 reply9->config_info.tape_info.tape_info_val,
1151 &reply4->tape_info.tape_info_val,
1152 reply9->config_info.tape_info.tape_info_len);
1154 reply4->tape_info.tape_info_len =
1155 reply9->config_info.tape_info.tape_info_len;
1161 ndmp_4to9_config_get_scsi_info_reply (
1162 ndmp4_config_get_scsi_info_reply *reply4,
1163 ndmp9_config_get_scsi_info_reply *reply9)
1165 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1167 ndmp_4to9_device_info_vec_dup (
1168 reply4->scsi_info.scsi_info_val,
1169 &reply9->config_info.scsi_info.scsi_info_val,
1170 reply4->scsi_info.scsi_info_len);
1172 reply9->config_info.scsi_info.scsi_info_len =
1173 reply4->scsi_info.scsi_info_len;
1179 ndmp_9to4_config_get_scsi_info_reply (
1180 ndmp9_config_get_scsi_info_reply *reply9,
1181 ndmp4_config_get_scsi_info_reply *reply4)
1183 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1185 ndmp_9to4_device_info_vec_dup (
1186 reply9->config_info.scsi_info.scsi_info_val,
1187 &reply4->scsi_info.scsi_info_val,
1188 reply9->config_info.scsi_info.scsi_info_len);
1190 reply4->scsi_info.scsi_info_len =
1191 reply9->config_info.scsi_info.scsi_info_len;
1202 ****************************************************************
1210 ndmp_4to9_scsi_open_request (
1211 ndmp4_scsi_open_request *request4,
1212 ndmp9_scsi_open_request *request9)
1214 request9->device = NDMOS_API_STRDUP (request4->device);
1215 if (!request9->device) {
1216 return -1; /* no memory */
1222 ndmp_9to4_scsi_open_request (
1223 ndmp9_scsi_open_request *request9,
1224 ndmp4_scsi_open_request *request4)
1226 request4->device = NDMOS_API_STRDUP (request9->device);
1227 if (!request4->device) {
1228 return -1; /* no memory */
1235 * no args request, just error reply
1239 * ndmp_scsi_get_state
1244 ndmp_4to9_scsi_get_state_reply (
1245 ndmp4_scsi_get_state_reply *reply4,
1246 ndmp9_scsi_get_state_reply *reply9)
1248 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1249 CNVT_TO_9 (reply4, reply9, target_controller);
1250 CNVT_TO_9 (reply4, reply9, target_id);
1251 CNVT_TO_9 (reply4, reply9, target_lun);
1257 ndmp_9to4_scsi_get_state_reply (
1258 ndmp9_scsi_get_state_reply *reply9,
1259 ndmp4_scsi_get_state_reply *reply4)
1261 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1262 CNVT_FROM_9 (reply4, reply9, target_controller);
1263 CNVT_FROM_9 (reply4, reply9, target_id);
1264 CNVT_FROM_9 (reply4, reply9, target_lun);
1270 * ndmp_scsi_set_target -- deprecated
1276 * ndmp_scsi_reset_device
1277 * no args request, just error reply
1281 * ndmp_scsi_reset_bus -- deprecated
1282 * no args request, just error reply
1287 * ndmp_tape_execute_cdb
1288 * ndmp_scsi_execute_cdb
1292 ndmp_4to9_execute_cdb_request (
1293 ndmp4_execute_cdb_request *request4,
1294 ndmp9_execute_cdb_request *request9)
1300 switch (request4->flags) {
1302 request9->data_dir = NDMP9_SCSI_DATA_DIR_NONE;
1305 case NDMP4_SCSI_DATA_IN:
1306 request9->data_dir = NDMP9_SCSI_DATA_DIR_IN;
1309 case NDMP4_SCSI_DATA_OUT:
1310 request9->data_dir = NDMP9_SCSI_DATA_DIR_IN;
1314 /* deemed insolvable */
1319 CNVT_TO_9 (request4, request9, timeout);
1320 CNVT_TO_9 (request4, request9, datain_len);
1322 len = request4->dataout.dataout_len;
1324 p = NDMOS_API_MALLOC (len);
1328 NDMOS_API_BCOPY (request4->dataout.dataout_val, p, len);
1333 request9->dataout.dataout_len = len;
1334 request9->dataout.dataout_val = p;
1336 len = request4->cdb.cdb_len;
1338 p = NDMOS_API_MALLOC (len);
1340 if (request9->dataout.dataout_val) {
1341 NDMOS_API_FREE (request9->dataout.dataout_val);
1342 request9->dataout.dataout_len = 0;
1343 request9->dataout.dataout_val = 0;
1347 NDMOS_API_BCOPY (request4->cdb.cdb_val, p, len);
1352 request9->cdb.cdb_len = len;
1353 request9->cdb.cdb_val = p;
1359 ndmp_9to4_execute_cdb_request (
1360 ndmp9_execute_cdb_request *request9,
1361 ndmp4_execute_cdb_request *request4)
1367 switch (request9->data_dir) {
1368 case NDMP9_SCSI_DATA_DIR_NONE:
1369 request4->flags = 0;
1372 case NDMP9_SCSI_DATA_DIR_IN:
1373 request4->flags = NDMP4_SCSI_DATA_IN;
1376 case NDMP9_SCSI_DATA_DIR_OUT:
1377 request4->flags = NDMP4_SCSI_DATA_OUT;
1381 /* deemed insolvable */
1386 CNVT_FROM_9 (request4, request9, timeout);
1387 CNVT_FROM_9 (request4, request9, datain_len);
1389 len = request9->dataout.dataout_len;
1391 p = NDMOS_API_MALLOC (len);
1395 NDMOS_API_BCOPY (request9->dataout.dataout_val, p, len);
1400 request4->dataout.dataout_len = len;
1401 request4->dataout.dataout_val = p;
1403 len = request9->cdb.cdb_len;
1405 p = NDMOS_API_MALLOC (len);
1407 if (request4->dataout.dataout_val) {
1408 NDMOS_API_FREE (request4->dataout.dataout_val);
1409 request4->dataout.dataout_len = 0;
1410 request4->dataout.dataout_val = 0;
1414 NDMOS_API_BCOPY (request9->cdb.cdb_val, p, len);
1419 request4->cdb.cdb_len = len;
1420 request4->cdb.cdb_val = p;
1426 ndmp_4to9_execute_cdb_reply (
1427 ndmp4_execute_cdb_reply *reply4,
1428 ndmp9_execute_cdb_reply *reply9)
1433 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1434 CNVT_TO_9 (reply4, reply9, status);
1435 CNVT_TO_9 (reply4, reply9, dataout_len);
1437 len = reply4->datain.datain_len;
1439 p = NDMOS_API_MALLOC (len);
1443 NDMOS_API_BCOPY (reply4->datain.datain_val, p, len);
1448 reply9->datain.datain_len = len;
1449 reply9->datain.datain_val = p;
1451 len = reply4->ext_sense.ext_sense_len;
1453 p = NDMOS_API_MALLOC (len);
1455 if (reply9->datain.datain_val) {
1456 NDMOS_API_FREE (reply9->datain.datain_val);
1457 reply9->datain.datain_len = 0;
1458 reply9->datain.datain_val = 0;
1462 NDMOS_API_BCOPY (reply4->ext_sense.ext_sense_val, p, len);
1467 reply9->ext_sense.ext_sense_len = len;
1468 reply9->ext_sense.ext_sense_val = p;
1474 ndmp_9to4_execute_cdb_reply (
1475 ndmp9_execute_cdb_reply *reply9,
1476 ndmp4_execute_cdb_reply *reply4)
1481 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1482 CNVT_FROM_9 (reply4, reply9, status);
1483 CNVT_FROM_9 (reply4, reply9, dataout_len);
1485 len = reply9->datain.datain_len;
1487 p = NDMOS_API_MALLOC (len);
1491 NDMOS_API_BCOPY (reply9->datain.datain_val, p, len);
1496 reply4->datain.datain_len = len;
1497 reply4->datain.datain_val = p;
1499 len = reply9->ext_sense.ext_sense_len;
1501 p = NDMOS_API_MALLOC (len);
1503 if (reply4->datain.datain_val) {
1504 NDMOS_API_FREE (reply9->datain.datain_val);
1505 reply4->datain.datain_len = 0;
1506 reply4->datain.datain_val = 0;
1510 NDMOS_API_BCOPY (reply9->ext_sense.ext_sense_val, p, len);
1515 reply4->ext_sense.ext_sense_len = len;
1516 reply4->ext_sense.ext_sense_val = p;
1526 ****************************************************************
1531 * ndmp_tape_open_request
1534 struct enum_conversion ndmp_49_tape_open_mode[] = {
1535 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1536 { NDMP4_TAPE_READ_MODE, NDMP9_TAPE_READ_MODE },
1537 { NDMP4_TAPE_RDWR_MODE, NDMP9_TAPE_RDWR_MODE },
1538 END_ENUM_CONVERSION_TABLE
1544 ndmp_4to9_tape_open_request (
1545 ndmp4_tape_open_request *request4,
1546 ndmp9_tape_open_request *request9)
1552 * Mode codes are compatible between versions.
1553 * We let untranslated values through to
1554 * facilitate testing illegal values.
1556 rc = convert_enum_to_9 (ndmp_49_tape_open_mode, request4->mode);
1557 if (rc == NDMP_INVALID_GENERAL) {
1559 request9->mode = request4->mode;
1561 request9->mode = rc;
1564 request9->device = NDMOS_API_STRDUP (request4->device);
1565 if (!request9->device) {
1566 return -1; /* no memory */
1573 ndmp_9to4_tape_open_request (
1574 ndmp9_tape_open_request *request9,
1575 ndmp4_tape_open_request *request4)
1580 rc = convert_enum_from_9 (ndmp_49_tape_open_mode, request9->mode);
1581 if (rc == NDMP_INVALID_GENERAL) {
1583 request4->mode = request9->mode;
1585 request4->mode = rc;
1588 request4->device = NDMOS_API_STRDUP (request9->device);
1589 if (!request4->device) {
1590 return -1; /* no memory */
1601 * ndmp_tape_get_state_reply
1602 ****************************************************************
1606 ndmp_4to9_tape_get_state_reply (
1607 ndmp4_tape_get_state_reply *reply4,
1608 ndmp9_tape_get_state_reply *reply9)
1610 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1611 CNVT_TO_9 (reply4, reply9, flags);
1612 CNVT_VUL_TO_9 (reply4, reply9, file_num);
1613 CNVT_VUL_TO_9 (reply4, reply9, soft_errors);
1614 CNVT_VUL_TO_9 (reply4, reply9, block_size);
1615 CNVT_VUL_TO_9 (reply4, reply9, blockno);
1616 CNVT_VUQ_TO_9 (reply4, reply9, total_space);
1617 CNVT_VUQ_TO_9 (reply4, reply9, space_remain);
1619 CNVT_VUL_TO_9 (reply4, reply9, partition);
1622 if (reply4->unsupported & NDMP4_TAPE_STATE_FILE_NUM_UNS)
1623 CNVT_IUL_TO_9 (reply9, file_num);
1625 if (reply4->unsupported & NDMP4_TAPE_STATE_SOFT_ERRORS_UNS)
1626 CNVT_IUL_TO_9 (reply9, soft_errors);
1628 if (reply4->unsupported & NDMP4_TAPE_STATE_BLOCK_SIZE_UNS)
1629 CNVT_IUL_TO_9 (reply9, block_size);
1631 if (reply4->unsupported & NDMP4_TAPE_STATE_BLOCKNO_UNS)
1632 CNVT_IUL_TO_9 (reply9, blockno);
1634 if (reply4->unsupported & NDMP4_TAPE_STATE_TOTAL_SPACE_UNS)
1635 CNVT_IUQ_TO_9 (reply9, total_space);
1637 if (reply4->unsupported & NDMP4_TAPE_STATE_SPACE_REMAIN_UNS)
1638 CNVT_IUQ_TO_9 (reply9, space_remain);
1641 if (reply4->unsupported & NDMP4_TAPE_STATE_PARTITION_UNS)
1642 CNVT_IUL_TO_9 (reply9, partition);
1649 ndmp_9to4_tape_get_state_reply (
1650 ndmp9_tape_get_state_reply *reply9,
1651 ndmp4_tape_get_state_reply *reply4)
1653 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1654 CNVT_FROM_9 (reply4, reply9, flags);
1655 CNVT_VUL_FROM_9 (reply4, reply9, file_num);
1656 CNVT_VUL_FROM_9 (reply4, reply9, soft_errors);
1657 CNVT_VUL_FROM_9 (reply4, reply9, block_size);
1658 CNVT_VUL_FROM_9 (reply4, reply9, blockno);
1659 CNVT_VUQ_FROM_9 (reply4, reply9, total_space);
1660 CNVT_VUQ_FROM_9 (reply4, reply9, space_remain);
1662 CNVT_VUL_FROM_9 (reply4, reply9, partition);
1665 reply4->unsupported = 0;
1667 if (!reply9->file_num.valid)
1668 reply4->unsupported |= NDMP4_TAPE_STATE_FILE_NUM_UNS;
1670 if (!reply9->soft_errors.valid)
1671 reply4->unsupported |= NDMP4_TAPE_STATE_SOFT_ERRORS_UNS;
1673 if (!reply9->block_size.valid)
1674 reply4->unsupported |= NDMP4_TAPE_STATE_BLOCK_SIZE_UNS;
1676 if (!reply9->blockno.valid)
1677 reply4->unsupported |= NDMP4_TAPE_STATE_BLOCKNO_UNS;
1679 if (!reply9->total_space.valid)
1680 reply4->unsupported |= NDMP4_TAPE_STATE_TOTAL_SPACE_UNS;
1682 if (!reply9->space_remain.valid)
1683 reply4->unsupported |= NDMP4_TAPE_STATE_SPACE_REMAIN_UNS;
1686 if (!reply9->partition.valid)
1687 reply4->unsupported |= NDMP4_TAPE_STATE_PARTITION_UNS;
1695 * ndmp_tape_mtio_request
1698 struct enum_conversion ndmp_49_tape_mtio_op[] = {
1699 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1700 { NDMP4_MTIO_FSF, NDMP9_MTIO_FSF },
1701 { NDMP4_MTIO_BSF, NDMP9_MTIO_BSF },
1702 { NDMP4_MTIO_FSR, NDMP9_MTIO_FSR },
1703 { NDMP4_MTIO_BSR, NDMP9_MTIO_BSR },
1704 { NDMP4_MTIO_REW, NDMP9_MTIO_REW },
1705 { NDMP4_MTIO_EOF, NDMP9_MTIO_EOF },
1706 { NDMP4_MTIO_OFF, NDMP9_MTIO_OFF },
1707 END_ENUM_CONVERSION_TABLE
1712 ndmp_4to9_tape_mtio_request (
1713 ndmp4_tape_mtio_request *request4,
1714 ndmp9_tape_mtio_request *request9)
1719 rc = CNVT_E_TO_9 (request4, request9, tape_op, ndmp_49_tape_mtio_op);
1720 if (rc == NDMP_INVALID_GENERAL) {
1722 CNVT_TO_9(request4, request9, tape_op);
1725 CNVT_TO_9(request4, request9, count);
1731 ndmp_9to4_tape_mtio_request (
1732 ndmp9_tape_mtio_request *request9,
1733 ndmp4_tape_mtio_request *request4)
1738 rc = CNVT_E_FROM_9 (request4, request9, tape_op, ndmp_49_tape_mtio_op);
1739 if (rc == NDMP_INVALID_GENERAL) {
1741 CNVT_FROM_9(request4, request9, tape_op);
1744 CNVT_FROM_9(request4, request9, count);
1750 ndmp_4to9_tape_mtio_reply (
1751 ndmp4_tape_mtio_reply *reply4,
1752 ndmp9_tape_mtio_reply *reply9)
1754 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1755 CNVT_TO_9 (reply4, reply9, resid_count);
1760 ndmp_9to4_tape_mtio_reply (
1761 ndmp9_tape_mtio_reply *reply9,
1762 ndmp4_tape_mtio_reply *reply4)
1764 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1765 CNVT_FROM_9 (reply4, reply9, resid_count);
1775 ndmp_4to9_tape_write_request (
1776 ndmp4_tape_write_request *request4,
1777 ndmp9_tape_write_request *request9)
1782 len = request4->data_out.data_out_len;
1784 p = NDMOS_API_MALLOC (len);
1789 NDMOS_API_BCOPY (request4->data_out.data_out_val, p, len);
1791 request9->data_out.data_out_val = p;
1792 request9->data_out.data_out_len = len;
1798 ndmp_9to4_tape_write_request (
1799 ndmp9_tape_write_request *request9,
1800 ndmp4_tape_write_request *request4)
1805 len = request9->data_out.data_out_len;
1807 p = NDMOS_API_MALLOC (len);
1812 NDMOS_API_BCOPY (request9->data_out.data_out_val, p, len);
1814 request4->data_out.data_out_val = p;
1815 request4->data_out.data_out_len = len;
1821 ndmp_4to9_tape_write_reply (
1822 ndmp4_tape_write_reply *reply4,
1823 ndmp9_tape_write_reply *reply9)
1825 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1826 CNVT_TO_9 (reply4, reply9, count);
1831 ndmp_9to4_tape_write_reply (
1832 ndmp9_tape_write_reply *reply9,
1833 ndmp4_tape_write_reply *reply4)
1835 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1836 CNVT_FROM_9 (reply4, reply9, count);
1846 ndmp_4to9_tape_read_request (
1847 ndmp4_tape_read_request *request4,
1848 ndmp9_tape_read_request *request9)
1850 CNVT_TO_9 (request4, request9, count);
1855 ndmp_9to4_tape_read_request (
1856 ndmp9_tape_read_request *request9,
1857 ndmp4_tape_read_request *request4)
1859 CNVT_FROM_9 (request4, request9, count);
1864 ndmp_4to9_tape_read_reply (
1865 ndmp4_tape_read_reply *reply4,
1866 ndmp9_tape_read_reply *reply9)
1871 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1873 len = reply4->data_in.data_in_len;
1875 p = NDMOS_API_MALLOC (len);
1879 NDMOS_API_BCOPY (reply4->data_in.data_in_val, p, len);
1885 reply9->data_in.data_in_len = len;
1886 reply9->data_in.data_in_val = p;
1892 ndmp_9to4_tape_read_reply (
1893 ndmp9_tape_read_reply *reply9,
1894 ndmp4_tape_read_reply *reply4)
1899 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
1901 len = reply9->data_in.data_in_len;
1903 p = NDMOS_API_MALLOC (len);
1907 NDMOS_API_BCOPY (reply9->data_in.data_in_val, p, len);
1913 reply4->data_in.data_in_len = len;
1914 reply4->data_in.data_in_val = p;
1924 ****************************************************************
1928 * ndmp_mover_get_state
1933 struct enum_conversion ndmp_49_mover_mode[] = {
1934 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1935 { NDMP4_MOVER_MODE_READ, NDMP9_MOVER_MODE_READ },
1936 { NDMP4_MOVER_MODE_WRITE, NDMP9_MOVER_MODE_WRITE },
1938 END_ENUM_CONVERSION_TABLE
1941 struct enum_conversion ndmp_49_mover_state[] = {
1942 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1943 { NDMP4_MOVER_STATE_IDLE, NDMP9_MOVER_STATE_IDLE },
1944 { NDMP4_MOVER_STATE_LISTEN, NDMP9_MOVER_STATE_LISTEN },
1945 { NDMP4_MOVER_STATE_ACTIVE, NDMP9_MOVER_STATE_ACTIVE },
1946 { NDMP4_MOVER_STATE_PAUSED, NDMP9_MOVER_STATE_PAUSED },
1947 { NDMP4_MOVER_STATE_HALTED, NDMP9_MOVER_STATE_HALTED },
1950 { NDMP4_MOVER_STATE_ACTIVE, NDMP9_MOVER_STATE_STANDBY },
1952 END_ENUM_CONVERSION_TABLE
1955 struct enum_conversion ndmp_49_mover_pause_reason[] = {
1956 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1957 { NDMP4_MOVER_PAUSE_NA, NDMP9_MOVER_PAUSE_NA },
1958 { NDMP4_MOVER_PAUSE_EOM, NDMP9_MOVER_PAUSE_EOM },
1959 { NDMP4_MOVER_PAUSE_EOF, NDMP9_MOVER_PAUSE_EOF },
1960 { NDMP4_MOVER_PAUSE_SEEK, NDMP9_MOVER_PAUSE_SEEK },
1961 /* no NDMP4_MOVER_PAUSE_MEDIA_ERROR, so use EOF */
1962 { NDMP4_MOVER_PAUSE_EOF, NDMP9_MOVER_PAUSE_MEDIA_ERROR },
1963 { NDMP4_MOVER_PAUSE_EOW, NDMP9_MOVER_PAUSE_EOW },
1964 END_ENUM_CONVERSION_TABLE
1967 struct enum_conversion ndmp_49_mover_halt_reason[] = {
1968 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1969 { NDMP4_MOVER_HALT_NA, NDMP9_MOVER_HALT_NA },
1970 { NDMP4_MOVER_HALT_CONNECT_CLOSED, NDMP9_MOVER_HALT_CONNECT_CLOSED },
1971 { NDMP4_MOVER_HALT_ABORTED, NDMP9_MOVER_HALT_ABORTED },
1972 { NDMP4_MOVER_HALT_INTERNAL_ERROR, NDMP9_MOVER_HALT_INTERNAL_ERROR },
1973 { NDMP4_MOVER_HALT_CONNECT_ERROR, NDMP9_MOVER_HALT_CONNECT_ERROR },
1974 { NDMP4_MOVER_HALT_MEDIA_ERROR, NDMP9_MOVER_HALT_MEDIA_ERROR },
1975 END_ENUM_CONVERSION_TABLE
1980 ndmp_4to9_mover_get_state_reply (
1981 ndmp4_mover_get_state_reply *reply4,
1982 ndmp9_mover_get_state_reply *reply9)
1984 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
1985 CNVT_E_TO_9 (reply4, reply9, state, ndmp_49_mover_state);
1986 CNVT_E_TO_9 (reply4, reply9, pause_reason, ndmp_49_mover_pause_reason);
1987 CNVT_E_TO_9 (reply4, reply9, halt_reason, ndmp_49_mover_halt_reason);
1989 CNVT_TO_9 (reply4, reply9, record_size);
1990 CNVT_TO_9 (reply4, reply9, record_num);
1991 CNVT_TO_9 (reply4, reply9, bytes_moved);
1992 CNVT_TO_9 (reply4, reply9, seek_position);
1993 CNVT_TO_9 (reply4, reply9, bytes_left_to_read);
1994 CNVT_TO_9 (reply4, reply9, window_offset);
1995 CNVT_TO_9 (reply4, reply9, window_length);
1997 ndmp_4to9_addr (&reply4->data_connection_addr,
1998 &reply9->data_connection_addr);
2004 ndmp_9to4_mover_get_state_reply (
2005 ndmp9_mover_get_state_reply *reply9,
2006 ndmp4_mover_get_state_reply *reply4)
2008 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
2009 CNVT_E_FROM_9 (reply4, reply9, state, ndmp_49_mover_state);
2010 CNVT_E_FROM_9 (reply4, reply9, pause_reason,
2011 ndmp_49_mover_pause_reason);
2012 CNVT_E_FROM_9 (reply4, reply9, halt_reason,
2013 ndmp_49_mover_halt_reason);
2015 CNVT_FROM_9 (reply4, reply9, record_size);
2016 CNVT_FROM_9 (reply4, reply9, record_num);
2017 CNVT_FROM_9 (reply4, reply9, bytes_moved);
2018 CNVT_FROM_9 (reply4, reply9, seek_position);
2019 CNVT_FROM_9 (reply4, reply9, bytes_left_to_read);
2020 CNVT_FROM_9 (reply4, reply9, window_offset);
2021 CNVT_FROM_9 (reply4, reply9, window_length);
2023 ndmp_9to4_addr (&reply9->data_connection_addr,
2024 &reply4->data_connection_addr);
2035 ndmp_4to9_mover_listen_request (
2036 ndmp4_mover_listen_request *request4,
2037 ndmp9_mover_listen_request *request9)
2041 rc = CNVT_E_TO_9 (request4, request9, mode, ndmp_49_mover_mode);
2042 if (rc == NDMP_INVALID_GENERAL) {
2043 CNVT_TO_9 (request4, request9, mode);
2045 rc = CNVT_E_TO_9 (request4, request9, addr_type, ndmp_49_addr_type);
2046 if (rc == NDMP_INVALID_GENERAL) {
2047 CNVT_TO_9 (request4, request9, addr_type);
2054 ndmp_9to4_mover_listen_request (
2055 ndmp9_mover_listen_request *request9,
2056 ndmp4_mover_listen_request *request4)
2060 rc = CNVT_E_FROM_9 (request4, request9, mode, ndmp_49_mover_mode);
2061 if (rc == NDMP_INVALID_GENERAL) {
2062 CNVT_FROM_9 (request4, request9, mode);
2064 rc = CNVT_E_FROM_9 (request4, request9, addr_type, ndmp_49_addr_type);
2065 if (rc == NDMP_INVALID_GENERAL) {
2066 CNVT_FROM_9 (request4, request9, addr_type);
2073 ndmp_4to9_mover_listen_reply (
2074 ndmp4_mover_listen_reply *reply4,
2075 ndmp9_mover_listen_reply *reply9)
2079 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
2081 n_error += ndmp_4to9_addr (&reply4->connect_addr,
2082 &reply9->data_connection_addr);
2088 ndmp_9to4_mover_listen_reply (
2089 ndmp9_mover_listen_reply *reply9,
2090 ndmp4_mover_listen_reply *reply4)
2094 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
2096 n_error += ndmp_9to4_addr (&reply9->data_connection_addr,
2097 &reply4->connect_addr);
2103 * ndmp_mover_connect
2108 ndmp_4to9_mover_connect_request (
2109 ndmp4_mover_connect_request *request4,
2110 ndmp9_mover_connect_request *request9)
2114 rc = CNVT_E_TO_9 (request4, request9, mode, ndmp_49_mover_mode);
2115 if (rc == NDMP_INVALID_GENERAL) {
2116 CNVT_TO_9 (request4, request9, mode);
2118 return ndmp_4to9_addr (&request4->addr, &request9->addr);
2122 ndmp_9to4_mover_connect_request (
2123 ndmp9_mover_connect_request *request9,
2124 ndmp4_mover_connect_request *request4)
2128 rc = CNVT_E_FROM_9 (request4, request9, mode, ndmp_49_mover_mode);
2129 if (rc == NDMP_INVALID_GENERAL) {
2130 CNVT_FROM_9 (request4, request9, mode);
2132 return ndmp_9to4_addr (&request9->addr, &request4->addr);
2139 * ndmp_mover_set_record_size
2144 ndmp_4to9_mover_set_record_size_request (
2145 ndmp4_mover_set_record_size_request *request4,
2146 ndmp9_mover_set_record_size_request *request9)
2148 CNVT_TO_9x (request4, request9, len, record_size);
2153 ndmp_9to4_mover_set_record_size_request (
2154 ndmp9_mover_set_record_size_request *request9,
2155 ndmp4_mover_set_record_size_request *request4)
2157 CNVT_FROM_9x (request4, request9, len, record_size);
2163 * ndmp_mover_set_window
2168 ndmp_4to9_mover_set_window_request (
2169 ndmp4_mover_set_window_request *request4,
2170 ndmp9_mover_set_window_request *request9)
2172 CNVT_TO_9 (request4, request9, offset);
2173 CNVT_TO_9 (request4, request9, length);
2178 ndmp_9to4_mover_set_window_request (
2179 ndmp9_mover_set_window_request *request9,
2180 ndmp4_mover_set_window_request *request4)
2182 CNVT_FROM_9 (request4, request9, offset);
2183 CNVT_FROM_9 (request4, request9, length);
2189 * ndmp_mover_continue
2190 * no args request, just error reply
2195 * no args request, just error reply
2200 * no args request, just error reply
2209 ndmp_4to9_mover_read_request (
2210 ndmp4_mover_read_request *request4,
2211 ndmp9_mover_read_request *request9)
2213 CNVT_TO_9 (request4, request9, offset);
2214 CNVT_TO_9 (request4, request9, length);
2219 ndmp_9to4_mover_read_request (
2220 ndmp9_mover_read_request *request9,
2221 ndmp4_mover_read_request *request4)
2223 CNVT_FROM_9 (request4, request9, offset);
2224 CNVT_FROM_9 (request4, request9, length);
2230 * no args request, just error reply
2246 ****************************************************************
2256 name9->original_path = NDMOS_API_STRDUP(name4->original_path);
2257 strcpy (buf, name4->destination_path);
2258 if (name4->name && *name4->name) {
2260 strcat (buf, name4->name);
2262 name9->destination_path = NDMOS_API_STRDUP(buf);
2263 if (name4->fh_info != NDMP_INVALID_U_QUAD) {
2264 name9->fh_info.valid = NDMP9_VALIDITY_VALID;
2265 name9->fh_info.value = name4->fh_info;
2267 name9->fh_info.valid = NDMP9_VALIDITY_INVALID;
2268 name9->fh_info.value = NDMP_INVALID_U_QUAD;
2279 name4->original_path = NDMOS_API_STRDUP(name9->original_path);
2280 name4->destination_path = NDMOS_API_STRDUP(name9->destination_path);
2281 name4->name = NDMOS_API_STRDUP("");
2282 name4->other_name = NDMOS_API_STRDUP("");
2284 if (name9->fh_info.valid == NDMP9_VALIDITY_VALID) {
2285 name4->fh_info = name9->fh_info.value;
2287 name4->fh_info = NDMP_INVALID_U_QUAD;
2290 name4->node = NDMP_INVALID_U_QUAD;
2296 ndmp_4to9_name_vec (
2303 for (i = 0; i < n_name; i++)
2304 ndmp_4to9_name (&name4[i], &name9[i]);
2310 ndmp_9to4_name_vec (
2317 for (i = 0; i < n_name; i++)
2318 ndmp_9to4_name (&name9[i], &name4[i]);
2324 ndmp_4to9_name_vec_dup (
2326 ndmp9_name **name9_p,
2329 *name9_p = NDMOS_MACRO_NEWN (ndmp9_name, n_name);
2333 return ndmp_4to9_name_vec (name4, *name9_p, n_name);
2337 ndmp_9to4_name_vec_dup (
2339 ndmp4_name **name4_p,
2342 *name4_p = NDMOS_MACRO_NEWN (ndmp4_name, n_name);
2346 return ndmp_9to4_name_vec (name9, *name4_p, n_name);
2351 * ndmp_data_get_state_reply
2352 ****************************************************************
2355 struct enum_conversion ndmp_49_data_operation[] = {
2356 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2357 { NDMP4_DATA_OP_NOACTION, NDMP9_DATA_OP_NOACTION },
2358 { NDMP4_DATA_OP_BACKUP, NDMP9_DATA_OP_BACKUP },
2359 { NDMP4_DATA_OP_RECOVER, NDMP9_DATA_OP_RECOVER },
2360 { NDMP4_DATA_OP_RECOVER_FILEHIST, NDMP9_DATA_OP_RECOVER_FILEHIST },
2361 END_ENUM_CONVERSION_TABLE
2364 struct enum_conversion ndmp_49_data_state[] = {
2365 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2366 { NDMP4_DATA_STATE_IDLE, NDMP9_DATA_STATE_IDLE },
2367 { NDMP4_DATA_STATE_ACTIVE, NDMP9_DATA_STATE_ACTIVE },
2368 { NDMP4_DATA_STATE_HALTED, NDMP9_DATA_STATE_HALTED },
2369 { NDMP4_DATA_STATE_CONNECTED, NDMP9_DATA_STATE_CONNECTED },
2370 { NDMP4_DATA_STATE_LISTEN, NDMP9_DATA_STATE_LISTEN },
2372 END_ENUM_CONVERSION_TABLE
2375 struct enum_conversion ndmp_49_data_halt_reason[] = {
2376 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2377 { NDMP4_DATA_HALT_NA, NDMP9_DATA_HALT_NA },
2378 { NDMP4_DATA_HALT_SUCCESSFUL, NDMP9_DATA_HALT_SUCCESSFUL },
2379 { NDMP4_DATA_HALT_ABORTED, NDMP9_DATA_HALT_ABORTED },
2380 { NDMP4_DATA_HALT_INTERNAL_ERROR, NDMP9_DATA_HALT_INTERNAL_ERROR },
2381 { NDMP4_DATA_HALT_CONNECT_ERROR, NDMP9_DATA_HALT_CONNECT_ERROR },
2382 END_ENUM_CONVERSION_TABLE
2386 ndmp_4to9_data_get_state_reply (
2387 ndmp4_data_get_state_reply *reply4,
2388 ndmp9_data_get_state_reply *reply9)
2390 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
2391 CNVT_E_TO_9 (reply4, reply9, operation, ndmp_49_data_operation);
2392 CNVT_E_TO_9 (reply4, reply9, state, ndmp_49_data_state);
2393 CNVT_E_TO_9 (reply4, reply9, halt_reason, ndmp_49_data_halt_reason);
2395 CNVT_TO_9 (reply4, reply9, bytes_processed);
2397 CNVT_VUQ_TO_9 (reply4, reply9, est_bytes_remain);
2398 CNVT_VUL_TO_9 (reply4, reply9, est_time_remain);
2400 ndmp_4to9_addr (&reply4->data_connection_addr,
2401 &reply9->data_connection_addr);
2403 CNVT_TO_9 (reply4, reply9, read_offset);
2404 CNVT_TO_9 (reply4, reply9, read_length);
2410 ndmp_9to4_data_get_state_reply (
2411 ndmp9_data_get_state_reply *reply9,
2412 ndmp4_data_get_state_reply *reply4)
2414 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
2415 CNVT_E_FROM_9 (reply4, reply9, operation, ndmp_49_data_operation);
2416 CNVT_E_FROM_9 (reply4, reply9, state, ndmp_49_data_state);
2417 CNVT_E_FROM_9 (reply4, reply9, halt_reason, ndmp_49_data_halt_reason);
2419 CNVT_FROM_9 (reply4, reply9, bytes_processed);
2421 CNVT_VUQ_FROM_9 (reply4, reply9, est_bytes_remain);
2422 CNVT_VUL_FROM_9 (reply4, reply9, est_time_remain);
2424 ndmp_9to4_addr (&reply9->data_connection_addr,
2425 &reply4->data_connection_addr);
2427 CNVT_FROM_9 (reply4, reply9, read_offset);
2428 CNVT_FROM_9 (reply4, reply9, read_length);
2435 * ndmp_data_start_backup
2440 ndmp_4to9_data_start_backup_request (
2441 ndmp4_data_start_backup_request *request4,
2442 ndmp9_data_start_backup_request *request9)
2446 CNVT_STRDUP_TO_9x (request4, request9, butype_name, bu_type);
2448 ndmp_4to9_pval_vec_dup (request4->env.env_val,
2449 &request9->env.env_val,
2450 request4->env.env_len);
2452 request9->env.env_len = request4->env.env_len;
2454 request9->addr.addr_type = NDMP9_ADDR_AS_CONNECTED;
2460 ndmp_9to4_data_start_backup_request (
2461 ndmp9_data_start_backup_request *request9,
2462 ndmp4_data_start_backup_request *request4)
2466 CNVT_STRDUP_FROM_9x (request4, request9, butype_name, bu_type);
2468 ndmp_9to4_pval_vec_dup (request9->env.env_val,
2469 &request4->env.env_val,
2470 request9->env.env_len);
2472 request4->env.env_len = request9->env.env_len;
2479 * ndmp_data_start_recover
2480 * ndmp_data_start_recover_filehist
2485 ndmp_4to9_data_start_recover_request (
2486 ndmp4_data_start_recover_request *request4,
2487 ndmp9_data_start_recover_request *request9)
2491 CNVT_STRDUP_TO_9x (request4, request9, butype_name, bu_type);
2493 ndmp_4to9_pval_vec_dup (request4->env.env_val,
2494 &request9->env.env_val,
2495 request4->env.env_len);
2497 request9->env.env_len = request4->env.env_len;
2499 ndmp_4to9_name_vec_dup (request4->nlist.nlist_val,
2500 &request9->nlist.nlist_val,
2501 request4->nlist.nlist_len);
2503 request9->nlist.nlist_len = request4->nlist.nlist_len;
2505 request9->addr.addr_type = NDMP9_ADDR_AS_CONNECTED;
2511 ndmp_9to4_data_start_recover_request (
2512 ndmp9_data_start_recover_request *request9,
2513 ndmp4_data_start_recover_request *request4)
2517 CNVT_STRDUP_FROM_9x (request4, request9, butype_name, bu_type);
2519 ndmp_9to4_pval_vec_dup (request9->env.env_val,
2520 &request4->env.env_val,
2521 request9->env.env_len);
2523 request4->env.env_len = request9->env.env_len;
2525 ndmp_9to4_name_vec_dup (request9->nlist.nlist_val,
2526 &request4->nlist.nlist_val,
2527 request9->nlist.nlist_len);
2529 request4->nlist.nlist_len = request9->nlist.nlist_len;
2538 * no args request, just error reply
2547 ndmp_4to9_data_get_env_reply (
2548 ndmp4_data_get_env_reply *reply4,
2549 ndmp9_data_get_env_reply *reply9)
2551 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
2553 ndmp_4to9_pval_vec_dup (reply4->env.env_val,
2554 &reply9->env.env_val,
2555 reply4->env.env_len);
2557 reply9->env.env_len = reply4->env.env_len;
2563 ndmp_9to4_data_get_env_reply (
2564 ndmp9_data_get_env_reply *reply9,
2565 ndmp4_data_get_env_reply *reply4)
2567 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
2569 ndmp_9to4_pval_vec_dup (reply9->env.env_val,
2570 &reply4->env.env_val,
2571 reply9->env.env_len);
2572 reply4->env.env_len = reply9->env.env_len;
2580 * no args request, just error reply
2587 ndmp_4to9_data_listen_request (
2588 ndmp4_data_listen_request *request4,
2589 ndmp9_data_listen_request *request9)
2593 rc = CNVT_E_TO_9 (request4, request9, addr_type, ndmp_49_addr_type);
2594 if (rc == NDMP_INVALID_GENERAL) {
2595 CNVT_TO_9 (request4, request9, addr_type);
2602 ndmp_9to4_data_listen_request (
2603 ndmp9_data_listen_request *request9,
2604 ndmp4_data_listen_request *request4)
2608 rc = CNVT_E_FROM_9 (request4, request9, addr_type, ndmp_49_addr_type);
2609 if (rc == NDMP_INVALID_GENERAL) {
2610 CNVT_FROM_9 (request4, request9, addr_type);
2617 ndmp_4to9_data_listen_reply (
2618 ndmp4_data_listen_reply *reply4,
2619 ndmp9_data_listen_reply *reply9)
2623 CNVT_E_TO_9 (reply4, reply9, error, ndmp_49_error);
2625 n_error += ndmp_4to9_addr (&reply4->connect_addr,
2626 &reply9->data_connection_addr);
2632 ndmp_9to4_data_listen_reply (
2633 ndmp9_data_listen_reply *reply9,
2634 ndmp4_data_listen_reply *reply4)
2638 CNVT_E_FROM_9 (reply4, reply9, error, ndmp_49_error);
2640 n_error += ndmp_9to4_addr (&reply9->data_connection_addr,
2641 &reply4->connect_addr);
2654 ndmp_4to9_data_connect_request (
2655 ndmp4_data_connect_request *request4,
2656 ndmp9_data_connect_request *request9)
2658 return ndmp_4to9_addr (&request4->addr, &request9->addr);
2662 ndmp_9to4_data_connect_request (
2663 ndmp9_data_connect_request *request9,
2664 ndmp4_data_connect_request *request4)
2666 return ndmp_9to4_addr (&request9->addr, &request4->addr);
2674 ****************************************************************
2678 * ndmp_notify_data_halted
2683 ndmp_4to9_notify_data_halted_request (
2684 ndmp4_notify_data_halted_post *request4,
2685 ndmp9_notify_data_halted_request *request9)
2690 rc = CNVT_E_TO_9 (request4, request9, reason,
2691 ndmp_49_data_halt_reason);
2692 if (rc == NDMP_INVALID_GENERAL) {
2693 CNVT_TO_9 (request4, request9, reason);
2701 ndmp_9to4_notify_data_halted_request (
2702 ndmp9_notify_data_halted_request *request9,
2703 ndmp4_notify_data_halted_post *request4)
2708 rc = CNVT_E_FROM_9 (request4, request9, reason,
2709 ndmp_49_data_halt_reason);
2710 if (rc == NDMP_INVALID_GENERAL) {
2711 CNVT_FROM_9 (request4, request9, reason);
2720 * ndmp_notify_connected
2724 /* NDMP4_NOTIFY_CONNECTED */
2725 struct enum_conversion ndmp_49_connect_reason[] = {
2726 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2727 { NDMP4_CONNECTED, NDMP9_CONNECTED },
2728 { NDMP4_SHUTDOWN, NDMP9_SHUTDOWN },
2729 { NDMP4_REFUSED, NDMP9_REFUSED },
2730 END_ENUM_CONVERSION_TABLE
2734 ndmp_4to9_notify_connection_status_request (
2735 ndmp4_notify_connection_status_post *request4,
2736 ndmp9_notify_connected_request *request9)
2741 rc = CNVT_E_TO_9 (request4, request9, reason, ndmp_49_connect_reason);
2742 if (rc == NDMP_INVALID_GENERAL) {
2743 CNVT_TO_9 (request4, request9, reason);
2747 CNVT_TO_9 (request4, request9, protocol_version);
2749 CNVT_STRDUP_TO_9 (request4, request9, text_reason);
2755 ndmp_9to4_notify_connection_status_request (
2756 ndmp9_notify_connected_request *request9,
2757 ndmp4_notify_connection_status_post *request4)
2762 rc = CNVT_E_FROM_9(request4, request9, reason, ndmp_49_connect_reason);
2763 if (rc == NDMP_INVALID_GENERAL) {
2764 CNVT_FROM_9 (request4, request9, reason);
2768 CNVT_FROM_9 (request4, request9, protocol_version);
2770 CNVT_STRDUP_FROM_9 (request4, request9, text_reason);
2777 * ndmp_notify_mover_halted
2782 ndmp_4to9_notify_mover_halted_request (
2783 ndmp4_notify_mover_halted_post *request4,
2784 ndmp9_notify_mover_halted_request *request9)
2789 rc = CNVT_E_TO_9 (request4, request9, reason,
2790 ndmp_49_mover_halt_reason);
2791 if (rc == NDMP_INVALID_GENERAL) {
2792 CNVT_TO_9 (request4, request9, reason);
2800 ndmp_9to4_notify_mover_halted_request (
2801 ndmp9_notify_mover_halted_request *request9,
2802 ndmp4_notify_mover_halted_post *request4)
2807 rc = CNVT_E_FROM_9 (request4, request9, reason,
2808 ndmp_49_mover_halt_reason);
2809 if (rc == NDMP_INVALID_GENERAL) {
2810 CNVT_FROM_9 (request4, request9, reason);
2819 * ndmp_notify_mover_paused
2824 ndmp_4to9_notify_mover_paused_request (
2825 ndmp4_notify_mover_paused_post *request4,
2826 ndmp9_notify_mover_paused_request *request9)
2831 rc = CNVT_E_TO_9 (request4, request9, reason,
2832 ndmp_49_mover_pause_reason);
2833 if (rc == NDMP_INVALID_GENERAL) {
2834 CNVT_TO_9 (request4, request9, reason);
2838 CNVT_TO_9 (request4, request9, seek_position);
2844 ndmp_9to4_notify_mover_paused_request (
2845 ndmp9_notify_mover_paused_request *request9,
2846 ndmp4_notify_mover_paused_post *request4)
2851 rc = CNVT_E_FROM_9 (request4, request9, reason,
2852 ndmp_49_mover_pause_reason);
2853 if (rc == NDMP_INVALID_GENERAL) {
2854 CNVT_FROM_9 (request4, request9, reason);
2858 CNVT_FROM_9 (request4, request9, seek_position);
2865 * ndmp_notify_data_read
2870 ndmp_4to9_notify_data_read_request (
2871 ndmp4_notify_data_read_post *request4,
2872 ndmp9_notify_data_read_request *request9)
2874 CNVT_TO_9 (request4, request9, offset);
2875 CNVT_TO_9 (request4, request9, length);
2880 ndmp_9to4_notify_data_read_request (
2881 ndmp9_notify_data_read_request *request9,
2882 ndmp4_notify_data_read_post *request4)
2884 CNVT_FROM_9 (request4, request9, offset);
2885 CNVT_FROM_9 (request4, request9, length);
2891 * LOGGING INTERFACES
2892 ****************************************************************
2895 struct enum_conversion ndmp_49_recovery_status[] = {
2896 { NDMP4_RECOVERY_FAILED_UNDEFINED_ERROR,
2897 NDMP9_RECOVERY_FAILED_UNDEFINED_ERROR }, /* default */
2898 { NDMP4_RECOVERY_SUCCESSFUL,
2899 NDMP9_RECOVERY_SUCCESSFUL },
2900 { NDMP4_RECOVERY_FAILED_PERMISSION,
2901 NDMP9_RECOVERY_FAILED_PERMISSION },
2902 { NDMP4_RECOVERY_FAILED_NOT_FOUND,
2903 NDMP9_RECOVERY_FAILED_NOT_FOUND },
2904 { NDMP4_RECOVERY_FAILED_NO_DIRECTORY,
2905 NDMP9_RECOVERY_FAILED_NO_DIRECTORY },
2906 { NDMP4_RECOVERY_FAILED_OUT_OF_MEMORY,
2907 NDMP9_RECOVERY_FAILED_OUT_OF_MEMORY },
2908 { NDMP4_RECOVERY_FAILED_IO_ERROR,
2909 NDMP9_RECOVERY_FAILED_IO_ERROR },
2910 { NDMP4_RECOVERY_FAILED_UNDEFINED_ERROR,
2911 NDMP9_RECOVERY_FAILED_UNDEFINED_ERROR },
2912 END_ENUM_CONVERSION_TABLE
2917 ndmp_4to9_log_file_request (
2918 ndmp4_log_file_post *request4,
2919 ndmp9_log_file_request *request9)
2921 CNVT_E_TO_9 (request4, request9, recovery_status,
2922 ndmp_49_recovery_status);
2923 CNVT_STRDUP_TO_9 (request4, request9, name);
2928 ndmp_9to4_log_file_request (
2929 ndmp9_log_file_request *request9,
2930 ndmp4_log_file_post *request4)
2932 CNVT_E_FROM_9 (request4, request9, recovery_status,
2933 ndmp_49_recovery_status);
2934 CNVT_STRDUP_FROM_9 (request4, request9, name);
2943 struct enum_conversion ndmp_49_log_type[] = {
2944 { NDMP4_LOG_NORMAL, NDMP_INVALID_GENERAL, }, /* default */
2945 { NDMP4_LOG_NORMAL, NDMP9_LOG_NORMAL },
2946 { NDMP4_LOG_DEBUG, NDMP9_LOG_DEBUG },
2947 { NDMP4_LOG_ERROR, NDMP9_LOG_ERROR },
2948 { NDMP4_LOG_WARNING, NDMP9_LOG_WARNING },
2949 END_ENUM_CONVERSION_TABLE
2955 ndmp_4to9_log_message_request (
2956 ndmp4_log_message_post *request4,
2957 ndmp9_log_message_request *request9)
2959 CNVT_E_TO_9 (request4, request9, log_type, ndmp_49_log_type);
2960 CNVT_TO_9 (request4, request9, message_id);
2961 CNVT_STRDUP_TO_9 (request4, request9, entry);
2963 switch (request4->associated_message_valid) {
2964 case NDMP4_HAS_ASSOCIATED_MESSAGE:
2965 request9->associated_message_sequence.valid =
2966 NDMP9_VALIDITY_VALID;
2970 case NDMP4_NO_ASSOCIATED_MESSAGE:
2971 request9->associated_message_sequence.valid =
2972 NDMP9_VALIDITY_INVALID;
2976 request9->associated_message_sequence.value =
2977 request4->associated_message_sequence;
2983 ndmp_9to4_log_message_request (
2984 ndmp9_log_message_request *request9,
2985 ndmp4_log_message_post *request4)
2987 CNVT_E_FROM_9 (request4, request9, log_type, ndmp_49_log_type);
2988 CNVT_FROM_9 (request4, request9, message_id);
2989 CNVT_STRDUP_TO_9 (request4, request9, entry);
2991 switch (request9->associated_message_sequence.valid) {
2992 case NDMP9_VALIDITY_VALID:
2993 request4->associated_message_valid =
2994 NDMP4_HAS_ASSOCIATED_MESSAGE;
2998 request4->associated_message_valid =
2999 NDMP4_NO_ASSOCIATED_MESSAGE;
3003 request4->associated_message_sequence =
3004 request9->associated_message_sequence.value;
3013 * FILE HISTORY INTERFACES
3014 ****************************************************************
3019 * ndmp[_unix]_file_stat
3022 struct enum_conversion ndmp_49_file_type[] = {
3023 { NDMP4_FILE_OTHER, NDMP_INVALID_GENERAL, }, /* default */
3024 { NDMP4_FILE_DIR, NDMP9_FILE_DIR },
3025 { NDMP4_FILE_FIFO, NDMP9_FILE_FIFO },
3026 { NDMP4_FILE_CSPEC, NDMP9_FILE_CSPEC },
3027 { NDMP4_FILE_BSPEC, NDMP9_FILE_BSPEC },
3028 { NDMP4_FILE_REG, NDMP9_FILE_REG },
3029 { NDMP4_FILE_SLINK, NDMP9_FILE_SLINK },
3030 { NDMP4_FILE_SOCK, NDMP9_FILE_SOCK },
3031 { NDMP4_FILE_REGISTRY, NDMP9_FILE_REGISTRY },
3032 { NDMP4_FILE_OTHER, NDMP9_FILE_OTHER },
3033 END_ENUM_CONVERSION_TABLE
3037 ndmp_4to9_file_stat (
3038 ndmp4_file_stat *fstat4,
3039 ndmp9_file_stat *fstat9,
3041 ndmp9_u_quad fh_info)
3043 CNVT_E_TO_9 (fstat4, fstat9, ftype, ndmp_49_file_type);
3045 CNVT_VUL_TO_9 (fstat4, fstat9, mtime);
3046 CNVT_VUL_TO_9 (fstat4, fstat9, atime);
3047 CNVT_VUL_TO_9 (fstat4, fstat9, ctime);
3048 CNVT_VUL_TO_9x (fstat4, fstat9, owner, uid);
3049 CNVT_VUL_TO_9x (fstat4, fstat9, group, gid);
3051 CNVT_VUL_TO_9x (fstat4, fstat9, fattr, mode);
3053 CNVT_VUQ_TO_9 (fstat4, fstat9, size);
3055 CNVT_VUL_TO_9 (fstat4, fstat9, links);
3057 convert_valid_u_quad_to_9 (&node, &fstat9->node);
3058 convert_valid_u_quad_to_9 (&fh_info, &fstat9->fh_info);
3060 if (fstat4->unsupported & NDMP4_FILE_STAT_ATIME_UNS)
3061 CNVT_IUL_TO_9 (fstat9, atime);
3063 if (fstat4->unsupported & NDMP4_FILE_STAT_CTIME_UNS)
3064 CNVT_IUL_TO_9 (fstat9, ctime);
3066 if (fstat4->unsupported & NDMP4_FILE_STAT_GROUP_UNS)
3067 CNVT_IUL_TO_9 (fstat9, gid);
3073 ndmp_9to4_file_stat (
3074 ndmp9_file_stat *fstat9,
3075 ndmp4_file_stat *fstat4)
3077 CNVT_E_FROM_9 (fstat4, fstat9, ftype, ndmp_49_file_type);
3079 fstat4->fs_type = NDMP4_FS_UNIX;
3081 CNVT_VUL_FROM_9 (fstat4, fstat9, mtime);
3082 CNVT_VUL_FROM_9 (fstat4, fstat9, atime);
3083 CNVT_VUL_FROM_9 (fstat4, fstat9, ctime);
3084 CNVT_VUL_FROM_9x (fstat4, fstat9, owner, uid);
3085 CNVT_VUL_FROM_9x (fstat4, fstat9, group, gid);
3087 CNVT_VUL_FROM_9x (fstat4, fstat9, fattr, mode);
3089 CNVT_VUQ_FROM_9 (fstat4, fstat9, size);
3091 CNVT_VUL_FROM_9 (fstat4, fstat9, links);
3093 fstat4->unsupported = 0;
3095 if (!fstat9->atime.valid)
3096 fstat4->unsupported |= NDMP4_FILE_STAT_ATIME_UNS;
3098 if (!fstat9->ctime.valid)
3099 fstat4->unsupported |= NDMP4_FILE_STAT_CTIME_UNS;
3101 if (!fstat9->gid.valid)
3102 fstat4->unsupported |= NDMP4_FILE_STAT_GROUP_UNS;
3104 /* fh_info ignored */
3112 * ndmp_fh_add_file_request
3116 ndmp_4to9_fh_add_file_request (
3117 ndmp4_fh_add_file_post *request4,
3118 ndmp9_fh_add_file_request *request9)
3120 int n_ent = request4->files.files_len;
3125 table = NDMOS_MACRO_NEWN(ndmp9_file, n_ent);
3129 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3131 for (i = 0; i < n_ent; i++) {
3132 ndmp4_file * ent4 = &request4->files.files_val[i];
3133 ndmp4_file_name * file_name;
3134 ndmp4_file_stat * file_stat = 0;
3135 ndmp4_file_stat _file_stat;
3137 ndmp9_file * ent9 = &table[i];
3139 filename = "no-unix-name";
3140 for (j = 0; j < ent4->names.names_len; j++) {
3141 file_name = &ent4->names.names_val[j];
3142 if (file_name->fs_type == NDMP4_FS_UNIX) {
3144 file_name->ndmp4_file_name_u.unix_name;
3148 for (j = 0; j < ent4->stats.stats_len; j++) {
3149 file_stat = &ent4->stats.stats_val[j];
3150 if (file_stat->fs_type == NDMP4_FS_UNIX) {
3154 if (j >= ent4->stats.stats_len) {
3155 file_stat = &_file_stat;
3156 NDMOS_MACRO_ZEROFILL (file_stat);
3159 ent9->unix_path = NDMOS_API_STRDUP(filename);
3160 ndmp_4to9_file_stat (file_stat, &ent9->fstat,
3161 ent4->node, ent4->fh_info);
3164 request9->files.files_len = n_ent;
3165 request9->files.files_val = table;
3171 ndmp_9to4_fh_add_file_request (
3172 ndmp9_fh_add_file_request *request9,
3173 ndmp4_fh_add_file_post *request4)
3175 int n_ent = request9->files.files_len;
3179 table = NDMOS_MACRO_NEWN(ndmp4_file, n_ent);
3183 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3185 for (i = 0; i < n_ent; i++) {
3186 ndmp9_file * ent9 = &request9->files.files_val[i];
3187 ndmp4_file * ent4 = &table[i];
3189 ent4->names.names_val = NDMOS_MACRO_NEW(ndmp4_file_name);
3190 ent4->names.names_len = 1;
3191 ent4->stats.stats_val = NDMOS_MACRO_NEW(ndmp4_file_stat);
3192 ent4->stats.stats_len = 1;
3194 ent4->names.names_val[0].fs_type = NDMP4_FS_UNIX;
3195 ent4->names.names_val[0].ndmp4_file_name_u.unix_name =
3196 NDMOS_API_STRDUP(ent9->unix_path);
3198 ndmp_9to4_file_stat (&ent9->fstat,
3199 &ent4->stats.stats_val[0]);
3200 ent4->node = ent9->fstat.node.value;
3201 ent4->fh_info = ent9->fstat.fh_info.value;
3204 request4->files.files_len = n_ent;
3205 request4->files.files_val = table;
3212 * ndmp_fh_add_unix_dir
3216 ndmp_4to9_fh_add_dir_request (
3217 ndmp4_fh_add_dir_post *request4,
3218 ndmp9_fh_add_dir_request *request9)
3220 int n_ent = request4->dirs.dirs_len;
3225 table = NDMOS_MACRO_NEWN(ndmp9_dir, n_ent);
3229 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3231 for (i = 0; i < n_ent; i++) {
3232 ndmp4_dir * ent4 = &request4->dirs.dirs_val[i];
3233 ndmp4_file_name * file_name;
3235 ndmp9_dir * ent9 = &table[i];
3237 filename = "no-unix-name";
3238 for (j = 0; j < ent4->names.names_len; j++) {
3239 file_name = &ent4->names.names_val[j];
3240 if (file_name->fs_type == NDMP4_FS_UNIX) {
3242 file_name->ndmp4_file_name_u.unix_name;
3247 ent9->unix_name = NDMOS_API_STRDUP(filename);
3248 ent9->node = ent4->node;
3249 ent9->parent = ent4->parent;
3252 request9->dirs.dirs_len = n_ent;
3253 request9->dirs.dirs_val = table;
3259 ndmp_4to9_fh_add_dir_free_request (ndmp9_fh_add_dir_request *request9)
3264 if(request9->dirs.dirs_val) {
3265 int n_ent = request9->dirs.dirs_len;
3267 for (i = 0; i < n_ent; i++) {
3268 ndmp9_dir *ent9 = &request9->dirs.dirs_val[i];
3269 if (ent9->unix_name)
3270 NDMOS_API_FREE(ent9->unix_name);
3271 ent9->unix_name = 0;
3274 NDMOS_API_FREE(request9->dirs.dirs_val);
3276 request9->dirs.dirs_val = 0;
3282 ndmp_9to4_fh_add_dir_request (
3283 ndmp9_fh_add_dir_request *request9,
3284 ndmp4_fh_add_dir_post *request4)
3286 int n_ent = request9->dirs.dirs_len;
3290 table = NDMOS_MACRO_NEWN(ndmp4_dir, n_ent);
3294 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3296 for (i = 0; i < n_ent; i++) {
3297 ndmp9_dir * ent9 = &request9->dirs.dirs_val[i];
3298 ndmp4_dir * ent4 = &table[i];
3300 ent4->names.names_val = NDMOS_MACRO_NEW(ndmp4_file_name);
3301 ent4->names.names_len = 1;
3303 ent4->names.names_val[0].fs_type = NDMP4_FS_UNIX;
3304 ent4->names.names_val[0].ndmp4_file_name_u.unix_name =
3305 NDMOS_API_STRDUP(ent9->unix_name);
3307 ent4->node = ent9->node;
3308 ent4->parent = ent9->parent;
3311 request4->dirs.dirs_len = n_ent;
3312 request4->dirs.dirs_val = table;
3318 ndmp_9to4_fh_add_dir_free_request (ndmp4_fh_add_dir_post *request4)
3323 if(request4->dirs.dirs_val) {
3324 int n_ent = request4->dirs.dirs_len;
3326 for (i = 0; i < n_ent; i++) {
3327 ndmp4_dir *ent4 = &request4->dirs.dirs_val[i];
3328 if (ent4->names.names_val) {
3329 if (ent4->names.names_val[0].ndmp4_file_name_u.unix_name)
3330 NDMOS_API_FREE(ent4->names.names_val[0].ndmp4_file_name_u.unix_name);
3331 ent4->names.names_val[0].ndmp4_file_name_u.unix_name = 0;
3333 NDMOS_API_FREE(ent4->names.names_val);
3335 ent4->names.names_val = 0;
3338 NDMOS_API_FREE(request4->dirs.dirs_val);
3340 request4->dirs.dirs_val = 0;
3347 * ndmp_fh_add_node_request
3351 ndmp_4to9_fh_add_node_request (
3352 ndmp4_fh_add_node_post *request4,
3353 ndmp9_fh_add_node_request *request9)
3355 int n_ent = request4->nodes.nodes_len;
3360 table = NDMOS_MACRO_NEWN(ndmp9_node, n_ent);
3364 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3366 for (i = 0; i < n_ent; i++) {
3367 ndmp4_node * ent4 = &request4->nodes.nodes_val[i];
3368 ndmp4_file_stat * file_stat = 0;
3369 ndmp4_file_stat _file_stat;
3370 ndmp9_node * ent9 = &table[i];
3372 for (j = 0; j < ent4->stats.stats_len; j++) {
3373 file_stat = &ent4->stats.stats_val[j];
3374 if (file_stat->fs_type == NDMP4_FS_UNIX) {
3378 if (j >= ent4->stats.stats_len) {
3379 file_stat = &_file_stat;
3380 NDMOS_MACRO_ZEROFILL (file_stat);
3383 ndmp_4to9_file_stat (file_stat, &ent9->fstat,
3384 ent4->node, ent4->fh_info);
3387 request9->nodes.nodes_len = n_ent;
3388 request9->nodes.nodes_val = table;
3394 ndmp_4to9_fh_add_node_free_request (ndmp9_fh_add_node_request *request9)
3397 if(request9->nodes.nodes_val) {
3398 NDMOS_API_FREE(request9->nodes.nodes_val);
3400 request9->nodes.nodes_val = 0;
3406 ndmp_9to4_fh_add_node_request (
3407 ndmp9_fh_add_node_request *request9,
3408 ndmp4_fh_add_node_post *request4)
3410 int n_ent = request9->nodes.nodes_len;
3414 table = NDMOS_MACRO_NEWN(ndmp4_node, n_ent);
3418 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3420 for (i = 0; i < n_ent; i++) {
3421 ndmp9_node * ent9 = &request9->nodes.nodes_val[i];
3422 ndmp4_node * ent4 = &table[i];
3424 ent4->stats.stats_val = NDMOS_MACRO_NEW(ndmp4_file_stat);
3425 ent4->stats.stats_len = 1;
3427 ndmp_9to4_file_stat (&ent9->fstat,
3428 &ent4->stats.stats_val[0]);
3429 ent4->node = ent9->fstat.node.value;
3430 ent4->fh_info = ent9->fstat.fh_info.value;
3433 request4->nodes.nodes_len = n_ent;
3434 request4->nodes.nodes_val = table;
3440 ndmp_9to4_fh_add_node_free_request (ndmp4_fh_add_node_post *request4)
3443 if(request4->nodes.nodes_val) {
3444 NDMOS_API_FREE(request4->nodes.nodes_val);
3446 request4->nodes.nodes_val = 0;
3456 * request/reply translation
3459 #define NO_ARG_REQUEST \
3460 ndmp_xtox_no_arguments, ndmp_xtox_no_arguments
3462 #define JUST_ERROR_REPLY \
3463 ndmp_4to9_error, ndmp_9to4_error
3465 #define NO_ARG_REQUEST_JUST_ERROR_REPLY \
3466 NO_ARG_REQUEST, JUST_ERROR_REPLY
3468 #define NO_MEMUSED_REQUEST \
3469 ndmp_xtox_no_memused, ndmp_xtox_no_memused
3471 #define NO_MEMUSED_REPLY \
3472 ndmp_xtox_no_memused, ndmp_xtox_no_memused
3474 #define NO_MEMUSED \
3475 ndmp_xtox_no_memused, ndmp_xtox_no_memused, ndmp_xtox_no_memused, ndmp_xtox_no_memused
3478 struct reqrep_xlate ndmp4_reqrep_xlate_table[] = {
3480 NDMP4_CONNECT_OPEN, NDMP9_CONNECT_OPEN,
3481 ndmp_4to9_connect_open_request,
3482 ndmp_9to4_connect_open_request,
3484 NO_MEMUSED /* no memory free routines written yet */
3487 NDMP4_CONNECT_CLIENT_AUTH, NDMP9_CONNECT_CLIENT_AUTH,
3488 ndmp_4to9_connect_client_auth_request,
3489 ndmp_9to4_connect_client_auth_request,
3491 NO_MEMUSED /* no memory free routines written yet */
3494 NDMP4_CONNECT_CLOSE, NDMP9_CONNECT_CLOSE,
3495 NO_ARG_REQUEST_JUST_ERROR_REPLY, /* actually no reply */
3496 NO_MEMUSED /* no memory free routines written yet */
3500 NDMP4_CONNECT_SERVER_AUTH, NDMP9_CONNECT_SERVER_AUTH,
3501 ndmp_4to9_connect_server_auth_request,
3502 ndmp_9to4_connect_server_auth_request,
3503 ndmp_4to9_connect_server_auth_reply,
3504 ndmp_9to4_connect_server_auth_reply,
3505 NO_MEMUSED /* no memory free routines written yet */
3509 NDMP4_CONFIG_GET_HOST_INFO, NDMP9_CONFIG_GET_HOST_INFO,
3511 ndmp_4to9_config_get_host_info_reply,
3512 ndmp_9to4_config_get_host_info_reply,
3513 NO_MEMUSED /* no memory free routines written yet */
3516 NDMP4_CONFIG_GET_CONNECTION_TYPE, NDMP9_CONFIG_GET_CONNECTION_TYPE,
3518 ndmp_4to9_config_get_connection_type_reply,
3519 ndmp_9to4_config_get_connection_type_reply,
3520 NO_MEMUSED /* no memory free routines written yet */
3523 NDMP4_CONFIG_GET_AUTH_ATTR, NDMP9_CONFIG_GET_AUTH_ATTR,
3524 ndmp_4to9_config_get_auth_attr_request,
3525 ndmp_9to4_config_get_auth_attr_request,
3526 ndmp_4to9_config_get_auth_attr_reply,
3527 ndmp_9to4_config_get_auth_attr_reply,
3528 NO_MEMUSED /* no memory free routines written yet */
3531 NDMP4_CONFIG_GET_SERVER_INFO, NDMP9_CONFIG_GET_SERVER_INFO,
3533 ndmp_4to9_config_get_server_info_reply,
3534 ndmp_9to4_config_get_server_info_reply,
3535 NO_MEMUSED /* no memory free routines written yet */
3538 NDMP4_CONFIG_GET_BUTYPE_INFO, NDMP9_CONFIG_GET_BUTYPE_INFO,
3540 ndmp_4to9_config_get_butype_info_reply,
3541 ndmp_9to4_config_get_butype_info_reply,
3542 NO_MEMUSED /* no memory free routines written yet */
3545 NDMP4_CONFIG_GET_FS_INFO, NDMP9_CONFIG_GET_FS_INFO,
3547 ndmp_4to9_config_get_fs_info_reply,
3548 ndmp_9to4_config_get_fs_info_reply,
3549 NO_MEMUSED /* no memory free routines written yet */
3552 NDMP4_CONFIG_GET_TAPE_INFO, NDMP9_CONFIG_GET_TAPE_INFO,
3554 ndmp_4to9_config_get_tape_info_reply,
3555 ndmp_9to4_config_get_tape_info_reply,
3556 NO_MEMUSED /* no memory free routines written yet */
3559 NDMP4_CONFIG_GET_SCSI_INFO, NDMP9_CONFIG_GET_SCSI_INFO,
3561 ndmp_4to9_config_get_scsi_info_reply,
3562 ndmp_9to4_config_get_scsi_info_reply,
3563 NO_MEMUSED /* no memory free routines written yet */
3567 NDMP4_SCSI_OPEN, NDMP9_SCSI_OPEN,
3568 ndmp_4to9_scsi_open_request,
3569 ndmp_9to4_scsi_open_request,
3571 NO_MEMUSED /* no memory free routines written yet */
3574 NDMP4_SCSI_CLOSE, NDMP9_SCSI_CLOSE,
3575 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3576 NO_MEMUSED /* no memory free routines written yet */
3579 NDMP4_SCSI_GET_STATE, NDMP9_SCSI_GET_STATE,
3581 ndmp_4to9_scsi_get_state_reply,
3582 ndmp_9to4_scsi_get_state_reply,
3583 NO_MEMUSED /* no memory free routines written yet */
3586 NDMP4_SCSI_RESET_DEVICE, NDMP9_SCSI_RESET_DEVICE,
3587 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3588 NO_MEMUSED /* no memory free routines written yet */
3591 NDMP4_SCSI_EXECUTE_CDB, NDMP9_SCSI_EXECUTE_CDB,
3592 ndmp_4to9_execute_cdb_request,
3593 ndmp_9to4_execute_cdb_request,
3594 ndmp_4to9_execute_cdb_reply,
3595 ndmp_9to4_execute_cdb_reply,
3596 NO_MEMUSED /* no memory free routines written yet */
3601 NDMP4_TAPE_OPEN, NDMP9_TAPE_OPEN,
3602 ndmp_4to9_tape_open_request,
3603 ndmp_9to4_tape_open_request,
3605 NO_MEMUSED /* no memory free routines written yet */
3608 NDMP4_TAPE_CLOSE, NDMP9_TAPE_CLOSE,
3609 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3610 NO_MEMUSED /* no memory free routines written yet */
3613 NDMP4_TAPE_GET_STATE, NDMP9_TAPE_GET_STATE,
3615 ndmp_4to9_tape_get_state_reply,
3616 ndmp_9to4_tape_get_state_reply,
3617 NO_MEMUSED /* no memory free routines written yet */
3620 NDMP4_TAPE_MTIO, NDMP9_TAPE_MTIO,
3621 ndmp_4to9_tape_mtio_request,
3622 ndmp_9to4_tape_mtio_request,
3623 ndmp_4to9_tape_mtio_reply,
3624 ndmp_9to4_tape_mtio_reply,
3625 NO_MEMUSED /* no memory free routines written yet */
3628 NDMP4_TAPE_WRITE, NDMP9_TAPE_WRITE,
3629 ndmp_4to9_tape_write_request,
3630 ndmp_9to4_tape_write_request,
3631 ndmp_4to9_tape_write_reply,
3632 ndmp_9to4_tape_write_reply,
3633 NO_MEMUSED /* no memory free routines written yet */
3636 NDMP4_TAPE_READ, NDMP9_TAPE_READ,
3637 ndmp_4to9_tape_read_request,
3638 ndmp_9to4_tape_read_request,
3639 ndmp_4to9_tape_read_reply,
3640 ndmp_9to4_tape_read_reply,
3641 NO_MEMUSED /* no memory free routines written yet */
3644 NDMP4_TAPE_EXECUTE_CDB, NDMP9_TAPE_EXECUTE_CDB,
3645 ndmp_4to9_execute_cdb_request,
3646 ndmp_9to4_execute_cdb_request,
3647 ndmp_4to9_execute_cdb_reply,
3648 ndmp_9to4_execute_cdb_reply,
3649 NO_MEMUSED /* no memory free routines written yet */
3653 NDMP4_DATA_GET_STATE, NDMP9_DATA_GET_STATE,
3655 ndmp_4to9_data_get_state_reply,
3656 ndmp_9to4_data_get_state_reply,
3657 NO_MEMUSED /* no memory free routines written yet */
3660 NDMP4_DATA_START_BACKUP, NDMP9_DATA_START_BACKUP,
3661 ndmp_4to9_data_start_backup_request,
3662 ndmp_9to4_data_start_backup_request,
3664 NO_MEMUSED /* no memory free routines written yet */
3667 NDMP4_DATA_START_RECOVER, NDMP9_DATA_START_RECOVER,
3668 ndmp_4to9_data_start_recover_request,
3669 ndmp_9to4_data_start_recover_request,
3671 NO_MEMUSED /* no memory free routines written yet */
3674 NDMP4_DATA_ABORT, NDMP9_DATA_ABORT,
3675 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3676 NO_MEMUSED /* no memory free routines written yet */
3679 NDMP4_DATA_GET_ENV, NDMP9_DATA_GET_ENV,
3681 ndmp_4to9_data_get_env_reply,
3682 ndmp_9to4_data_get_env_reply,
3683 NO_MEMUSED /* no memory free routines written yet */
3686 NDMP4_DATA_STOP, NDMP9_DATA_STOP,
3687 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3688 NO_MEMUSED /* no memory free routines written yet */
3691 NDMP4_DATA_LISTEN, NDMP9_DATA_LISTEN,
3692 ndmp_4to9_data_listen_request,
3693 ndmp_9to4_data_listen_request,
3694 ndmp_4to9_data_listen_reply,
3695 ndmp_9to4_data_listen_reply,
3696 NO_MEMUSED /* no memory free routines written yet */
3699 NDMP4_DATA_CONNECT, NDMP9_DATA_CONNECT,
3700 ndmp_4to9_data_connect_request,
3701 ndmp_9to4_data_connect_request,
3703 NO_MEMUSED /* no memory free routines written yet */
3706 NDMP4_DATA_START_RECOVER_FILEHIST, NDMP9_DATA_START_RECOVER_FILEHIST,
3707 ndmp_4to9_data_start_recover_request,
3708 ndmp_9to4_data_start_recover_request,
3710 NO_MEMUSED /* no memory free routines written yet */
3714 NDMP4_NOTIFY_DATA_HALTED, NDMP9_NOTIFY_DATA_HALTED,
3715 ndmp_4to9_notify_data_halted_request,
3716 ndmp_9to4_notify_data_halted_request,
3717 JUST_ERROR_REPLY, /* no reply actually */
3718 NO_MEMUSED /* no memory free routines written yet */
3721 NDMP4_NOTIFY_CONNECTION_STATUS, NDMP9_NOTIFY_CONNECTED,
3722 ndmp_4to9_notify_connection_status_request,
3723 ndmp_9to4_notify_connection_status_request,
3724 JUST_ERROR_REPLY, /* no reply actually */
3725 NO_MEMUSED /* no memory free routines written yet */
3728 NDMP4_NOTIFY_MOVER_HALTED, NDMP9_NOTIFY_MOVER_HALTED,
3729 ndmp_4to9_notify_mover_halted_request,
3730 ndmp_9to4_notify_mover_halted_request,
3731 JUST_ERROR_REPLY, /* no reply actually */
3732 NO_MEMUSED /* no memory free routines written yet */
3735 NDMP4_NOTIFY_MOVER_PAUSED, NDMP9_NOTIFY_MOVER_PAUSED,
3736 ndmp_4to9_notify_mover_paused_request,
3737 ndmp_9to4_notify_mover_paused_request,
3738 JUST_ERROR_REPLY, /* no reply actually */
3739 NO_MEMUSED /* no memory free routines written yet */
3742 NDMP4_NOTIFY_DATA_READ, NDMP9_NOTIFY_DATA_READ,
3743 ndmp_4to9_notify_data_read_request,
3744 ndmp_9to4_notify_data_read_request,
3745 JUST_ERROR_REPLY, /* no reply actually */
3746 NO_MEMUSED /* no memory free routines written yet */
3750 NDMP4_LOG_FILE, NDMP9_LOG_FILE,
3751 ndmp_4to9_log_file_request,
3752 ndmp_9to4_log_file_request,
3753 JUST_ERROR_REPLY, /* no reply actually */
3754 NO_MEMUSED /* no memory free routines written yet */
3757 NDMP4_LOG_MESSAGE, NDMP9_LOG_MESSAGE,
3758 ndmp_4to9_log_message_request,
3759 ndmp_9to4_log_message_request,
3760 JUST_ERROR_REPLY, /* no reply actually */
3761 NO_MEMUSED /* no memory free routines written yet */
3765 NDMP4_FH_ADD_FILE, NDMP9_FH_ADD_FILE,
3766 ndmp_4to9_fh_add_file_request,
3767 ndmp_9to4_fh_add_file_request,
3768 JUST_ERROR_REPLY, /* no reply actually */
3769 NO_MEMUSED /* no memory free routines written yet */
3772 NDMP4_FH_ADD_DIR, NDMP9_FH_ADD_DIR,
3773 ndmp_4to9_fh_add_dir_request,
3774 ndmp_9to4_fh_add_dir_request,
3775 JUST_ERROR_REPLY, /* no reply actually */
3776 ndmp_4to9_fh_add_dir_free_request,
3777 ndmp_9to4_fh_add_dir_free_request,
3781 NDMP4_FH_ADD_NODE, NDMP9_FH_ADD_NODE,
3782 ndmp_4to9_fh_add_node_request,
3783 ndmp_9to4_fh_add_node_request,
3784 JUST_ERROR_REPLY, /* no reply actually */
3785 ndmp_4to9_fh_add_node_free_request,
3786 ndmp_9to4_fh_add_node_free_request,
3791 NDMP4_MOVER_GET_STATE, NDMP9_MOVER_GET_STATE,
3793 ndmp_4to9_mover_get_state_reply,
3794 ndmp_9to4_mover_get_state_reply,
3795 NO_MEMUSED /* no memory free routines written yet */
3798 NDMP4_MOVER_LISTEN, NDMP9_MOVER_LISTEN,
3799 ndmp_4to9_mover_listen_request,
3800 ndmp_9to4_mover_listen_request,
3801 ndmp_4to9_mover_listen_reply,
3802 ndmp_9to4_mover_listen_reply,
3803 NO_MEMUSED /* no memory free routines written yet */
3806 NDMP4_MOVER_CONNECT, NDMP9_MOVER_CONNECT,
3807 ndmp_4to9_mover_connect_request,
3808 ndmp_9to4_mover_connect_request,
3810 NO_MEMUSED /* no memory free routines written yet */
3813 NDMP4_MOVER_SET_RECORD_SIZE, NDMP9_MOVER_SET_RECORD_SIZE,
3814 ndmp_4to9_mover_set_record_size_request,
3815 ndmp_9to4_mover_set_record_size_request,
3817 NO_MEMUSED /* no memory free routines written yet */
3820 NDMP4_MOVER_SET_WINDOW, NDMP9_MOVER_SET_WINDOW,
3821 ndmp_4to9_mover_set_window_request,
3822 ndmp_9to4_mover_set_window_request,
3824 NO_MEMUSED /* no memory free routines written yet */
3827 NDMP4_MOVER_CONTINUE, NDMP9_MOVER_CONTINUE,
3828 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3829 NO_MEMUSED /* no memory free routines written yet */
3832 NDMP4_MOVER_ABORT, NDMP9_MOVER_ABORT,
3833 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3834 NO_MEMUSED /* no memory free routines written yet */
3837 NDMP4_MOVER_STOP, NDMP9_MOVER_STOP,
3838 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3839 NO_MEMUSED /* no memory free routines written yet */
3842 NDMP4_MOVER_READ, NDMP9_MOVER_READ,
3843 ndmp_4to9_mover_read_request,
3844 ndmp_9to4_mover_read_request,
3846 NO_MEMUSED /* no memory free routines written yet */
3849 NDMP4_MOVER_CLOSE, NDMP9_MOVER_CLOSE,
3850 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3851 NO_MEMUSED /* no memory free routines written yet */
3858 #endif /* !NDMOS_OPTION_NO_NDMP4 */