int ndmca_test_data_listen (struct ndm_session *sess, ndmp9_error expect_err, ndmp9_addr_type addr_type) { struct ndmconn * conn = sess->plumb.data; struct ndm_control_agent *ca = sess->control_acb; int rc; /* close previous test if there is one */ ndmca_test_close (sess); switch (conn->protocol_version) { default: return -1234; #ifndef NDMOS_OPTION_NO_NDMP3 case NDMP3VER: NDMC_WITH(ndmp3_data_listen, NDMP3VER) request->addr_type = addr_type; rc = NDMTEST_CALL(conn); if (rc) return rc; if (expect_err == NDMP9_NO_ERR && request->addr_type != reply->data_connection_addr.addr_type) { /* TODO: use proper test format */ ndmalogf (sess, "Test", 1, "DATA_LISTEN addr_type mismatch"); return -1; } ndmp_3to9_addr (&reply->data_connection_addr, &ca->data_addr); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP3 */ #ifndef NDMOS_OPTION_NO_NDMP4 case NDMP4VER: NDMC_WITH(ndmp4_data_listen, NDMP4VER) request->addr_type = addr_type; rc = NDMTEST_CALL(conn); if (rc) return rc; if (expect_err == NDMP9_NO_ERR && request->addr_type != reply->connect_addr.addr_type) { /* TODO: use proper test format */ ndmalogf (sess, "Test", 1, "DATA_LISTEN addr_type mismatch"); return -1; } ndmp_4to9_addr (&reply->connect_addr, &ca->data_addr); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP4 */ } return 0; }
int ndmca_test_tape_read_2cnt (struct ndm_session *sess, ndmp9_error expect_err, char *buf, unsigned count, unsigned true_count) { struct ndmconn * conn = sess->plumb.tape; int rc; /* close previous test if there is one */ ndmca_test_close (sess); switch (conn->protocol_version) { default: return -1234; #ifndef NDMOS_OPTION_NO_NDMP2 case NDMP2VER: NDMC_WITH(ndmp2_tape_read, NDMP2VER) request->count = count; rc = NDMTEST_CALL(conn); if (rc == 0 && expect_err == NDMP9_NO_ERR) { if (reply->data_in.data_in_len == true_count) { bcopy (reply->data_in.data_in_val, buf, true_count); } else { rc = -1; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP2 */ #ifndef NDMOS_OPTION_NO_NDMP3 case NDMP3VER: NDMC_WITH(ndmp3_tape_read, NDMP3VER) request->count = count; rc = NDMTEST_CALL(conn); if (rc == 0 && expect_err == NDMP9_NO_ERR) { if (reply->data_in.data_in_len == true_count) { bcopy (reply->data_in.data_in_val, buf, true_count); } else { rc = -1; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP3 */ #ifndef NDMOS_OPTION_NO_NDMP4 case NDMP4VER: NDMC_WITH(ndmp4_tape_read, NDMP4VER) request->count = count; rc = NDMTEST_CALL(conn); if (rc == 0 && expect_err == NDMP9_NO_ERR) { if (reply->data_in.data_in_len == true_count) { bcopy (reply->data_in.data_in_val, buf, true_count); } else { rc = -1; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP4 */ } return rc; }
int ndmca_test_tape_open (struct ndm_session *sess, ndmp9_error expect_err, char *device, int mode) { struct ndmconn * conn = sess->plumb.tape; struct ndm_control_agent *ca = &sess->control_acb; int rc; /* close previous test if there is one */ ndmca_test_close (sess); switch (conn->protocol_version) { default: return -1234; #ifndef NDMOS_OPTION_NO_NDMP2 case NDMP2VER: NDMC_WITH (ndmp2_tape_open, NDMP2VER) if (device) request->device.name = device; else request->device.name = ca->job.tape_device; if (mode != -1) request->mode = mode; else request->mode = ca->tape_mode; rc = NDMTEST_CALL(conn); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP2 */ #ifndef NDMOS_OPTION_NO_NDMP3 case NDMP3VER: NDMC_WITH (ndmp3_tape_open, NDMP3VER) if (device) request->device = device; else request->device = ca->job.tape_device; if (mode != -1) request->mode = mode; else request->mode = ca->tape_mode; rc = NDMTEST_CALL(conn); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP3 */ #ifndef NDMOS_OPTION_NO_NDMP4 case NDMP4VER: NDMC_WITH (ndmp4_tape_open, NDMP4VER) if (device) request->device = device; else request->device = ca->job.tape_device; if (mode != -1) request->mode = mode; else request->mode = ca->tape_mode; rc = NDMTEST_CALL(conn); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP4 */ } return rc; }