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_NDMP3
49 ****************************************************************
54 ****************************************************************
57 struct enum_conversion ndmp_39_error[] = {
58 { NDMP3_UNDEFINED_ERR, NDMP9_UNDEFINED_ERR }, /* default */
59 { NDMP3_NO_ERR, NDMP9_NO_ERR },
60 { NDMP3_NOT_SUPPORTED_ERR, NDMP9_NOT_SUPPORTED_ERR },
61 { NDMP3_DEVICE_BUSY_ERR, NDMP9_DEVICE_BUSY_ERR },
62 { NDMP3_DEVICE_OPENED_ERR, NDMP9_DEVICE_OPENED_ERR },
63 { NDMP3_NOT_AUTHORIZED_ERR, NDMP9_NOT_AUTHORIZED_ERR },
64 { NDMP3_PERMISSION_ERR, NDMP9_PERMISSION_ERR },
65 { NDMP3_DEV_NOT_OPEN_ERR, NDMP9_DEV_NOT_OPEN_ERR },
66 { NDMP3_IO_ERR, NDMP9_IO_ERR },
67 { NDMP3_TIMEOUT_ERR, NDMP9_TIMEOUT_ERR },
68 { NDMP3_ILLEGAL_ARGS_ERR, NDMP9_ILLEGAL_ARGS_ERR },
69 { NDMP3_NO_TAPE_LOADED_ERR, NDMP9_NO_TAPE_LOADED_ERR },
70 { NDMP3_WRITE_PROTECT_ERR, NDMP9_WRITE_PROTECT_ERR },
71 { NDMP3_EOF_ERR, NDMP9_EOF_ERR },
72 { NDMP3_EOM_ERR, NDMP9_EOM_ERR },
73 { NDMP3_FILE_NOT_FOUND_ERR, NDMP9_FILE_NOT_FOUND_ERR },
74 { NDMP3_BAD_FILE_ERR, NDMP9_BAD_FILE_ERR },
75 { NDMP3_NO_DEVICE_ERR, NDMP9_NO_DEVICE_ERR },
76 { NDMP3_NO_BUS_ERR, NDMP9_NO_BUS_ERR },
77 { NDMP3_XDR_DECODE_ERR, NDMP9_XDR_DECODE_ERR },
78 { NDMP3_ILLEGAL_STATE_ERR, NDMP9_ILLEGAL_STATE_ERR },
79 { NDMP3_UNDEFINED_ERR, NDMP9_UNDEFINED_ERR },
80 { NDMP3_XDR_ENCODE_ERR, NDMP9_XDR_ENCODE_ERR },
81 { NDMP3_NO_MEM_ERR, NDMP9_NO_MEM_ERR },
82 { NDMP3_CONNECT_ERR, NDMP9_CONNECT_ERR },
83 END_ENUM_CONVERSION_TABLE
92 *error9 = convert_enum_to_9 (ndmp_39_error, *error3);
101 *error3 = convert_enum_from_9 (ndmp_39_error, *error9);
110 ****************************************************************
118 CNVT_STRDUP_TO_9(pval3, pval9, name);
119 CNVT_STRDUP_TO_9(pval3, pval9, value);
129 CNVT_STRDUP_FROM_9(pval3, pval9, name);
130 CNVT_STRDUP_FROM_9(pval3, pval9, value);
143 for (i = 0; i < n_pval; i++)
144 ndmp_3to9_pval (&pval3[i], &pval9[i]);
157 for (i = 0; i < n_pval; i++)
158 ndmp_9to3_pval (&pval9[i], &pval3[i]);
164 ndmp_3to9_pval_vec_dup (
166 ndmp9_pval **pval9_p,
169 *pval9_p = NDMOS_MACRO_NEWN (ndmp9_pval, n_pval);
173 return ndmp_3to9_pval_vec (pval3, *pval9_p, n_pval);
177 ndmp_9to3_pval_vec_dup (
179 ndmp3_pval **pval3_p,
182 *pval3_p = NDMOS_MACRO_NEWN (ndmp3_pval, n_pval);
186 return ndmp_9to3_pval_vec (pval9, *pval3_p, n_pval);
192 ****************************************************************
195 struct enum_conversion ndmp_39_addr_type[] = {
196 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL }, /* default */
197 { NDMP3_ADDR_LOCAL, NDMP9_ADDR_LOCAL },
198 { NDMP3_ADDR_TCP, NDMP9_ADDR_TCP },
199 END_ENUM_CONVERSION_TABLE
208 switch (addr3->addr_type) {
209 case NDMP3_ADDR_LOCAL:
210 addr9->addr_type = NDMP9_ADDR_LOCAL;
214 addr9->addr_type = NDMP9_ADDR_TCP;
215 addr9->ndmp9_addr_u.tcp_addr.ip_addr =
216 addr3->ndmp3_addr_u.tcp_addr.ip_addr;
217 addr9->ndmp9_addr_u.tcp_addr.port =
218 addr3->ndmp3_addr_u.tcp_addr.port;
222 NDMOS_MACRO_ZEROFILL (addr9);
223 addr9->addr_type = -1;
235 switch (addr9->addr_type) {
236 case NDMP9_ADDR_LOCAL:
237 addr3->addr_type = NDMP3_ADDR_LOCAL;
241 addr3->addr_type = NDMP3_ADDR_TCP;
242 addr3->ndmp3_addr_u.tcp_addr.ip_addr =
243 addr9->ndmp9_addr_u.tcp_addr.ip_addr;
244 addr3->ndmp3_addr_u.tcp_addr.port =
245 addr9->ndmp9_addr_u.tcp_addr.port;
249 NDMOS_MACRO_ZEROFILL (addr3);
250 addr3->addr_type = -1;
262 ****************************************************************
265 struct enum_conversion ndmp_39_auth_type[] = {
266 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL }, /* default */
267 { NDMP3_AUTH_NONE, NDMP9_AUTH_NONE },
268 { NDMP3_AUTH_TEXT, NDMP9_AUTH_TEXT },
269 { NDMP3_AUTH_MD5, NDMP9_AUTH_MD5 },
270 END_ENUM_CONVERSION_TABLE
274 ndmp_3to9_auth_data (
275 ndmp3_auth_data *auth_data3,
276 ndmp9_auth_data *auth_data9)
280 ndmp3_auth_text *text3;
281 ndmp9_auth_text *text9;
282 ndmp3_auth_md5 *md53;
283 ndmp9_auth_md5 *md59;
285 switch (auth_data3->auth_type) {
286 case NDMP3_AUTH_NONE:
287 auth_data9->auth_type = NDMP9_AUTH_NONE;
290 case NDMP3_AUTH_TEXT:
291 auth_data9->auth_type = NDMP9_AUTH_TEXT;
292 text3 = &auth_data3->ndmp3_auth_data_u.auth_text;
293 text9 = &auth_data9->ndmp9_auth_data_u.auth_text;
294 rc = CNVT_STRDUP_TO_9(text3, text9, auth_id);
296 return rc; /* no mem */
298 rc = CNVT_STRDUP_TO_9(text3, text9, auth_password);
300 NDMOS_API_FREE (text9->auth_id);
302 return rc; /* no mem */
307 auth_data9->auth_type = NDMP9_AUTH_MD5;
308 md53 = &auth_data3->ndmp3_auth_data_u.auth_md5;
309 md59 = &auth_data9->ndmp9_auth_data_u.auth_md5;
310 rc = CNVT_STRDUP_TO_9(md53, md59, auth_id);
312 return rc; /* no mem */
314 NDMOS_API_BCOPY (md53->auth_digest, md59->auth_digest, 16);
318 auth_data9->auth_type = auth_data3->auth_type;
319 NDMOS_MACRO_ZEROFILL (&auth_data9->ndmp9_auth_data_u);
328 ndmp_9to3_auth_data (
329 ndmp9_auth_data *auth_data9,
330 ndmp3_auth_data *auth_data3)
334 ndmp9_auth_text *text9;
335 ndmp3_auth_text *text3;
336 ndmp9_auth_md5 *md59;
337 ndmp3_auth_md5 *md53;
339 switch (auth_data9->auth_type) {
340 case NDMP9_AUTH_NONE:
341 auth_data3->auth_type = NDMP3_AUTH_NONE;
344 case NDMP9_AUTH_TEXT:
345 auth_data3->auth_type = NDMP3_AUTH_TEXT;
346 text9 = &auth_data9->ndmp9_auth_data_u.auth_text;
347 text3 = &auth_data3->ndmp3_auth_data_u.auth_text;
348 rc = CNVT_STRDUP_FROM_9(text3, text9, auth_id);
350 return rc; /* no mem */
352 rc = CNVT_STRDUP_FROM_9(text3, text9, auth_password);
354 NDMOS_API_FREE (text9->auth_id);
356 return rc; /* no mem */
361 auth_data3->auth_type = NDMP3_AUTH_MD5;
362 md59 = &auth_data9->ndmp9_auth_data_u.auth_md5;
363 md53 = &auth_data3->ndmp3_auth_data_u.auth_md5;
364 rc = CNVT_STRDUP_FROM_9(md53, md59, auth_id);
366 return rc; /* no mem */
368 NDMOS_API_BCOPY (md59->auth_digest, md53->auth_digest, 16);
372 auth_data3->auth_type = auth_data9->auth_type;
373 NDMOS_MACRO_ZEROFILL (&auth_data3->ndmp3_auth_data_u);
382 ndmp_3to9_auth_attr (
383 ndmp3_auth_attr *auth_attr3,
384 ndmp9_auth_attr *auth_attr9)
388 switch (auth_attr3->auth_type) {
389 case NDMP3_AUTH_NONE:
390 auth_attr9->auth_type = NDMP9_AUTH_NONE;
393 case NDMP3_AUTH_TEXT:
394 auth_attr9->auth_type = NDMP9_AUTH_TEXT;
398 auth_attr9->auth_type = NDMP9_AUTH_MD5;
399 NDMOS_API_BCOPY (auth_attr3->ndmp3_auth_attr_u.challenge,
400 auth_attr9->ndmp9_auth_attr_u.challenge, 64);
404 auth_attr9->auth_type = auth_attr3->auth_type;
405 NDMOS_MACRO_ZEROFILL (&auth_attr9->ndmp9_auth_attr_u);
414 ndmp_9to3_auth_attr (
415 ndmp9_auth_attr *auth_attr9,
416 ndmp3_auth_attr *auth_attr3)
420 switch (auth_attr9->auth_type) {
421 case NDMP9_AUTH_NONE:
422 auth_attr3->auth_type = NDMP3_AUTH_NONE;
425 case NDMP9_AUTH_TEXT:
426 auth_attr3->auth_type = NDMP3_AUTH_TEXT;
430 auth_attr3->auth_type = NDMP3_AUTH_MD5;
431 NDMOS_API_BCOPY (auth_attr9->ndmp9_auth_attr_u.challenge,
432 auth_attr3->ndmp3_auth_attr_u.challenge, 64);
436 auth_attr3->auth_type = auth_attr9->auth_type;
437 NDMOS_MACRO_ZEROFILL (&auth_attr3->ndmp3_auth_attr_u);
452 ndmp_3to9_connect_open_request (
453 ndmp3_connect_open_request *request3,
454 ndmp9_connect_open_request *request9)
456 CNVT_TO_9 (request3, request9, protocol_version);
461 ndmp_9to3_connect_open_request (
462 ndmp9_connect_open_request *request9,
463 ndmp3_connect_open_request *request3)
465 CNVT_FROM_9 (request3, request9, protocol_version);
471 * ndmp_connect_client_auth
476 ndmp_3to9_connect_client_auth_request (
477 ndmp3_connect_client_auth_request *request3,
478 ndmp9_connect_client_auth_request *request9)
482 rc = ndmp_3to9_auth_data (&request3->auth_data, &request9->auth_data);
488 ndmp_9to3_connect_client_auth_request (
489 ndmp9_connect_client_auth_request *request9,
490 ndmp3_connect_client_auth_request *request3)
494 rc = ndmp_9to3_auth_data (&request9->auth_data, &request3->auth_data);
502 * no arg request, **NO REPLY**
506 * ndmp_connect_server_auth
511 ndmp_3to9_connect_server_auth_request (
512 ndmp3_connect_server_auth_request *request3,
513 ndmp9_connect_server_auth_request *request9)
519 ndmp_9to3_connect_server_auth_request (
520 ndmp9_connect_server_auth_request *request9,
521 ndmp3_connect_server_auth_request *request3)
531 ****************************************************************
535 ndmp_3to9_device_info_vec_dup (
536 ndmp3_device_info *devinf3,
537 ndmp9_device_info **devinf9_p,
540 ndmp9_device_info * devinf9;
544 devinf9 = *devinf9_p = NDMOS_MACRO_NEWN(ndmp9_device_info, n_devinf);
546 return -1; /* no mem */
549 for (i = 0; i < n_devinf; i++) {
550 ndmp3_device_info * di3 = &devinf3[i];
551 ndmp9_device_info * di9 = &devinf9[i];
553 NDMOS_MACRO_ZEROFILL (di9);
555 CNVT_STRDUP_TO_9 (di3, di9, model);
557 di9->caplist.caplist_val =
558 NDMOS_MACRO_NEWN (ndmp9_device_capability,
559 di3->caplist.caplist_len);
561 if (!di9->caplist.caplist_val) {
565 for (j = 0; j < di3->caplist.caplist_len; j++) {
566 ndmp3_device_capability * cap3;
567 ndmp9_device_capability * cap9;
569 cap3 = &di3->caplist.caplist_val[j];
570 cap9 = &di9->caplist.caplist_val[j];
572 NDMOS_MACRO_ZEROFILL (cap9);
574 cap9->v3attr.valid = NDMP9_VALIDITY_VALID;
575 cap9->v3attr.value = cap3->attr;
577 CNVT_STRDUP_TO_9 (cap3, cap9, device);
579 ndmp_3to9_pval_vec_dup (
580 cap3->capability.capability_val,
581 &cap9->capability.capability_val,
582 cap3->capability.capability_len);
584 cap9->capability.capability_len =
585 cap3->capability.capability_len;
587 di9->caplist.caplist_len = j;
594 ndmp_9to3_device_info_vec_dup (
595 ndmp9_device_info *devinf9,
596 ndmp3_device_info **devinf3_p,
599 ndmp3_device_info * devinf3;
603 devinf3 = *devinf3_p = NDMOS_MACRO_NEWN(ndmp3_device_info, n_devinf);
605 return -1; /* no mem */
608 for (i = 0; i < n_devinf; i++) {
609 ndmp9_device_info * di9 = &devinf9[i];
610 ndmp3_device_info * di3 = &devinf3[i];
612 NDMOS_MACRO_ZEROFILL (di3);
614 CNVT_STRDUP_FROM_9 (di3, di9, model);
616 di3->caplist.caplist_val =
617 NDMOS_MACRO_NEWN (ndmp3_device_capability,
618 di9->caplist.caplist_len);
620 if (!di3->caplist.caplist_val) {
624 for (j = 0; j < di9->caplist.caplist_len; j++) {
625 ndmp9_device_capability * cap9;
626 ndmp3_device_capability * cap3;
628 cap9 = &di9->caplist.caplist_val[j];
629 cap3 = &di3->caplist.caplist_val[j];
631 NDMOS_MACRO_ZEROFILL (cap3);
633 CNVT_STRDUP_FROM_9 (cap3, cap9, device);
635 ndmp_9to3_pval_vec_dup (
636 cap9->capability.capability_val,
637 &cap3->capability.capability_val,
638 cap9->capability.capability_len);
640 cap3->capability.capability_len =
641 cap9->capability.capability_len;
643 di3->caplist.caplist_len = j;
651 * ndmp_config_get_host_info
656 ndmp_3to9_config_get_host_info_reply (
657 ndmp3_config_get_host_info_reply *reply3,
658 ndmp9_config_get_host_info_reply *reply9)
662 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
663 CNVT_STRDUP_TO_9x (reply3, reply9, hostname, config_info.hostname);
664 CNVT_STRDUP_TO_9x (reply3, reply9, os_type, config_info.os_type);
665 CNVT_STRDUP_TO_9x (reply3, reply9, os_vers, config_info.os_vers);
666 CNVT_STRDUP_TO_9x (reply3, reply9, hostid, config_info.hostid);
672 ndmp_9to3_config_get_host_info_reply (
673 ndmp9_config_get_host_info_reply *reply9,
674 ndmp3_config_get_host_info_reply *reply3)
676 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
677 CNVT_STRDUP_FROM_9x (reply3, reply9, hostname, config_info.hostname);
678 CNVT_STRDUP_FROM_9x (reply3, reply9, os_type, config_info.os_type);
679 CNVT_STRDUP_FROM_9x (reply3, reply9, os_vers, config_info.os_vers);
680 CNVT_STRDUP_FROM_9x (reply3, reply9, hostid, config_info.hostid);
688 * ndmp_config_get_connection_type
693 ndmp_3to9_config_get_connection_type_reply (
694 ndmp3_config_get_connection_type_reply *reply3,
695 ndmp9_config_get_connection_type_reply *reply9)
700 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
701 for (i = 0; i < reply3->addr_types.addr_types_len; i++) {
702 switch (reply3->addr_types.addr_types_val[i]) {
703 case NDMP3_ADDR_LOCAL:
704 reply9->config_info.conntypes |=
705 NDMP9_CONFIG_CONNTYPE_LOCAL;
709 reply9->config_info.conntypes |=
710 NDMP9_CONFIG_CONNTYPE_TCP;
724 ndmp_9to3_config_get_connection_type_reply (
725 ndmp9_config_get_connection_type_reply *reply9,
726 ndmp3_config_get_connection_type_reply *reply3)
730 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
732 reply3->addr_types.addr_types_val =
733 NDMOS_MACRO_NEWN(ndmp3_addr_type, 3);
734 if (!reply3->addr_types.addr_types_val) {
735 return -1; /* no mem */
739 if (reply9->config_info.conntypes & NDMP9_CONFIG_CONNTYPE_LOCAL) {
740 reply3->addr_types.addr_types_val[i++] = NDMP3_ADDR_LOCAL;
742 if (reply9->config_info.conntypes & NDMP9_CONFIG_CONNTYPE_TCP) {
743 reply3->addr_types.addr_types_val[i++] = NDMP3_ADDR_TCP;
745 reply3->addr_types.addr_types_len = i;
752 * ndmp_config_get_auth_attr
756 ndmp_3to9_config_get_auth_attr_request (
757 struct ndmp3_config_get_auth_attr_request *request3,
758 struct ndmp9_config_get_auth_attr_request *request9)
763 rc = CNVT_E_TO_9 (request3, request9, auth_type, ndmp_39_auth_type);
764 if (rc == NDMP_INVALID_GENERAL) {
765 CNVT_TO_9 (request3, request9, auth_type);
773 ndmp_9to3_config_get_auth_attr_request (
774 struct ndmp9_config_get_auth_attr_request *request9,
775 struct ndmp3_config_get_auth_attr_request *request3)
780 rc = CNVT_E_FROM_9 (request3, request9, auth_type, ndmp_39_auth_type);
781 if (rc == NDMP_INVALID_GENERAL) {
782 CNVT_FROM_9 (request3, request9, auth_type);
790 ndmp_3to9_config_get_auth_attr_reply (
791 struct ndmp3_config_get_auth_attr_reply *reply3,
792 struct ndmp9_config_get_auth_attr_reply *reply9)
796 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
798 n_error += ndmp_3to9_auth_attr (&reply3->server_attr,
799 &reply9->server_attr);
805 ndmp_9to3_config_get_auth_attr_reply (
806 struct ndmp9_config_get_auth_attr_reply *reply9,
807 struct ndmp3_config_get_auth_attr_reply *reply3)
811 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
813 n_error += ndmp_9to3_auth_attr (&reply9->server_attr,
814 &reply3->server_attr);
821 * ndmp_config_get_butype_info
826 ndmp_3to9_config_get_butype_info_reply (
827 ndmp3_config_get_butype_info_reply *reply3,
828 ndmp9_config_get_butype_info_reply *reply9)
833 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
835 n = reply3->butype_info.butype_info_len;
837 reply9->config_info.butype_info.butype_info_len = 0;
838 reply9->config_info.butype_info.butype_info_val = 0;
842 reply9->config_info.butype_info.butype_info_val =
843 NDMOS_MACRO_NEWN (ndmp9_butype_info, n);
845 for (i = 0; i < n; i++) {
846 ndmp9_butype_info * bu9;
847 ndmp3_butype_info * bu3;
849 bu3 = &reply3->butype_info.butype_info_val[i];
850 bu9 = &reply9->config_info.butype_info.butype_info_val[i];
852 NDMOS_MACRO_ZEROFILL (bu9);
854 CNVT_STRDUP_TO_9 (bu3, bu9, butype_name);
855 ndmp_3to9_pval_vec_dup (bu3->default_env.default_env_val,
856 &bu9->default_env.default_env_val,
857 bu3->default_env.default_env_len);
859 bu9->default_env.default_env_len =
860 bu3->default_env.default_env_len;
862 bu9->v3attr.valid = NDMP9_VALIDITY_VALID;
863 bu9->v3attr.value = bu3->attrs;
866 reply9->config_info.butype_info.butype_info_len = n;
872 ndmp_9to3_config_get_butype_info_reply (
873 ndmp9_config_get_butype_info_reply *reply9,
874 ndmp3_config_get_butype_info_reply *reply3)
879 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
881 n = reply9->config_info.butype_info.butype_info_len;
883 reply3->butype_info.butype_info_len = 0;
884 reply3->butype_info.butype_info_val = 0;
888 reply3->butype_info.butype_info_val =
889 NDMOS_MACRO_NEWN (ndmp3_butype_info, n);
891 for (i = 0; i < n; i++) {
892 ndmp3_butype_info * bu3;
893 ndmp9_butype_info * bu9;
895 bu9 = &reply9->config_info.butype_info.butype_info_val[i];
896 bu3 = &reply3->butype_info.butype_info_val[i];
898 NDMOS_MACRO_ZEROFILL (bu3);
900 CNVT_STRDUP_FROM_9 (bu3, bu9, butype_name);
901 ndmp_9to3_pval_vec_dup (bu9->default_env.default_env_val,
902 &bu3->default_env.default_env_val,
903 bu9->default_env.default_env_len);
905 bu3->default_env.default_env_len =
906 bu9->default_env.default_env_len;
908 bu3->attrs = bu9->v3attr.value;
911 reply3->butype_info.butype_info_len = n;
918 * ndmp_config_get_fs_info
923 ndmp_3to9_config_get_fs_info_reply (
924 ndmp3_config_get_fs_info_reply *reply3,
925 ndmp9_config_get_fs_info_reply *reply9)
930 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
932 n = reply3->fs_info.fs_info_len;
934 reply9->config_info.fs_info.fs_info_len = 0;
935 reply9->config_info.fs_info.fs_info_val = 0;
939 reply9->config_info.fs_info.fs_info_val =
940 NDMOS_MACRO_NEWN (ndmp9_fs_info, n);
942 for (i = 0; i < n; i++) {
946 fs3 = &reply3->fs_info.fs_info_val[i];
947 fs9 = &reply9->config_info.fs_info.fs_info_val[i];
949 NDMOS_MACRO_ZEROFILL (fs9);
951 CNVT_STRDUP_TO_9 (fs3, fs9, fs_type);
952 CNVT_STRDUP_TO_9 (fs3, fs9, fs_logical_device);
953 CNVT_STRDUP_TO_9 (fs3, fs9, fs_physical_device);
954 CNVT_STRDUP_TO_9 (fs3, fs9, fs_status);
956 ndmp_3to9_pval_vec_dup (fs3->fs_env.fs_env_val,
957 &fs9->fs_env.fs_env_val,
958 fs3->fs_env.fs_env_len);
960 fs9->fs_env.fs_env_len = fs3->fs_env.fs_env_len;
963 reply9->config_info.fs_info.fs_info_len = n;
969 ndmp_9to3_config_get_fs_info_reply (
970 ndmp9_config_get_fs_info_reply *reply9,
971 ndmp3_config_get_fs_info_reply *reply3)
976 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
978 n = reply9->config_info.fs_info.fs_info_len;
980 reply3->fs_info.fs_info_len = 0;
981 reply3->fs_info.fs_info_val = 0;
985 reply3->fs_info.fs_info_val = NDMOS_MACRO_NEWN (ndmp3_fs_info, n);
987 for (i = 0; i < n; i++) {
991 fs9 = &reply9->config_info.fs_info.fs_info_val[i];
992 fs3 = &reply3->fs_info.fs_info_val[i];
994 NDMOS_MACRO_ZEROFILL (fs3);
996 CNVT_STRDUP_FROM_9 (fs3, fs9, fs_type);
997 CNVT_STRDUP_FROM_9 (fs3, fs9, fs_logical_device);
998 CNVT_STRDUP_FROM_9 (fs3, fs9, fs_physical_device);
999 CNVT_STRDUP_FROM_9 (fs3, fs9, fs_status);
1001 ndmp_9to3_pval_vec_dup (fs9->fs_env.fs_env_val,
1002 &fs3->fs_env.fs_env_val,
1003 fs9->fs_env.fs_env_len);
1005 fs3->fs_env.fs_env_len = fs9->fs_env.fs_env_len;
1008 reply3->fs_info.fs_info_len = n;
1015 * ndmp_config_get_tape_info
1020 ndmp_3to9_config_get_tape_info_reply (
1021 ndmp3_config_get_tape_info_reply *reply3,
1022 ndmp9_config_get_tape_info_reply *reply9)
1024 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1026 ndmp_3to9_device_info_vec_dup (
1027 reply3->tape_info.tape_info_val,
1028 &reply9->config_info.tape_info.tape_info_val,
1029 reply3->tape_info.tape_info_len);
1031 reply9->config_info.tape_info.tape_info_len =
1032 reply3->tape_info.tape_info_len;
1038 ndmp_9to3_config_get_tape_info_reply (
1039 ndmp9_config_get_tape_info_reply *reply9,
1040 ndmp3_config_get_tape_info_reply *reply3)
1042 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1044 ndmp_9to3_device_info_vec_dup (
1045 reply9->config_info.tape_info.tape_info_val,
1046 &reply3->tape_info.tape_info_val,
1047 reply9->config_info.tape_info.tape_info_len);
1049 reply3->tape_info.tape_info_len =
1050 reply9->config_info.tape_info.tape_info_len;
1057 * ndmp_config_get_scsi_info
1062 ndmp_3to9_config_get_scsi_info_reply (
1063 ndmp3_config_get_scsi_info_reply *reply3,
1064 ndmp9_config_get_scsi_info_reply *reply9)
1066 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1068 ndmp_3to9_device_info_vec_dup (
1069 reply3->scsi_info.scsi_info_val,
1070 &reply9->config_info.scsi_info.scsi_info_val,
1071 reply3->scsi_info.scsi_info_len);
1073 reply9->config_info.scsi_info.scsi_info_len =
1074 reply3->scsi_info.scsi_info_len;
1080 ndmp_9to3_config_get_scsi_info_reply (
1081 ndmp9_config_get_scsi_info_reply *reply9,
1082 ndmp3_config_get_scsi_info_reply *reply3)
1084 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1086 ndmp_9to3_device_info_vec_dup (
1087 reply9->config_info.scsi_info.scsi_info_val,
1088 &reply3->scsi_info.scsi_info_val,
1089 reply9->config_info.scsi_info.scsi_info_len);
1091 reply3->scsi_info.scsi_info_len =
1092 reply9->config_info.scsi_info.scsi_info_len;
1099 * ndmp_config_get_server_info
1104 ndmp_3to9_config_get_server_info_reply (
1105 ndmp3_config_get_server_info_reply *reply3,
1106 ndmp9_config_get_server_info_reply *reply9)
1108 unsigned int i, n_error = 0;
1110 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1111 CNVT_STRDUP_TO_9x (reply3, reply9,
1112 vendor_name, config_info.vendor_name);
1113 CNVT_STRDUP_TO_9x (reply3, reply9,
1114 product_name, config_info.product_name);
1115 CNVT_STRDUP_TO_9x (reply3, reply9,
1116 revision_number, config_info.revision_number);
1118 reply9->config_info.authtypes = 0;
1119 for (i = 0; i < reply3->auth_type.auth_type_len; i++) {
1120 switch (reply3->auth_type.auth_type_val[i]) {
1121 case NDMP3_AUTH_NONE:
1122 reply9->config_info.authtypes |=
1123 NDMP9_CONFIG_AUTHTYPE_NONE;
1126 case NDMP3_AUTH_TEXT:
1127 reply9->config_info.authtypes |=
1128 NDMP9_CONFIG_AUTHTYPE_TEXT;
1131 case NDMP3_AUTH_MD5:
1132 reply9->config_info.authtypes |=
1133 NDMP9_CONFIG_AUTHTYPE_MD5;
1147 ndmp_9to3_config_get_server_info_reply (
1148 ndmp9_config_get_server_info_reply *reply9,
1149 ndmp3_config_get_server_info_reply *reply3)
1153 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1154 CNVT_STRDUP_FROM_9x (reply3, reply9,
1155 vendor_name, config_info.vendor_name);
1156 CNVT_STRDUP_FROM_9x (reply3, reply9,
1157 product_name, config_info.product_name);
1158 CNVT_STRDUP_FROM_9x (reply3, reply9,
1159 revision_number, config_info.revision_number);
1161 reply3->auth_type.auth_type_val = NDMOS_MACRO_NEWN(ndmp3_auth_type, 3);
1162 if (!reply3->auth_type.auth_type_val) {
1167 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_NONE) {
1168 reply3->auth_type.auth_type_val[i++] = NDMP3_AUTH_NONE;
1170 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_TEXT) {
1171 reply3->auth_type.auth_type_val[i++] = NDMP3_AUTH_TEXT;
1173 if (reply9->config_info.authtypes & NDMP9_CONFIG_AUTHTYPE_MD5) {
1174 reply3->auth_type.auth_type_val[i++] = NDMP3_AUTH_MD5;
1176 reply3->auth_type.auth_type_len = i;
1186 ****************************************************************
1194 ndmp_3to9_scsi_open_request (
1195 ndmp3_scsi_open_request *request3,
1196 ndmp9_scsi_open_request *request9)
1198 request9->device = NDMOS_API_STRDUP (request3->device);
1199 if (!request9->device) {
1200 return -1; /* no memory */
1206 ndmp_9to3_scsi_open_request (
1207 ndmp9_scsi_open_request *request9,
1208 ndmp3_scsi_open_request *request3)
1210 request3->device = NDMOS_API_STRDUP (request9->device);
1211 if (!request3->device) {
1212 return -1; /* no memory */
1219 * no args request, just error reply
1223 * ndmp_scsi_get_state
1228 ndmp_3to9_scsi_get_state_reply (
1229 ndmp3_scsi_get_state_reply *reply3,
1230 ndmp9_scsi_get_state_reply *reply9)
1232 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1233 CNVT_TO_9 (reply3, reply9, target_controller);
1234 CNVT_TO_9 (reply3, reply9, target_id);
1235 CNVT_TO_9 (reply3, reply9, target_lun);
1241 ndmp_9to3_scsi_get_state_reply (
1242 ndmp9_scsi_get_state_reply *reply9,
1243 ndmp3_scsi_get_state_reply *reply3)
1245 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1246 CNVT_FROM_9 (reply3, reply9, target_controller);
1247 CNVT_FROM_9 (reply3, reply9, target_id);
1248 CNVT_FROM_9 (reply3, reply9, target_lun);
1254 * ndmp_scsi_set_target -- deprecated
1259 ndmp_3to9_scsi_set_target_request (
1260 ndmp3_scsi_set_target_request *request3,
1261 ndmp9_scsi_set_target_request *request9)
1263 request9->device = NDMOS_API_STRDUP (request3->device);
1264 if (!request9->device) {
1265 return -1; /* no memory */
1268 CNVT_TO_9 (request3, request9, target_controller);
1269 CNVT_TO_9 (request3, request9, target_id);
1270 CNVT_TO_9 (request3, request9, target_lun);
1276 ndmp_9to3_scsi_set_target_request (
1277 ndmp9_scsi_set_target_request *request9,
1278 ndmp3_scsi_set_target_request *request3)
1280 request3->device = NDMOS_API_STRDUP (request9->device);
1281 if (!request3->device) {
1282 return -1; /* no memory */
1285 CNVT_FROM_9 (request3, request9, target_controller);
1286 CNVT_FROM_9 (request3, request9, target_id);
1287 CNVT_FROM_9 (request3, request9, target_lun);
1293 * ndmp_scsi_reset_device
1294 * no args request, just error reply
1298 * ndmp_scsi_reset_bus -- deprecated
1299 * no args request, just error reply
1304 * ndmp_tape_execute_cdb
1305 * ndmp_scsi_execute_cdb
1309 ndmp_3to9_execute_cdb_request (
1310 ndmp3_execute_cdb_request *request3,
1311 ndmp9_execute_cdb_request *request9)
1317 switch (request3->flags) {
1319 request9->data_dir = NDMP9_SCSI_DATA_DIR_NONE;
1322 case NDMP3_SCSI_DATA_IN:
1323 request9->data_dir = NDMP9_SCSI_DATA_DIR_IN;
1326 case NDMP3_SCSI_DATA_OUT:
1327 request9->data_dir = NDMP9_SCSI_DATA_DIR_IN;
1331 /* deemed insolvable */
1336 CNVT_TO_9 (request3, request9, timeout);
1337 CNVT_TO_9 (request3, request9, datain_len);
1339 len = request3->dataout.dataout_len;
1341 p = NDMOS_API_MALLOC (len);
1345 NDMOS_API_BCOPY (request3->dataout.dataout_val, p, len);
1350 request9->dataout.dataout_len = len;
1351 request9->dataout.dataout_val = p;
1353 len = request3->cdb.cdb_len;
1355 p = NDMOS_API_MALLOC (len);
1357 if (request9->dataout.dataout_val) {
1358 NDMOS_API_FREE (request9->dataout.dataout_val);
1359 request9->dataout.dataout_len = 0;
1360 request9->dataout.dataout_val = 0;
1364 NDMOS_API_BCOPY (request3->cdb.cdb_val, p, len);
1369 request9->cdb.cdb_len = len;
1370 request9->cdb.cdb_val = p;
1376 ndmp_9to3_execute_cdb_request (
1377 ndmp9_execute_cdb_request *request9,
1378 ndmp3_execute_cdb_request *request3)
1384 switch (request9->data_dir) {
1385 case NDMP9_SCSI_DATA_DIR_NONE:
1386 request3->flags = 0;
1389 case NDMP9_SCSI_DATA_DIR_IN:
1390 request3->flags = NDMP3_SCSI_DATA_IN;
1393 case NDMP9_SCSI_DATA_DIR_OUT:
1394 request3->flags = NDMP3_SCSI_DATA_OUT;
1398 /* deemed insolvable */
1403 CNVT_FROM_9 (request3, request9, timeout);
1404 CNVT_FROM_9 (request3, request9, datain_len);
1406 len = request9->dataout.dataout_len;
1408 p = NDMOS_API_MALLOC (len);
1412 NDMOS_API_BCOPY (request9->dataout.dataout_val, p, len);
1417 request3->dataout.dataout_len = len;
1418 request3->dataout.dataout_val = p;
1420 len = request9->cdb.cdb_len;
1422 p = NDMOS_API_MALLOC (len);
1424 if (request3->dataout.dataout_val) {
1425 NDMOS_API_FREE (request3->dataout.dataout_val);
1426 request3->dataout.dataout_len = 0;
1427 request3->dataout.dataout_val = 0;
1431 NDMOS_API_BCOPY (request9->cdb.cdb_val, p, len);
1436 request3->cdb.cdb_len = len;
1437 request3->cdb.cdb_val = p;
1443 ndmp_3to9_execute_cdb_reply (
1444 ndmp3_execute_cdb_reply *reply3,
1445 ndmp9_execute_cdb_reply *reply9)
1450 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1451 CNVT_TO_9 (reply3, reply9, status);
1452 CNVT_TO_9 (reply3, reply9, dataout_len);
1454 len = reply3->datain.datain_len;
1456 p = NDMOS_API_MALLOC (len);
1460 NDMOS_API_BCOPY (reply3->datain.datain_val, p, len);
1465 reply9->datain.datain_len = len;
1466 reply9->datain.datain_val = p;
1468 len = reply3->ext_sense.ext_sense_len;
1470 p = NDMOS_API_MALLOC (len);
1472 if (reply9->datain.datain_val) {
1473 NDMOS_API_FREE (reply9->datain.datain_val);
1474 reply9->datain.datain_len = 0;
1475 reply9->datain.datain_val = 0;
1479 NDMOS_API_BCOPY (reply3->ext_sense.ext_sense_val, p, len);
1484 reply9->ext_sense.ext_sense_len = len;
1485 reply9->ext_sense.ext_sense_val = p;
1491 ndmp_9to3_execute_cdb_reply (
1492 ndmp9_execute_cdb_reply *reply9,
1493 ndmp3_execute_cdb_reply *reply3)
1498 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1499 CNVT_FROM_9 (reply3, reply9, status);
1500 CNVT_FROM_9 (reply3, reply9, dataout_len);
1502 len = reply9->datain.datain_len;
1504 p = NDMOS_API_MALLOC (len);
1508 NDMOS_API_BCOPY (reply9->datain.datain_val, p, len);
1513 reply3->datain.datain_len = len;
1514 reply3->datain.datain_val = p;
1516 len = reply9->ext_sense.ext_sense_len;
1518 p = NDMOS_API_MALLOC (len);
1520 if (reply3->datain.datain_val) {
1521 NDMOS_API_FREE (reply9->datain.datain_val);
1522 reply3->datain.datain_len = 0;
1523 reply3->datain.datain_val = 0;
1527 NDMOS_API_BCOPY (reply9->ext_sense.ext_sense_val, p, len);
1532 reply3->ext_sense.ext_sense_len = len;
1533 reply3->ext_sense.ext_sense_val = p;
1543 ****************************************************************
1548 * ndmp_tape_open_request
1552 struct enum_conversion ndmp_39_tape_open_mode[] = {
1553 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1554 { NDMP3_TAPE_READ_MODE, NDMP9_TAPE_READ_MODE },
1555 { NDMP3_TAPE_RDWR_MODE, NDMP9_TAPE_RDWR_MODE },
1556 END_ENUM_CONVERSION_TABLE
1562 ndmp_3to9_tape_open_request (
1563 ndmp3_tape_open_request *request3,
1564 ndmp9_tape_open_request *request9)
1570 * Mode codes are compatible between versions.
1571 * We let untranslated values through to
1572 * facilitate testing illegal values.
1574 rc = convert_enum_to_9 (ndmp_39_tape_open_mode, request3->mode);
1575 if (rc == NDMP_INVALID_GENERAL) {
1577 request9->mode = request3->mode;
1579 request9->mode = rc;
1582 request9->device = NDMOS_API_STRDUP (request3->device);
1583 if (!request9->device) {
1584 return -1; /* no memory */
1591 ndmp_9to3_tape_open_request (
1592 ndmp9_tape_open_request *request9,
1593 ndmp3_tape_open_request *request3)
1598 rc = convert_enum_from_9 (ndmp_39_tape_open_mode, request9->mode);
1599 if (rc == NDMP_INVALID_GENERAL) {
1601 request3->mode = request9->mode;
1603 request3->mode = rc;
1606 request3->device = NDMOS_API_STRDUP (request9->device);
1607 if (!request3->device) {
1608 return -1; /* no memory */
1619 * ndmp_tape_get_state_reply
1624 ndmp_3to9_tape_get_state_reply (
1625 ndmp3_tape_get_state_reply *reply3,
1626 ndmp9_tape_get_state_reply *reply9)
1628 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1629 CNVT_TO_9 (reply3, reply9, flags);
1630 CNVT_VUL_TO_9 (reply3, reply9, file_num);
1631 CNVT_VUL_TO_9 (reply3, reply9, soft_errors);
1632 CNVT_VUL_TO_9 (reply3, reply9, block_size);
1633 CNVT_VUL_TO_9 (reply3, reply9, blockno);
1634 CNVT_VUQ_TO_9 (reply3, reply9, total_space);
1635 CNVT_VUQ_TO_9 (reply3, reply9, space_remain);
1637 CNVT_VUL_TO_9 (reply3, reply9, partition);
1640 if (reply3->invalid & NDMP3_TAPE_STATE_FILE_NUM_INVALID)
1641 CNVT_IUL_TO_9 (reply9, file_num);
1643 if (reply3->invalid & NDMP3_TAPE_STATE_SOFT_ERRORS_INVALID)
1644 CNVT_IUL_TO_9 (reply9, soft_errors);
1646 if (reply3->invalid & NDMP3_TAPE_STATE_BLOCK_SIZE_INVALID)
1647 CNVT_IUL_TO_9 (reply9, block_size);
1649 if (reply3->invalid & NDMP3_TAPE_STATE_BLOCKNO_INVALID)
1650 CNVT_IUL_TO_9 (reply9, blockno);
1652 if (reply3->invalid & NDMP3_TAPE_STATE_TOTAL_SPACE_INVALID)
1653 CNVT_IUQ_TO_9 (reply9, total_space);
1655 if (reply3->invalid & NDMP3_TAPE_STATE_SPACE_REMAIN_INVALID)
1656 CNVT_IUQ_TO_9 (reply9, space_remain);
1659 if (reply3->invalid & NDMP3_TAPE_STATE_PARTITION_INVALID)
1660 CNVT_IUL_TO_9 (reply9, partition);
1667 ndmp_9to3_tape_get_state_reply (
1668 ndmp9_tape_get_state_reply *reply9,
1669 ndmp3_tape_get_state_reply *reply3)
1671 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1672 CNVT_FROM_9 (reply3, reply9, flags);
1673 CNVT_VUL_FROM_9 (reply3, reply9, file_num);
1674 CNVT_VUL_FROM_9 (reply3, reply9, soft_errors);
1675 CNVT_VUL_FROM_9 (reply3, reply9, block_size);
1676 CNVT_VUL_FROM_9 (reply3, reply9, blockno);
1677 CNVT_VUQ_FROM_9 (reply3, reply9, total_space);
1678 CNVT_VUQ_FROM_9 (reply3, reply9, space_remain);
1680 CNVT_VUL_FROM_9 (reply3, reply9, partition);
1683 reply3->invalid = 0;
1685 if (!reply9->file_num.valid)
1686 reply3->invalid |= NDMP3_TAPE_STATE_FILE_NUM_INVALID;
1688 if (!reply9->soft_errors.valid)
1689 reply3->invalid |= NDMP3_TAPE_STATE_SOFT_ERRORS_INVALID;
1691 if (!reply9->block_size.valid)
1692 reply3->invalid |= NDMP3_TAPE_STATE_BLOCK_SIZE_INVALID;
1694 if (!reply9->blockno.valid)
1695 reply3->invalid |= NDMP3_TAPE_STATE_BLOCKNO_INVALID;
1697 if (!reply9->total_space.valid)
1698 reply3->invalid |= NDMP3_TAPE_STATE_TOTAL_SPACE_INVALID;
1700 if (!reply9->space_remain.valid)
1701 reply3->invalid |= NDMP3_TAPE_STATE_SPACE_REMAIN_INVALID;
1704 if (!reply9->partition.valid)
1705 reply3->invalid |= NDMP3_TAPE_STATE_PARTITION_INVALID;
1707 reply3->invalid |= NDMP3_TAPE_STATE_PARTITION_INVALID;
1715 * ndmp_tape_mtio_request
1718 struct enum_conversion ndmp_39_tape_mtio_op[] = {
1719 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1720 { NDMP3_MTIO_FSF, NDMP9_MTIO_FSF },
1721 { NDMP3_MTIO_BSF, NDMP9_MTIO_BSF },
1722 { NDMP3_MTIO_FSR, NDMP9_MTIO_FSR },
1723 { NDMP3_MTIO_BSR, NDMP9_MTIO_BSR },
1724 { NDMP3_MTIO_REW, NDMP9_MTIO_REW },
1725 { NDMP3_MTIO_EOF, NDMP9_MTIO_EOF },
1726 { NDMP3_MTIO_OFF, NDMP9_MTIO_OFF },
1727 END_ENUM_CONVERSION_TABLE
1732 ndmp_3to9_tape_mtio_request (
1733 ndmp3_tape_mtio_request *request3,
1734 ndmp9_tape_mtio_request *request9)
1739 rc = CNVT_E_TO_9 (request3, request9, tape_op, ndmp_39_tape_mtio_op);
1740 if (rc == NDMP_INVALID_GENERAL) {
1742 CNVT_TO_9(request3, request9, tape_op);
1745 CNVT_TO_9(request3, request9, count);
1751 ndmp_9to3_tape_mtio_request (
1752 ndmp9_tape_mtio_request *request9,
1753 ndmp3_tape_mtio_request *request3)
1758 rc = CNVT_E_FROM_9 (request3, request9, tape_op, ndmp_39_tape_mtio_op);
1759 if (rc == NDMP_INVALID_GENERAL) {
1761 CNVT_FROM_9(request3, request9, tape_op);
1764 CNVT_FROM_9(request3, request9, count);
1770 ndmp_3to9_tape_mtio_reply (
1771 ndmp3_tape_mtio_reply *reply3,
1772 ndmp9_tape_mtio_reply *reply9)
1774 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1775 CNVT_TO_9 (reply3, reply9, resid_count);
1780 ndmp_9to3_tape_mtio_reply (
1781 ndmp9_tape_mtio_reply *reply9,
1782 ndmp3_tape_mtio_reply *reply3)
1784 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1785 CNVT_FROM_9 (reply3, reply9, resid_count);
1795 ndmp_3to9_tape_write_request (
1796 ndmp3_tape_write_request *request3,
1797 ndmp9_tape_write_request *request9)
1802 len = request3->data_out.data_out_len;
1804 p = NDMOS_API_MALLOC (len);
1809 NDMOS_API_BCOPY (request3->data_out.data_out_val, p, len);
1811 request9->data_out.data_out_val = p;
1812 request9->data_out.data_out_len = len;
1818 ndmp_9to3_tape_write_request (
1819 ndmp9_tape_write_request *request9,
1820 ndmp3_tape_write_request *request3)
1825 len = request9->data_out.data_out_len;
1827 p = NDMOS_API_MALLOC (len);
1832 NDMOS_API_BCOPY (request9->data_out.data_out_val, p, len);
1834 request3->data_out.data_out_val = p;
1835 request3->data_out.data_out_len = len;
1841 ndmp_3to9_tape_write_reply (
1842 ndmp3_tape_write_reply *reply3,
1843 ndmp9_tape_write_reply *reply9)
1845 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1846 CNVT_TO_9 (reply3, reply9, count);
1851 ndmp_9to3_tape_write_reply (
1852 ndmp9_tape_write_reply *reply9,
1853 ndmp3_tape_write_reply *reply3)
1855 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1856 CNVT_FROM_9 (reply3, reply9, count);
1866 ndmp_3to9_tape_read_request (
1867 ndmp3_tape_read_request *request3,
1868 ndmp9_tape_read_request *request9)
1870 CNVT_TO_9 (request3, request9, count);
1875 ndmp_9to3_tape_read_request (
1876 ndmp9_tape_read_request *request9,
1877 ndmp3_tape_read_request *request3)
1879 CNVT_FROM_9 (request3, request9, count);
1884 ndmp_3to9_tape_read_reply (
1885 ndmp3_tape_read_reply *reply3,
1886 ndmp9_tape_read_reply *reply9)
1891 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
1893 len = reply3->data_in.data_in_len;
1895 p = NDMOS_API_MALLOC (len);
1899 NDMOS_API_BCOPY (reply3->data_in.data_in_val, p, len);
1905 reply9->data_in.data_in_len = len;
1906 reply9->data_in.data_in_val = p;
1912 ndmp_9to3_tape_read_reply (
1913 ndmp9_tape_read_reply *reply9,
1914 ndmp3_tape_read_reply *reply3)
1919 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
1921 len = reply9->data_in.data_in_len;
1923 p = NDMOS_API_MALLOC (len);
1927 NDMOS_API_BCOPY (reply9->data_in.data_in_val, p, len);
1933 reply3->data_in.data_in_len = len;
1934 reply3->data_in.data_in_val = p;
1940 * ndmp_tape_execute_cdb
1941 * see SCSI INTERFACES above
1949 ****************************************************************
1953 * ndmp_mover_get_state
1958 struct enum_conversion ndmp_39_mover_mode[] = {
1959 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1960 { NDMP3_MOVER_MODE_READ, NDMP9_MOVER_MODE_READ },
1961 { NDMP3_MOVER_MODE_WRITE, NDMP9_MOVER_MODE_WRITE },
1963 END_ENUM_CONVERSION_TABLE
1966 struct enum_conversion ndmp_39_mover_state[] = {
1967 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1968 { NDMP3_MOVER_STATE_IDLE, NDMP9_MOVER_STATE_IDLE },
1969 { NDMP3_MOVER_STATE_LISTEN, NDMP9_MOVER_STATE_LISTEN },
1970 { NDMP3_MOVER_STATE_ACTIVE, NDMP9_MOVER_STATE_ACTIVE },
1971 { NDMP3_MOVER_STATE_PAUSED, NDMP9_MOVER_STATE_PAUSED },
1972 { NDMP3_MOVER_STATE_HALTED, NDMP9_MOVER_STATE_HALTED },
1975 { NDMP3_MOVER_STATE_ACTIVE, NDMP9_MOVER_STATE_STANDBY },
1977 END_ENUM_CONVERSION_TABLE
1980 struct enum_conversion ndmp_39_mover_pause_reason[] = {
1981 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1982 { NDMP3_MOVER_PAUSE_NA, NDMP9_MOVER_PAUSE_NA },
1983 { NDMP3_MOVER_PAUSE_EOM, NDMP9_MOVER_PAUSE_EOM },
1984 { NDMP3_MOVER_PAUSE_EOF, NDMP9_MOVER_PAUSE_EOF },
1985 { NDMP3_MOVER_PAUSE_SEEK, NDMP9_MOVER_PAUSE_SEEK },
1986 { NDMP3_MOVER_PAUSE_MEDIA_ERROR, NDMP9_MOVER_PAUSE_MEDIA_ERROR },
1987 { NDMP3_MOVER_PAUSE_EOW, NDMP9_MOVER_PAUSE_EOW },
1988 END_ENUM_CONVERSION_TABLE
1991 struct enum_conversion ndmp_39_mover_halt_reason[] = {
1992 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
1993 { NDMP3_MOVER_HALT_NA, NDMP9_MOVER_HALT_NA },
1994 { NDMP3_MOVER_HALT_CONNECT_CLOSED, NDMP9_MOVER_HALT_CONNECT_CLOSED },
1995 { NDMP3_MOVER_HALT_ABORTED, NDMP9_MOVER_HALT_ABORTED },
1996 { NDMP3_MOVER_HALT_INTERNAL_ERROR, NDMP9_MOVER_HALT_INTERNAL_ERROR },
1997 { NDMP3_MOVER_HALT_CONNECT_ERROR, NDMP9_MOVER_HALT_CONNECT_ERROR },
1998 END_ENUM_CONVERSION_TABLE
2003 ndmp_3to9_mover_get_state_reply (
2004 ndmp3_mover_get_state_reply *reply3,
2005 ndmp9_mover_get_state_reply *reply9)
2007 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
2008 CNVT_E_TO_9 (reply3, reply9, state, ndmp_39_mover_state);
2009 CNVT_E_TO_9 (reply3, reply9, pause_reason, ndmp_39_mover_pause_reason);
2010 CNVT_E_TO_9 (reply3, reply9, halt_reason, ndmp_39_mover_halt_reason);
2012 CNVT_TO_9 (reply3, reply9, record_size);
2013 CNVT_TO_9 (reply3, reply9, record_num);
2014 CNVT_TO_9x (reply3, reply9, data_written, bytes_moved);
2015 CNVT_TO_9 (reply3, reply9, seek_position);
2016 CNVT_TO_9 (reply3, reply9, bytes_left_to_read);
2017 CNVT_TO_9 (reply3, reply9, window_offset);
2018 CNVT_TO_9 (reply3, reply9, window_length);
2020 ndmp_3to9_addr (&reply3->data_connection_addr,
2021 &reply9->data_connection_addr);
2027 ndmp_9to3_mover_get_state_reply (
2028 ndmp9_mover_get_state_reply *reply9,
2029 ndmp3_mover_get_state_reply *reply3)
2031 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
2032 CNVT_E_FROM_9 (reply3, reply9, state, ndmp_39_mover_state);
2033 CNVT_E_FROM_9 (reply3, reply9, pause_reason,
2034 ndmp_39_mover_pause_reason);
2035 CNVT_E_FROM_9 (reply3, reply9, halt_reason,
2036 ndmp_39_mover_halt_reason);
2038 CNVT_FROM_9 (reply3, reply9, record_size);
2039 CNVT_FROM_9 (reply3, reply9, record_num);
2040 CNVT_FROM_9x (reply3, reply9, data_written, bytes_moved);
2041 CNVT_FROM_9 (reply3, reply9, seek_position);
2042 CNVT_FROM_9 (reply3, reply9, bytes_left_to_read);
2043 CNVT_FROM_9 (reply3, reply9, window_offset);
2044 CNVT_FROM_9 (reply3, reply9, window_length);
2046 ndmp_9to3_addr (&reply9->data_connection_addr,
2047 &reply3->data_connection_addr);
2058 ndmp_3to9_mover_listen_request (
2059 ndmp3_mover_listen_request *request3,
2060 ndmp9_mover_listen_request *request9)
2064 rc = CNVT_E_TO_9 (request3, request9, mode, ndmp_39_mover_mode);
2065 if (rc == NDMP_INVALID_GENERAL) {
2066 CNVT_TO_9 (request3, request9, mode);
2068 rc = CNVT_E_TO_9 (request3, request9, addr_type, ndmp_39_addr_type);
2069 if (rc == NDMP_INVALID_GENERAL) {
2070 CNVT_TO_9 (request3, request9, addr_type);
2077 ndmp_9to3_mover_listen_request (
2078 ndmp9_mover_listen_request *request9,
2079 ndmp3_mover_listen_request *request3)
2083 rc = CNVT_E_FROM_9 (request3, request9, mode, ndmp_39_mover_mode);
2084 if (rc == NDMP_INVALID_GENERAL) {
2085 CNVT_FROM_9 (request3, request9, mode);
2087 rc = CNVT_E_FROM_9 (request3, request9, addr_type, ndmp_39_addr_type);
2088 if (rc == NDMP_INVALID_GENERAL) {
2089 CNVT_FROM_9 (request3, request9, addr_type);
2096 ndmp_3to9_mover_listen_reply (
2097 ndmp3_mover_listen_reply *reply3,
2098 ndmp9_mover_listen_reply *reply9)
2102 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
2104 n_error += ndmp_3to9_addr (&reply3->data_connection_addr,
2105 &reply9->data_connection_addr);
2111 ndmp_9to3_mover_listen_reply (
2112 ndmp9_mover_listen_reply *reply9,
2113 ndmp3_mover_listen_reply *reply3)
2117 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
2119 n_error += ndmp_9to3_addr (&reply9->data_connection_addr,
2120 &reply3->data_connection_addr);
2126 * ndmp_mover_connect
2131 ndmp_3to9_mover_connect_request (
2132 ndmp3_mover_connect_request *request3,
2133 ndmp9_mover_connect_request *request9)
2137 rc = CNVT_E_TO_9 (request3, request9, mode, ndmp_39_mover_mode);
2138 if (rc == NDMP_INVALID_GENERAL) {
2139 CNVT_TO_9 (request3, request9, mode);
2141 return ndmp_3to9_addr (&request3->addr, &request9->addr);
2145 ndmp_9to3_mover_connect_request (
2146 ndmp9_mover_connect_request *request9,
2147 ndmp3_mover_connect_request *request3)
2151 rc = CNVT_E_FROM_9 (request3, request9, mode, ndmp_39_mover_mode);
2152 if (rc == NDMP_INVALID_GENERAL) {
2153 CNVT_FROM_9 (request3, request9, mode);
2155 return ndmp_9to3_addr (&request9->addr, &request3->addr);
2161 * ndmp_mover_continue
2162 * no arg request, just error reply
2167 * no args request, just error reply
2172 * no args request, just error reply
2177 * ndmp_mover_set_window
2182 ndmp_3to9_mover_set_window_request (
2183 ndmp3_mover_set_window_request *request3,
2184 ndmp9_mover_set_window_request *request9)
2186 CNVT_TO_9 (request3, request9, offset);
2187 CNVT_TO_9 (request3, request9, length);
2192 ndmp_9to3_mover_set_window_request (
2193 ndmp9_mover_set_window_request *request9,
2194 ndmp3_mover_set_window_request *request3)
2196 CNVT_FROM_9 (request3, request9, offset);
2197 CNVT_FROM_9 (request3, request9, length);
2208 ndmp_3to9_mover_read_request (
2209 ndmp3_mover_read_request *request3,
2210 ndmp9_mover_read_request *request9)
2212 CNVT_TO_9 (request3, request9, offset);
2213 CNVT_TO_9 (request3, request9, length);
2218 ndmp_9to3_mover_read_request (
2219 ndmp9_mover_read_request *request9,
2220 ndmp3_mover_read_request *request3)
2222 CNVT_FROM_9 (request3, request9, offset);
2223 CNVT_FROM_9 (request3, request9, length);
2229 * no args request, just error reply
2233 * ndmp_mover_set_record_size
2238 ndmp_3to9_mover_set_record_size_request (
2239 ndmp3_mover_set_record_size_request *request3,
2240 ndmp9_mover_set_record_size_request *request9)
2242 CNVT_TO_9x (request3, request9, len, record_size);
2247 ndmp_9to3_mover_set_record_size_request (
2248 ndmp9_mover_set_record_size_request *request9,
2249 ndmp3_mover_set_record_size_request *request3)
2251 CNVT_FROM_9x (request3, request9, len, record_size);
2258 ****************************************************************
2269 name9->original_path = NDMOS_API_STRDUP(name3->original_path);
2270 strcpy (buf, name3->destination_dir);
2271 if (name3->new_name && *name3->new_name) {
2273 strcat (buf, name3->new_name);
2275 name9->destination_path = NDMOS_API_STRDUP(buf);
2278 /* per the following email's on the NDMP tech mailing on
2279 * Apr. 10 & 11 2000 and Feb. 21, 2001 with matching
2280 * references in the V3.1.3 specification:
2282 * V2 and V4 are close in behavior but V3 does the following:
2284 * If new_name is not NULL then the destination path is
2285 * destination_path = destination_dir PLUS new_name
2287 * destination_path = destination_dir PLUS original_path
2288 * and original_path is missing the trailing component.
2290 if (name3->new_name && *name3->new_name) {
2291 strcpy (buf, name3->original_path);
2294 strcat (buf, name3->new_name);
2295 name9->original_path = NDMOS_API_STRDUP(buf);
2297 name9->original_path = NDMOS_API_STRDUP(name3->original_path);
2300 if (name3->new_name && *name3->new_name) {
2301 strcpy (buf, name3->destination_dir);
2304 strcat (buf, name3->new_name);
2305 name9->original_path = NDMOS_API_STRDUP(buf);
2307 strcpy (buf, name3->destination_dir);
2310 strcat (buf, name3->original_path);
2312 name9->destination_path = NDMOS_API_STRDUP(buf);
2316 if (name3->fh_info != NDMP_INVALID_U_QUAD) {
2317 name9->fh_info.valid = NDMP9_VALIDITY_VALID;
2318 name9->fh_info.value = name3->fh_info;
2320 name9->fh_info.valid = NDMP9_VALIDITY_INVALID;
2321 name9->fh_info.value = NDMP_INVALID_U_QUAD;
2333 int olen, dlen, offset;
2335 /* see comment in ndmp_3to9_name() above */
2337 if (!strcmp(name9->original_path,".")) {
2339 name3->original_path = NDMOS_API_STRDUP(name9->original_path);
2340 name3->destination_dir = NDMOS_API_STRDUP(name9->destination_path);
2341 name3->new_name = NDMOS_API_STRDUP("");
2343 olen = strlen(name9->original_path);
2344 dlen = strlen(name9->destination_path);
2345 offset = dlen - olen;
2346 if ((olen < dlen) && (!strcmp(name9->original_path,
2347 &name9->destination_path[offset]))) {
2348 /* original path part of destination path */
2349 name3->original_path = NDMOS_API_STRDUP(name9->original_path);
2351 strncat(buf, name9->destination_path, offset);
2352 name3->destination_dir = NDMOS_API_STRDUP(buf);
2353 name3->new_name = NDMOS_API_STRDUP("");
2355 name3->original_path = NDMOS_API_STRDUP(name9->original_path);
2356 name3->destination_dir = NDMOS_API_STRDUP("");
2357 name3->new_name = NDMOS_API_STRDUP(name9->destination_path);
2361 name3->other_name = NDMOS_API_STRDUP (""); /* Yechy */
2364 if (name9->fh_info.valid == NDMP9_VALIDITY_VALID) {
2365 name3->fh_info = name9->fh_info.value;
2367 name3->fh_info = NDMP_INVALID_U_QUAD;
2370 name3->node = NDMP_INVALID_U_QUAD;
2376 ndmp_3to9_name_vec (
2383 for (i = 0; i < n_name; i++)
2384 ndmp_3to9_name (&name3[i], &name9[i]);
2390 ndmp_9to3_name_vec (
2397 for (i = 0; i < n_name; i++)
2398 ndmp_9to3_name (&name9[i], &name3[i]);
2404 ndmp_3to9_name_vec_dup (
2406 ndmp9_name **name9_p,
2409 *name9_p = NDMOS_MACRO_NEWN (ndmp9_name, n_name);
2413 return ndmp_3to9_name_vec (name3, *name9_p, n_name);
2417 ndmp_9to3_name_vec_dup (
2419 ndmp3_name **name3_p,
2422 *name3_p = NDMOS_MACRO_NEWN (ndmp3_name, n_name);
2426 return ndmp_9to3_name_vec (name9, *name3_p, n_name);
2430 * ndmp_data_get_state
2434 struct enum_conversion ndmp_39_data_operation[] = {
2435 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2436 { NDMP3_DATA_OP_NOACTION, NDMP9_DATA_OP_NOACTION },
2437 { NDMP3_DATA_OP_BACKUP, NDMP9_DATA_OP_BACKUP },
2438 { NDMP3_DATA_OP_RESTORE, NDMP9_DATA_OP_RECOVER },
2439 { NDMP3_DATA_OP_RESTORE_FILEHIST, NDMP9_DATA_OP_RECOVER_FILEHIST },
2440 END_ENUM_CONVERSION_TABLE
2443 struct enum_conversion ndmp_39_data_state[] = {
2444 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2445 { NDMP3_DATA_STATE_IDLE, NDMP9_DATA_STATE_IDLE },
2446 { NDMP3_DATA_STATE_ACTIVE, NDMP9_DATA_STATE_ACTIVE },
2447 { NDMP3_DATA_STATE_HALTED, NDMP9_DATA_STATE_HALTED },
2448 { NDMP3_DATA_STATE_CONNECTED, NDMP9_DATA_STATE_CONNECTED },
2449 { NDMP3_DATA_STATE_LISTEN, NDMP9_DATA_STATE_LISTEN },
2451 END_ENUM_CONVERSION_TABLE
2454 struct enum_conversion ndmp_39_data_halt_reason[] = {
2455 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2456 { NDMP3_DATA_HALT_NA, NDMP9_DATA_HALT_NA },
2457 { NDMP3_DATA_HALT_SUCCESSFUL, NDMP9_DATA_HALT_SUCCESSFUL },
2458 { NDMP3_DATA_HALT_ABORTED, NDMP9_DATA_HALT_ABORTED },
2459 { NDMP3_DATA_HALT_INTERNAL_ERROR, NDMP9_DATA_HALT_INTERNAL_ERROR },
2460 { NDMP3_DATA_HALT_CONNECT_ERROR, NDMP9_DATA_HALT_CONNECT_ERROR },
2461 END_ENUM_CONVERSION_TABLE
2465 ndmp_3to9_data_get_state_reply (
2466 ndmp3_data_get_state_reply *reply3,
2467 ndmp9_data_get_state_reply *reply9)
2469 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
2470 CNVT_E_TO_9 (reply3, reply9, operation, ndmp_39_data_operation);
2471 CNVT_E_TO_9 (reply3, reply9, state, ndmp_39_data_state);
2472 CNVT_E_TO_9 (reply3, reply9, halt_reason, ndmp_39_data_halt_reason);
2474 CNVT_TO_9 (reply3, reply9, bytes_processed);
2476 CNVT_VUQ_TO_9 (reply3, reply9, est_bytes_remain);
2477 CNVT_VUL_TO_9 (reply3, reply9, est_time_remain);
2479 ndmp_3to9_addr (&reply3->data_connection_addr,
2480 &reply9->data_connection_addr);
2482 CNVT_TO_9 (reply3, reply9, read_offset);
2483 CNVT_TO_9 (reply3, reply9, read_length);
2489 ndmp_9to3_data_get_state_reply (
2490 ndmp9_data_get_state_reply *reply9,
2491 ndmp3_data_get_state_reply *reply3)
2493 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
2494 CNVT_E_FROM_9 (reply3, reply9, operation, ndmp_39_data_operation);
2495 CNVT_E_FROM_9 (reply3, reply9, state, ndmp_39_data_state);
2496 CNVT_E_FROM_9 (reply3, reply9, halt_reason, ndmp_39_data_halt_reason);
2498 CNVT_FROM_9 (reply3, reply9, bytes_processed);
2500 CNVT_VUQ_FROM_9 (reply3, reply9, est_bytes_remain);
2501 CNVT_VUL_FROM_9 (reply3, reply9, est_time_remain);
2503 ndmp_9to3_addr (&reply9->data_connection_addr,
2504 &reply3->data_connection_addr);
2506 CNVT_FROM_9 (reply3, reply9, read_offset);
2507 CNVT_FROM_9 (reply3, reply9, read_length);
2514 * ndmp_data_start_backup
2519 ndmp_3to9_data_start_backup_request (
2520 ndmp3_data_start_backup_request *request3,
2521 ndmp9_data_start_backup_request *request9)
2525 CNVT_STRDUP_TO_9 (request3, request9, bu_type);
2527 ndmp_3to9_pval_vec_dup (request3->env.env_val,
2528 &request9->env.env_val,
2529 request3->env.env_len);
2531 request9->env.env_len = request3->env.env_len;
2533 request9->addr.addr_type = NDMP9_ADDR_AS_CONNECTED;
2539 ndmp_9to3_data_start_backup_request (
2540 ndmp9_data_start_backup_request *request9,
2541 ndmp3_data_start_backup_request *request3)
2545 CNVT_STRDUP_FROM_9 (request3, request9, bu_type);
2547 ndmp_9to3_pval_vec_dup (request9->env.env_val,
2548 &request3->env.env_val,
2549 request9->env.env_len);
2551 request3->env.env_len = request9->env.env_len;
2558 * ndmp_data_start_recover
2559 * ndmp_data_start_recover_filehist
2564 ndmp_3to9_data_start_recover_request (
2565 ndmp3_data_start_recover_request *request3,
2566 ndmp9_data_start_recover_request *request9)
2570 CNVT_STRDUP_TO_9 (request3, request9, bu_type);
2572 ndmp_3to9_pval_vec_dup (request3->env.env_val,
2573 &request9->env.env_val,
2574 request3->env.env_len);
2576 request9->env.env_len = request3->env.env_len;
2578 ndmp_3to9_name_vec_dup (request3->nlist.nlist_val,
2579 &request9->nlist.nlist_val,
2580 request3->nlist.nlist_len);
2582 request9->nlist.nlist_len = request3->nlist.nlist_len;
2584 request9->addr.addr_type = NDMP9_ADDR_AS_CONNECTED;
2590 ndmp_9to3_data_start_recover_request (
2591 ndmp9_data_start_recover_request *request9,
2592 ndmp3_data_start_recover_request *request3)
2596 CNVT_STRDUP_FROM_9 (request3, request9, bu_type);
2598 ndmp_9to3_pval_vec_dup (request9->env.env_val,
2599 &request3->env.env_val,
2600 request9->env.env_len);
2602 request3->env.env_len = request9->env.env_len;
2604 ndmp_9to3_name_vec_dup (request9->nlist.nlist_val,
2605 &request3->nlist.nlist_val,
2606 request9->nlist.nlist_len);
2608 request3->nlist.nlist_len = request9->nlist.nlist_len;
2617 * no args request, just error reply
2626 ndmp_3to9_data_get_env_reply (
2627 ndmp3_data_get_env_reply *reply3,
2628 ndmp9_data_get_env_reply *reply9)
2630 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
2632 ndmp_3to9_pval_vec_dup (reply3->env.env_val,
2633 &reply9->env.env_val,
2634 reply3->env.env_len);
2636 reply9->env.env_len = reply3->env.env_len;
2642 ndmp_9to3_data_get_env_reply (
2643 ndmp9_data_get_env_reply *reply9,
2644 ndmp3_data_get_env_reply *reply3)
2646 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
2648 ndmp_9to3_pval_vec_dup (reply9->env.env_val,
2649 &reply3->env.env_val,
2650 reply9->env.env_len);
2652 reply3->env.env_len = reply9->env.env_len;
2660 * no args request, just error reply
2668 ndmp_3to9_data_listen_request (
2669 ndmp3_data_listen_request *request3,
2670 ndmp9_data_listen_request *request9)
2674 rc = CNVT_E_TO_9 (request3, request9, addr_type, ndmp_39_addr_type);
2675 if (rc == NDMP_INVALID_GENERAL) {
2676 CNVT_TO_9 (request3, request9, addr_type);
2683 ndmp_9to3_data_listen_request (
2684 ndmp9_data_listen_request *request9,
2685 ndmp3_data_listen_request *request3)
2689 rc = CNVT_E_FROM_9 (request3, request9, addr_type, ndmp_39_addr_type);
2690 if (rc == NDMP_INVALID_GENERAL) {
2691 CNVT_FROM_9 (request3, request9, addr_type);
2698 ndmp_3to9_data_listen_reply (
2699 ndmp3_data_listen_reply *reply3,
2700 ndmp9_data_listen_reply *reply9)
2704 CNVT_E_TO_9 (reply3, reply9, error, ndmp_39_error);
2706 n_error += ndmp_3to9_addr (&reply3->data_connection_addr,
2707 &reply9->data_connection_addr);
2713 ndmp_9to3_data_listen_reply (
2714 ndmp9_data_listen_reply *reply9,
2715 ndmp3_data_listen_reply *reply3)
2719 CNVT_E_FROM_9 (reply3, reply9, error, ndmp_39_error);
2721 n_error += ndmp_9to3_addr (&reply9->data_connection_addr,
2722 &reply3->data_connection_addr);
2734 ndmp_3to9_data_connect_request (
2735 ndmp3_data_connect_request *request3,
2736 ndmp9_data_connect_request *request9)
2738 return ndmp_3to9_addr (&request3->addr, &request9->addr);
2742 ndmp_9to3_data_connect_request (
2743 ndmp9_data_connect_request *request9,
2744 ndmp3_data_connect_request *request3)
2746 return ndmp_9to3_addr (&request9->addr, &request3->addr);
2754 ****************************************************************
2758 * ndmp_notify_data_halted
2763 ndmp_3to9_notify_data_halted_request (
2764 ndmp3_notify_data_halted_request *request3,
2765 ndmp9_notify_data_halted_request *request9)
2770 rc = CNVT_E_TO_9 (request3, request9, reason,
2771 ndmp_39_data_halt_reason);
2772 if (rc == NDMP_INVALID_GENERAL) {
2773 CNVT_TO_9 (request3, request9, reason);
2781 ndmp_9to3_notify_data_halted_request (
2782 ndmp9_notify_data_halted_request *request9,
2783 ndmp3_notify_data_halted_request *request3)
2788 rc = CNVT_E_FROM_9 (request3, request9, reason,
2789 ndmp_39_data_halt_reason);
2790 if (rc == NDMP_INVALID_GENERAL) {
2791 CNVT_FROM_9 (request3, request9, reason);
2795 request3->text_reason = NDMOS_API_STRDUP("whatever");
2802 * ndmp_notify_connected
2806 /* NDMP3_NOTIFY_CONNECTED */
2807 struct enum_conversion ndmp_39_connect_reason[] = {
2808 { NDMP_INVALID_GENERAL, NDMP_INVALID_GENERAL, }, /* default */
2809 { NDMP3_CONNECTED, NDMP9_CONNECTED },
2810 { NDMP3_SHUTDOWN, NDMP9_SHUTDOWN },
2811 { NDMP3_REFUSED, NDMP9_REFUSED },
2812 END_ENUM_CONVERSION_TABLE
2816 ndmp_3to9_notify_connected_request (
2817 ndmp3_notify_connected_request *request3,
2818 ndmp9_notify_connected_request *request9)
2823 rc = CNVT_E_TO_9 (request3, request9, reason, ndmp_39_connect_reason);
2824 if (rc == NDMP_INVALID_GENERAL) {
2825 CNVT_TO_9 (request3, request9, reason);
2829 CNVT_TO_9 (request3, request9, protocol_version);
2831 CNVT_STRDUP_TO_9 (request3, request9, text_reason);
2837 ndmp_9to3_notify_connected_request (
2838 ndmp9_notify_connected_request *request9,
2839 ndmp3_notify_connected_request *request3)
2844 rc = CNVT_E_FROM_9(request3, request9, reason, ndmp_39_connect_reason);
2845 if (rc == NDMP_INVALID_GENERAL) {
2846 CNVT_FROM_9 (request3, request9, reason);
2850 CNVT_FROM_9 (request3, request9, protocol_version);
2852 CNVT_STRDUP_FROM_9 (request3, request9, text_reason);
2859 * ndmp_notify_mover_halted
2864 ndmp_3to9_notify_mover_halted_request (
2865 ndmp3_notify_mover_halted_request *request3,
2866 ndmp9_notify_mover_halted_request *request9)
2871 rc = CNVT_E_TO_9 (request3, request9, reason,
2872 ndmp_39_mover_halt_reason);
2873 if (rc == NDMP_INVALID_GENERAL) {
2874 CNVT_TO_9 (request3, request9, reason);
2882 ndmp_9to3_notify_mover_halted_request (
2883 ndmp9_notify_mover_halted_request *request9,
2884 ndmp3_notify_mover_halted_request *request3)
2889 rc = CNVT_E_FROM_9 (request3, request9, reason,
2890 ndmp_39_mover_halt_reason);
2891 if (rc == NDMP_INVALID_GENERAL) {
2892 CNVT_FROM_9 (request3, request9, reason);
2896 request3->text_reason = NDMOS_API_STRDUP ("Whatever");
2903 * ndmp_notify_mover_paused
2908 ndmp_3to9_notify_mover_paused_request (
2909 ndmp3_notify_mover_paused_request *request3,
2910 ndmp9_notify_mover_paused_request *request9)
2915 rc = CNVT_E_TO_9 (request3, request9, reason,
2916 ndmp_39_mover_pause_reason);
2917 if (rc == NDMP_INVALID_GENERAL) {
2918 CNVT_TO_9 (request3, request9, reason);
2922 CNVT_TO_9 (request3, request9, seek_position);
2928 ndmp_9to3_notify_mover_paused_request (
2929 ndmp9_notify_mover_paused_request *request9,
2930 ndmp3_notify_mover_paused_request *request3)
2935 rc = CNVT_E_FROM_9 (request3, request9, reason,
2936 ndmp_39_mover_pause_reason);
2937 if (rc == NDMP_INVALID_GENERAL) {
2938 CNVT_FROM_9 (request3, request9, reason);
2942 CNVT_FROM_9 (request3, request9, seek_position);
2949 * ndmp_notify_data_read
2954 ndmp_3to9_notify_data_read_request (
2955 ndmp3_notify_data_read_request *request3,
2956 ndmp9_notify_data_read_request *request9)
2958 CNVT_TO_9 (request3, request9, offset);
2959 CNVT_TO_9 (request3, request9, length);
2964 ndmp_9to3_notify_data_read_request (
2965 ndmp9_notify_data_read_request *request9,
2966 ndmp3_notify_data_read_request *request3)
2968 CNVT_FROM_9 (request3, request9, offset);
2969 CNVT_FROM_9 (request3, request9, length);
2977 * LOGGING INTERFACES
2978 ****************************************************************
2981 struct enum_conversion ndmp_39_recovery_status[] = {
2982 { NDMP3_UNDEFINED_ERR,
2983 NDMP9_RECOVERY_FAILED_UNDEFINED_ERROR }, /* default */
2985 NDMP9_RECOVERY_SUCCESSFUL },
2986 { NDMP3_PERMISSION_ERR,
2987 NDMP9_RECOVERY_FAILED_PERMISSION },
2988 { NDMP3_FILE_NOT_FOUND_ERR,
2989 NDMP9_RECOVERY_FAILED_NOT_FOUND },
2990 { NDMP3_BAD_FILE_ERR,
2991 NDMP9_RECOVERY_FAILED_NO_DIRECTORY },
2993 NDMP9_RECOVERY_FAILED_OUT_OF_MEMORY },
2995 NDMP9_RECOVERY_FAILED_IO_ERROR },
2996 { NDMP3_UNDEFINED_ERR,
2997 NDMP9_RECOVERY_FAILED_UNDEFINED_ERROR },
2998 END_ENUM_CONVERSION_TABLE
3003 ndmp_3to9_log_file_request (
3004 ndmp3_log_file_request *request3,
3005 ndmp9_log_file_request *request9)
3007 request9->recovery_status =
3008 convert_enum_to_9 (ndmp_39_recovery_status, request3->error);
3009 CNVT_STRDUP_TO_9 (request3, request9, name);
3014 ndmp_9to3_log_file_request (
3015 ndmp9_log_file_request *request9,
3016 ndmp3_log_file_request *request3)
3018 request3->error = convert_enum_from_9 (ndmp_39_recovery_status,
3019 request9->recovery_status);
3020 CNVT_STRDUP_FROM_9 (request3, request9, name);
3029 struct enum_conversion ndmp_39_log_type[] = {
3030 { NDMP3_LOG_NORMAL, NDMP_INVALID_GENERAL, }, /* default */
3031 { NDMP3_LOG_NORMAL, NDMP9_LOG_NORMAL },
3032 { NDMP3_LOG_DEBUG, NDMP9_LOG_DEBUG },
3033 { NDMP3_LOG_ERROR, NDMP9_LOG_ERROR },
3034 { NDMP3_LOG_WARNING, NDMP9_LOG_WARNING },
3035 END_ENUM_CONVERSION_TABLE
3041 ndmp_3to9_log_message_request (
3042 ndmp3_log_message_request *request3,
3043 ndmp9_log_message_request *request9)
3045 CNVT_E_TO_9 (request3, request9, log_type, ndmp_39_log_type);
3046 CNVT_TO_9 (request3, request9, message_id);
3047 CNVT_STRDUP_TO_9 (request3, request9, entry);
3049 request9->associated_message_sequence.valid = NDMP9_VALIDITY_INVALID;
3050 request9->associated_message_sequence.value = NDMP9_INVALID_U_LONG;
3056 ndmp_9to3_log_message_request (
3057 ndmp9_log_message_request *request9,
3058 ndmp3_log_message_request *request3)
3060 CNVT_E_FROM_9 (request3, request9, log_type, ndmp_39_log_type);
3061 CNVT_FROM_9 (request3, request9, message_id);
3062 CNVT_STRDUP_TO_9 (request3, request9, entry);
3071 * FILE HISTORY INTERFACES
3072 ****************************************************************
3077 * ndmp[_unix]_file_stat
3080 struct enum_conversion ndmp_39_file_type[] = {
3081 { NDMP3_FILE_OTHER, NDMP_INVALID_GENERAL, }, /* default */
3082 { NDMP3_FILE_DIR, NDMP9_FILE_DIR },
3083 { NDMP3_FILE_FIFO, NDMP9_FILE_FIFO },
3084 { NDMP3_FILE_CSPEC, NDMP9_FILE_CSPEC },
3085 { NDMP3_FILE_BSPEC, NDMP9_FILE_BSPEC },
3086 { NDMP3_FILE_REG, NDMP9_FILE_REG },
3087 { NDMP3_FILE_SLINK, NDMP9_FILE_SLINK },
3088 { NDMP3_FILE_SOCK, NDMP9_FILE_SOCK },
3089 { NDMP3_FILE_REGISTRY, NDMP9_FILE_REGISTRY },
3090 { NDMP3_FILE_OTHER, NDMP9_FILE_OTHER },
3091 END_ENUM_CONVERSION_TABLE
3095 ndmp_3to9_file_stat (
3096 ndmp3_file_stat *fstat3,
3097 ndmp9_file_stat *fstat9,
3099 ndmp9_u_quad fh_info)
3101 CNVT_E_TO_9 (fstat3, fstat9, ftype, ndmp_39_file_type);
3103 CNVT_VUL_TO_9 (fstat3, fstat9, mtime);
3104 CNVT_VUL_TO_9 (fstat3, fstat9, atime);
3105 CNVT_VUL_TO_9 (fstat3, fstat9, ctime);
3106 CNVT_VUL_TO_9x (fstat3, fstat9, owner, uid);
3107 CNVT_VUL_TO_9x (fstat3, fstat9, group, gid);
3109 CNVT_VUL_TO_9x (fstat3, fstat9, fattr, mode);
3111 CNVT_VUQ_TO_9 (fstat3, fstat9, size);
3113 CNVT_VUL_TO_9 (fstat3, fstat9, links);
3115 convert_valid_u_quad_to_9 (&node, &fstat9->node);
3116 convert_valid_u_quad_to_9 (&fh_info, &fstat9->fh_info);
3118 if (fstat3->invalid & NDMP3_FILE_STAT_ATIME_INVALID)
3119 CNVT_IUL_TO_9 (fstat9, atime);
3121 if (fstat3->invalid & NDMP3_FILE_STAT_CTIME_INVALID)
3122 CNVT_IUL_TO_9 (fstat9, ctime);
3124 if (fstat3->invalid & NDMP3_FILE_STAT_GROUP_INVALID)
3125 CNVT_IUL_TO_9 (fstat9, gid);
3131 ndmp_9to3_file_stat (
3132 ndmp9_file_stat *fstat9,
3133 ndmp3_file_stat *fstat3)
3135 CNVT_E_FROM_9 (fstat3, fstat9, ftype, ndmp_39_file_type);
3137 fstat3->fs_type = NDMP3_FS_UNIX;
3139 CNVT_VUL_FROM_9 (fstat3, fstat9, mtime);
3140 CNVT_VUL_FROM_9 (fstat3, fstat9, atime);
3141 CNVT_VUL_FROM_9 (fstat3, fstat9, ctime);
3142 CNVT_VUL_FROM_9x (fstat3, fstat9, owner, uid);
3143 CNVT_VUL_FROM_9x (fstat3, fstat9, group, gid);
3145 CNVT_VUL_FROM_9x (fstat3, fstat9, fattr, mode);
3147 CNVT_VUQ_FROM_9 (fstat3, fstat9, size);
3149 CNVT_VUL_FROM_9 (fstat3, fstat9, links);
3151 fstat3->invalid = 0;
3153 if (!fstat9->atime.valid)
3154 fstat3->invalid |= NDMP3_FILE_STAT_ATIME_INVALID;
3156 if (!fstat9->ctime.valid)
3157 fstat3->invalid |= NDMP3_FILE_STAT_CTIME_INVALID;
3159 if (!fstat9->gid.valid)
3160 fstat3->invalid |= NDMP3_FILE_STAT_GROUP_INVALID;
3162 /* fh_info ignored */
3170 * ndmp_fh_add_file_request
3174 ndmp_3to9_fh_add_file_request (
3175 ndmp3_fh_add_file_request *request3,
3176 ndmp9_fh_add_file_request *request9)
3178 int n_ent = request3->files.files_len;
3183 table = NDMOS_MACRO_NEWN(ndmp9_file, n_ent);
3187 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3189 for (i = 0; i < n_ent; i++) {
3190 ndmp3_file * ent3 = &request3->files.files_val[i];
3191 ndmp3_file_name * file_name;
3192 ndmp3_file_stat * file_stat = 0;
3193 ndmp3_file_stat _file_stat;
3195 ndmp9_file * ent9 = &table[i];
3197 filename = "no-unix-name";
3198 for (j = 0; j < ent3->names.names_len; j++) {
3199 file_name = &ent3->names.names_val[j];
3200 if (file_name->fs_type == NDMP3_FS_UNIX) {
3202 file_name->ndmp3_file_name_u.unix_name;
3206 for (j = 0; j < ent3->stats.stats_len; j++) {
3207 file_stat = &ent3->stats.stats_val[j];
3208 if (file_stat->fs_type == NDMP3_FS_UNIX) {
3212 if (j >= ent3->stats.stats_len) {
3213 file_stat = &_file_stat;
3214 NDMOS_MACRO_ZEROFILL (file_stat);
3217 ent9->unix_path = NDMOS_API_STRDUP(filename);
3218 ndmp_3to9_file_stat (file_stat, &ent9->fstat,
3219 ent3->node, ent3->fh_info);
3222 request9->files.files_len = n_ent;
3223 request9->files.files_val = table;
3229 ndmp_9to3_fh_add_file_request (
3230 ndmp9_fh_add_file_request *request9,
3231 ndmp3_fh_add_file_request *request3)
3233 int n_ent = request9->files.files_len;
3237 table = NDMOS_MACRO_NEWN(ndmp3_file, n_ent);
3241 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3243 for (i = 0; i < n_ent; i++) {
3244 ndmp9_file * ent9 = &request9->files.files_val[i];
3245 ndmp3_file * ent3 = &table[i];
3247 ent3->names.names_val = NDMOS_MACRO_NEW(ndmp3_file_name);
3248 ent3->names.names_len = 1;
3249 ent3->stats.stats_val = NDMOS_MACRO_NEW(ndmp3_file_stat);
3250 ent3->stats.stats_len = 1;
3252 ent3->names.names_val[0].fs_type = NDMP3_FS_UNIX;
3253 ent3->names.names_val[0].ndmp3_file_name_u.unix_name =
3254 NDMOS_API_STRDUP(ent9->unix_path);
3256 ndmp_9to3_file_stat (&ent9->fstat,
3257 &ent3->stats.stats_val[0]);
3258 ent3->node = ent9->fstat.node.value;
3259 ent3->fh_info = ent9->fstat.fh_info.value;
3262 request3->files.files_len = n_ent;
3263 request3->files.files_val = table;
3270 * ndmp_fh_add_unix_dir
3274 ndmp_3to9_fh_add_dir_request (
3275 ndmp3_fh_add_dir_request *request3,
3276 ndmp9_fh_add_dir_request *request9)
3278 int n_ent = request3->dirs.dirs_len;
3283 table = NDMOS_MACRO_NEWN(ndmp9_dir, n_ent);
3287 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3289 for (i = 0; i < n_ent; i++) {
3290 ndmp3_dir * ent3 = &request3->dirs.dirs_val[i];
3291 ndmp3_file_name * file_name;
3293 ndmp9_dir * ent9 = &table[i];
3295 filename = "no-unix-name";
3296 for (j = 0; j < ent3->names.names_len; j++) {
3297 file_name = &ent3->names.names_val[j];
3298 if (file_name->fs_type == NDMP3_FS_UNIX) {
3300 file_name->ndmp3_file_name_u.unix_name;
3305 ent9->unix_name = NDMOS_API_STRDUP(filename);
3306 ent9->node = ent3->node;
3307 ent9->parent = ent3->parent;
3310 request9->dirs.dirs_len = n_ent;
3311 request9->dirs.dirs_val = table;
3317 ndmp_3to9_fh_add_dir_free_request (ndmp9_fh_add_dir_request *request9)
3322 if(request9->dirs.dirs_val) {
3323 int n_ent = request9->dirs.dirs_len;
3325 for (i = 0; i < n_ent; i++) {
3326 ndmp9_dir *ent9 = &request9->dirs.dirs_val[i];
3327 if (ent9->unix_name)
3328 NDMOS_API_FREE(ent9->unix_name);
3329 ent9->unix_name = 0;
3332 NDMOS_API_FREE(request9->dirs.dirs_val);
3334 request9->dirs.dirs_val = 0;
3340 ndmp_9to3_fh_add_dir_request (
3341 ndmp9_fh_add_dir_request *request9,
3342 ndmp3_fh_add_dir_request *request3)
3344 int n_ent = request9->dirs.dirs_len;
3348 table = NDMOS_MACRO_NEWN(ndmp3_dir, n_ent);
3352 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3354 for (i = 0; i < n_ent; i++) {
3355 ndmp9_dir * ent9 = &request9->dirs.dirs_val[i];
3356 ndmp3_dir * ent3 = &table[i];
3358 ent3->names.names_val = NDMOS_MACRO_NEW(ndmp3_file_name);
3359 ent3->names.names_len = 1;
3361 ent3->names.names_val[0].fs_type = NDMP3_FS_UNIX;
3362 ent3->names.names_val[0].ndmp3_file_name_u.unix_name =
3363 NDMOS_API_STRDUP(ent9->unix_name);
3365 ent3->node = ent9->node;
3366 ent3->parent = ent9->parent;
3369 request3->dirs.dirs_len = n_ent;
3370 request3->dirs.dirs_val = table;
3376 ndmp_9to3_fh_add_dir_free_request (ndmp3_fh_add_dir_request *request3)
3381 if(request3->dirs.dirs_val) {
3382 int n_ent = request3->dirs.dirs_len;
3384 for (i = 0; i < n_ent; i++) {
3385 ndmp3_dir *ent3 = &request3->dirs.dirs_val[i];
3386 if (ent3->names.names_val) {
3387 if (ent3->names.names_val[0].ndmp3_file_name_u.unix_name)
3388 NDMOS_API_FREE(ent3->names.names_val[0].ndmp3_file_name_u.unix_name);
3389 ent3->names.names_val[0].ndmp3_file_name_u.unix_name = 0;
3391 NDMOS_API_FREE(ent3->names.names_val);
3393 ent3->names.names_val = 0;
3396 NDMOS_API_FREE(request3->dirs.dirs_val);
3398 request3->dirs.dirs_val = 0;
3406 * ndmp_fh_add_node_request
3410 ndmp_3to9_fh_add_node_request (
3411 ndmp3_fh_add_node_request *request3,
3412 ndmp9_fh_add_node_request *request9)
3414 int n_ent = request3->nodes.nodes_len;
3419 table = NDMOS_MACRO_NEWN(ndmp9_node, n_ent);
3423 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3425 for (i = 0; i < n_ent; i++) {
3426 ndmp3_node * ent3 = &request3->nodes.nodes_val[i];
3427 ndmp3_file_stat * file_stat = 0;
3428 ndmp3_file_stat _file_stat;
3429 ndmp9_node * ent9 = &table[i];
3431 for (j = 0; j < ent3->stats.stats_len; j++) {
3432 file_stat = &ent3->stats.stats_val[j];
3433 if (file_stat->fs_type == NDMP3_FS_UNIX) {
3437 if (j >= ent3->stats.stats_len) {
3438 file_stat = &_file_stat;
3439 NDMOS_MACRO_ZEROFILL (file_stat);
3442 ndmp_3to9_file_stat (file_stat, &ent9->fstat,
3443 ent3->node, ent3->fh_info);
3446 request9->nodes.nodes_len = n_ent;
3447 request9->nodes.nodes_val = table;
3453 ndmp_3to9_fh_add_node_free_request (ndmp9_fh_add_node_request *request9)
3456 if(request9->nodes.nodes_val) {
3457 NDMOS_API_FREE(request9->nodes.nodes_val);
3459 request9->nodes.nodes_val = 0;
3466 ndmp_9to3_fh_add_node_request (
3467 ndmp9_fh_add_node_request *request9,
3468 ndmp3_fh_add_node_request *request3)
3470 int n_ent = request9->nodes.nodes_len;
3474 table = NDMOS_MACRO_NEWN(ndmp3_node, n_ent);
3478 NDMOS_API_BZERO (table, sizeof *table * n_ent);
3480 for (i = 0; i < n_ent; i++) {
3481 ndmp9_node * ent9 = &request9->nodes.nodes_val[i];
3482 ndmp3_node * ent3 = &table[i];
3484 ent3->stats.stats_val = NDMOS_MACRO_NEW(ndmp3_file_stat);
3485 ent3->stats.stats_len = 1;
3487 ndmp_9to3_file_stat (&ent9->fstat,
3488 &ent3->stats.stats_val[0]);
3489 ent3->node = ent9->fstat.node.value;
3490 ent3->fh_info = ent9->fstat.fh_info.value;
3493 request3->nodes.nodes_len = n_ent;
3494 request3->nodes.nodes_val = table;
3500 ndmp_9to3_fh_add_node_free_request (ndmp3_fh_add_node_request *request3)
3503 if(request3->nodes.nodes_val) {
3504 NDMOS_API_FREE(request3->nodes.nodes_val);
3506 request3->nodes.nodes_val = 0;
3514 * request/reply translation
3517 #define NO_ARG_REQUEST \
3518 ndmp_xtox_no_arguments, ndmp_xtox_no_arguments
3520 #define JUST_ERROR_REPLY \
3521 ndmp_3to9_error, ndmp_9to3_error
3523 #define NO_ARG_REQUEST_JUST_ERROR_REPLY \
3524 NO_ARG_REQUEST, JUST_ERROR_REPLY
3526 #define NO_MEMUSED_REQUEST \
3527 ndmp_xtox_no_memused, ndmp_xtox_no_memused
3529 #define NO_MEMUSED_REPLY \
3530 ndmp_xtox_no_memused, ndmp_xtox_no_memused
3532 #define NO_MEMUSED \
3533 ndmp_xtox_no_memused, ndmp_xtox_no_memused, ndmp_xtox_no_memused, ndmp_xtox_no_memused
3539 struct reqrep_xlate ndmp3_reqrep_xlate_table[] = {
3541 NDMP3_CONNECT_OPEN, NDMP9_CONNECT_OPEN,
3542 ndmp_3to9_connect_open_request,
3543 ndmp_9to3_connect_open_request,
3545 NO_MEMUSED /* no memory free routines written yet */
3548 NDMP3_CONNECT_CLIENT_AUTH, NDMP9_CONNECT_CLIENT_AUTH,
3549 ndmp_3to9_connect_client_auth_request,
3550 ndmp_9to3_connect_client_auth_request,
3552 NO_MEMUSED /* no memory free routines written yet */
3555 NDMP3_CONNECT_CLOSE, NDMP9_CONNECT_CLOSE,
3556 NO_ARG_REQUEST_JUST_ERROR_REPLY, /* actually no reply */
3557 NO_MEMUSED /* no memory free routines written yet */
3561 NDMP3_CONNECT_SERVER_AUTH, NDMP9_CONNECT_SERVER_AUTH,
3562 ndmp_3to9_connect_server_auth_request,
3563 ndmp_9to3_connect_server_auth_request,
3564 ndmp_3to9_connect_server_auth_reply,
3565 ndmp_9to3_connect_server_auth_reply,
3566 NO_MEMUSED /* no memory free routines written yet */
3571 NDMP3_CONFIG_GET_HOST_INFO, NDMP9_CONFIG_GET_HOST_INFO,
3573 ndmp_3to9_config_get_host_info_reply,
3574 ndmp_9to3_config_get_host_info_reply,
3575 NO_MEMUSED /* no memory free routines written yet */
3578 NDMP3_CONFIG_GET_CONNECTION_TYPE, NDMP9_CONFIG_GET_CONNECTION_TYPE,
3580 ndmp_3to9_config_get_connection_type_reply,
3581 ndmp_9to3_config_get_connection_type_reply,
3582 NO_MEMUSED /* no memory free routines written yet */
3585 NDMP3_CONFIG_GET_AUTH_ATTR, NDMP9_CONFIG_GET_AUTH_ATTR,
3586 ndmp_3to9_config_get_auth_attr_request,
3587 ndmp_9to3_config_get_auth_attr_request,
3588 ndmp_3to9_config_get_auth_attr_reply,
3589 ndmp_9to3_config_get_auth_attr_reply,
3590 NO_MEMUSED /* no memory free routines written yet */
3593 NDMP3_CONFIG_GET_BUTYPE_INFO, NDMP9_CONFIG_GET_BUTYPE_INFO,
3595 ndmp_3to9_config_get_butype_info_reply,
3596 ndmp_9to3_config_get_butype_info_reply,
3597 NO_MEMUSED /* no memory free routines written yet */
3600 NDMP3_CONFIG_GET_FS_INFO, NDMP9_CONFIG_GET_FS_INFO,
3602 ndmp_3to9_config_get_fs_info_reply,
3603 ndmp_9to3_config_get_fs_info_reply,
3604 NO_MEMUSED /* no memory free routines written yet */
3607 NDMP3_CONFIG_GET_TAPE_INFO, NDMP9_CONFIG_GET_TAPE_INFO,
3609 ndmp_3to9_config_get_tape_info_reply,
3610 ndmp_9to3_config_get_tape_info_reply,
3611 NO_MEMUSED /* no memory free routines written yet */
3614 NDMP3_CONFIG_GET_SCSI_INFO, NDMP9_CONFIG_GET_SCSI_INFO,
3616 ndmp_3to9_config_get_scsi_info_reply,
3617 ndmp_9to3_config_get_scsi_info_reply,
3618 NO_MEMUSED /* no memory free routines written yet */
3621 NDMP3_CONFIG_GET_SERVER_INFO, NDMP9_CONFIG_GET_SERVER_INFO,
3623 ndmp_3to9_config_get_server_info_reply,
3624 ndmp_9to3_config_get_server_info_reply,
3625 NO_MEMUSED /* no memory free routines written yet */
3629 NDMP3_SCSI_OPEN, NDMP9_SCSI_OPEN,
3630 ndmp_3to9_scsi_open_request,
3631 ndmp_9to3_scsi_open_request,
3633 NO_MEMUSED /* no memory free routines written yet */
3636 NDMP3_SCSI_CLOSE, NDMP9_SCSI_CLOSE,
3637 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3638 NO_MEMUSED /* no memory free routines written yet */
3641 NDMP3_SCSI_GET_STATE, NDMP9_SCSI_GET_STATE,
3643 ndmp_3to9_scsi_get_state_reply,
3644 ndmp_9to3_scsi_get_state_reply,
3645 NO_MEMUSED /* no memory free routines written yet */
3648 NDMP3_SCSI_SET_TARGET, NDMP9_SCSI_SET_TARGET,
3649 ndmp_3to9_scsi_set_target_request,
3650 ndmp_9to3_scsi_set_target_request,
3652 NO_MEMUSED /* no memory free routines written yet */
3655 NDMP3_SCSI_RESET_DEVICE, NDMP9_SCSI_RESET_DEVICE,
3656 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3657 NO_MEMUSED /* no memory free routines written yet */
3660 NDMP3_SCSI_RESET_BUS, NDMP9_SCSI_RESET_BUS,
3661 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3662 NO_MEMUSED /* no memory free routines written yet */
3665 NDMP3_SCSI_EXECUTE_CDB, NDMP9_SCSI_EXECUTE_CDB,
3666 ndmp_3to9_execute_cdb_request,
3667 ndmp_9to3_execute_cdb_request,
3668 ndmp_3to9_execute_cdb_reply,
3669 ndmp_9to3_execute_cdb_reply,
3670 NO_MEMUSED /* no memory free routines written yet */
3675 NDMP3_TAPE_OPEN, NDMP9_TAPE_OPEN,
3676 ndmp_3to9_tape_open_request,
3677 ndmp_9to3_tape_open_request,
3679 NO_MEMUSED /* no memory free routines written yet */
3682 NDMP3_TAPE_CLOSE, NDMP9_TAPE_CLOSE,
3683 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3684 NO_MEMUSED /* no memory free routines written yet */
3687 NDMP3_TAPE_GET_STATE, NDMP9_TAPE_GET_STATE,
3689 ndmp_3to9_tape_get_state_reply,
3690 ndmp_9to3_tape_get_state_reply,
3691 NO_MEMUSED /* no memory free routines written yet */
3694 NDMP3_TAPE_MTIO, NDMP9_TAPE_MTIO,
3695 ndmp_3to9_tape_mtio_request,
3696 ndmp_9to3_tape_mtio_request,
3697 ndmp_3to9_tape_mtio_reply,
3698 ndmp_9to3_tape_mtio_reply,
3699 NO_MEMUSED /* no memory free routines written yet */
3702 NDMP3_TAPE_WRITE, NDMP9_TAPE_WRITE,
3703 ndmp_3to9_tape_write_request,
3704 ndmp_9to3_tape_write_request,
3705 ndmp_3to9_tape_write_reply,
3706 ndmp_9to3_tape_write_reply,
3707 NO_MEMUSED /* no memory free routines written yet */
3710 NDMP3_TAPE_READ, NDMP9_TAPE_READ,
3711 ndmp_3to9_tape_read_request,
3712 ndmp_9to3_tape_read_request,
3713 ndmp_3to9_tape_read_reply,
3714 ndmp_9to3_tape_read_reply,
3715 NO_MEMUSED /* no memory free routines written yet */
3718 NDMP3_TAPE_EXECUTE_CDB, NDMP9_TAPE_EXECUTE_CDB,
3719 ndmp_3to9_execute_cdb_request,
3720 ndmp_9to3_execute_cdb_request,
3721 ndmp_3to9_execute_cdb_reply,
3722 ndmp_9to3_execute_cdb_reply,
3723 NO_MEMUSED /* no memory free routines written yet */
3727 NDMP3_DATA_GET_STATE, NDMP9_DATA_GET_STATE,
3729 ndmp_3to9_data_get_state_reply,
3730 ndmp_9to3_data_get_state_reply,
3731 NO_MEMUSED /* no memory free routines written yet */
3734 NDMP3_DATA_START_BACKUP, NDMP9_DATA_START_BACKUP,
3735 ndmp_3to9_data_start_backup_request,
3736 ndmp_9to3_data_start_backup_request,
3738 NO_MEMUSED /* no memory free routines written yet */
3741 NDMP3_DATA_START_RECOVER, NDMP9_DATA_START_RECOVER,
3742 ndmp_3to9_data_start_recover_request,
3743 ndmp_9to3_data_start_recover_request,
3745 NO_MEMUSED /* no memory free routines written yet */
3748 NDMP3_DATA_ABORT, NDMP9_DATA_ABORT,
3749 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3750 NO_MEMUSED /* no memory free routines written yet */
3753 NDMP3_DATA_GET_ENV, NDMP9_DATA_GET_ENV,
3755 ndmp_3to9_data_get_env_reply,
3756 ndmp_9to3_data_get_env_reply,
3757 NO_MEMUSED /* no memory free routines written yet */
3760 NDMP3_DATA_STOP, NDMP9_DATA_STOP,
3761 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3762 NO_MEMUSED /* no memory free routines written yet */
3765 NDMP3_DATA_LISTEN, NDMP9_DATA_LISTEN,
3766 ndmp_3to9_data_listen_request,
3767 ndmp_9to3_data_listen_request,
3768 ndmp_3to9_data_listen_reply,
3769 ndmp_9to3_data_listen_reply,
3770 NO_MEMUSED /* no memory free routines written yet */
3773 NDMP3_DATA_CONNECT, NDMP9_DATA_CONNECT,
3774 ndmp_3to9_data_connect_request,
3775 ndmp_9to3_data_connect_request,
3777 NO_MEMUSED /* no memory free routines written yet */
3780 NDMP3_DATA_START_RECOVER_FILEHIST, NDMP9_DATA_START_RECOVER_FILEHIST,
3781 ndmp_3to9_data_start_recover_request,
3782 ndmp_9to3_data_start_recover_request,
3784 NO_MEMUSED /* no memory free routines written yet */
3788 NDMP3_NOTIFY_DATA_HALTED, NDMP9_NOTIFY_DATA_HALTED,
3789 ndmp_3to9_notify_data_halted_request,
3790 ndmp_9to3_notify_data_halted_request,
3791 JUST_ERROR_REPLY, /* no reply actually */
3792 NO_MEMUSED /* no memory free routines written yet */
3795 NDMP3_NOTIFY_CONNECTED, NDMP9_NOTIFY_CONNECTED,
3796 ndmp_3to9_notify_connected_request,
3797 ndmp_9to3_notify_connected_request,
3798 JUST_ERROR_REPLY, /* no reply actually */
3799 NO_MEMUSED /* no memory free routines written yet */
3802 NDMP3_NOTIFY_MOVER_HALTED, NDMP9_NOTIFY_MOVER_HALTED,
3803 ndmp_3to9_notify_mover_halted_request,
3804 ndmp_9to3_notify_mover_halted_request,
3805 JUST_ERROR_REPLY, /* no reply actually */
3806 NO_MEMUSED /* no memory free routines written yet */
3809 NDMP3_NOTIFY_MOVER_PAUSED, NDMP9_NOTIFY_MOVER_PAUSED,
3810 ndmp_3to9_notify_mover_paused_request,
3811 ndmp_9to3_notify_mover_paused_request,
3812 JUST_ERROR_REPLY, /* no reply actually */
3813 NO_MEMUSED /* no memory free routines written yet */
3816 NDMP3_NOTIFY_DATA_READ, NDMP9_NOTIFY_DATA_READ,
3817 ndmp_3to9_notify_data_read_request,
3818 ndmp_9to3_notify_data_read_request,
3819 JUST_ERROR_REPLY, /* no reply actually */
3820 NO_MEMUSED /* no memory free routines written yet */
3824 NDMP3_LOG_FILE, NDMP9_LOG_FILE,
3825 ndmp_3to9_log_file_request,
3826 ndmp_9to3_log_file_request,
3827 JUST_ERROR_REPLY, /* no reply actually */
3828 NO_MEMUSED /* no memory free routines written yet */
3831 NDMP3_LOG_MESSAGE, NDMP9_LOG_MESSAGE,
3832 ndmp_3to9_log_message_request,
3833 ndmp_9to3_log_message_request,
3834 JUST_ERROR_REPLY, /* no reply actually */
3835 NO_MEMUSED /* no memory free routines written yet */
3839 NDMP3_FH_ADD_FILE, NDMP9_FH_ADD_FILE,
3840 ndmp_3to9_fh_add_file_request,
3841 ndmp_9to3_fh_add_file_request,
3842 JUST_ERROR_REPLY, /* no reply actually */
3843 NO_MEMUSED /* no memory free routines written yet */
3846 NDMP3_FH_ADD_DIR, NDMP9_FH_ADD_DIR,
3847 ndmp_3to9_fh_add_dir_request,
3848 ndmp_9to3_fh_add_dir_request,
3849 JUST_ERROR_REPLY, /* no reply actually */
3850 ndmp_3to9_fh_add_dir_free_request,
3851 ndmp_9to3_fh_add_dir_free_request,
3855 NDMP3_FH_ADD_NODE, NDMP9_FH_ADD_NODE,
3856 ndmp_3to9_fh_add_node_request,
3857 ndmp_9to3_fh_add_node_request,
3858 JUST_ERROR_REPLY, /* no reply actually */
3859 ndmp_3to9_fh_add_node_free_request,
3860 ndmp_9to3_fh_add_node_free_request,
3865 NDMP3_MOVER_GET_STATE, NDMP9_MOVER_GET_STATE,
3867 ndmp_3to9_mover_get_state_reply,
3868 ndmp_9to3_mover_get_state_reply,
3869 NO_MEMUSED /* no memory free routines written yet */
3872 NDMP3_MOVER_LISTEN, NDMP9_MOVER_LISTEN,
3873 ndmp_3to9_mover_listen_request,
3874 ndmp_9to3_mover_listen_request,
3875 ndmp_3to9_mover_listen_reply,
3876 ndmp_9to3_mover_listen_reply,
3877 NO_MEMUSED /* no memory free routines written yet */
3880 NDMP3_MOVER_CONNECT, NDMP9_MOVER_CONNECT,
3881 ndmp_3to9_mover_connect_request,
3882 ndmp_9to3_mover_connect_request,
3884 NO_MEMUSED /* no memory free routines written yet */
3887 NDMP3_MOVER_CONTINUE, NDMP9_MOVER_CONTINUE,
3888 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3889 NO_MEMUSED /* no memory free routines written yet */
3892 NDMP3_MOVER_ABORT, NDMP9_MOVER_ABORT,
3893 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3894 NO_MEMUSED /* no memory free routines written yet */
3897 NDMP3_MOVER_STOP, NDMP9_MOVER_STOP,
3898 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3899 NO_MEMUSED /* no memory free routines written yet */
3902 NDMP3_MOVER_SET_WINDOW, NDMP9_MOVER_SET_WINDOW,
3903 ndmp_3to9_mover_set_window_request,
3904 ndmp_9to3_mover_set_window_request,
3906 NO_MEMUSED /* no memory free routines written yet */
3909 NDMP3_MOVER_READ, NDMP9_MOVER_READ,
3910 ndmp_3to9_mover_read_request,
3911 ndmp_9to3_mover_read_request,
3913 NO_MEMUSED /* no memory free routines written yet */
3916 NDMP3_MOVER_CLOSE, NDMP9_MOVER_CLOSE,
3917 NO_ARG_REQUEST_JUST_ERROR_REPLY,
3918 NO_MEMUSED /* no memory free routines written yet */
3921 NDMP3_MOVER_SET_RECORD_SIZE, NDMP9_MOVER_SET_RECORD_SIZE,
3922 ndmp_3to9_mover_set_record_size_request,
3923 ndmp_9to3_mover_set_record_size_request,
3925 NO_MEMUSED /* no memory free routines written yet */
3927 /* ndmp_mover_connnect TBD */
3933 #endif /* !NDMOS_OPTION_NO_NDMP3 */