Esempio n. 1
0
int
ndmca_data_get_env (struct ndm_session *sess)
{
	struct ndmconn *	conn = sess->plumb.data;
	struct ndm_control_agent *ca = &sess->control_acb;
	int			rc;
	unsigned int		i;
	ndmp9_pval *		d_pv;
	ndmp9_pval *		s_pv;

	NDMC_WITH_VOID_REQUEST(ndmp9_data_get_env, NDMP9VER)
		rc = NDMC_CALL(conn);
		if (rc) return rc;

		for (i = 0; i < reply->env.env_len; i++) {
			s_pv = &reply->env.env_val[i];
			d_pv = &ca->job.result_env_tab.env[i];
			d_pv->name  = NDMOS_API_STRDUP (s_pv->name);
			d_pv->value = NDMOS_API_STRDUP (s_pv->value);
		}
		ca->job.result_env_tab.n_env = i;

		NDMC_FREE_REPLY();
	NDMC_ENDWITH

	return rc;
}
Esempio n. 2
0
int
ndmca_tape_read_partial (struct ndm_session *sess, char *buf, unsigned count, int *read_count)
{
	struct ndmconn *	conn = sess->plumb.tape;
	int			rc;

	NDMC_WITH(ndmp9_tape_read, NDMP9VER)
		request->count = count;
		rc = NDMC_CALL(conn);
		if (rc == 0) {
			*read_count = reply->data_in.data_in_len;
			bcopy (reply->data_in.data_in_val, buf, *read_count);
		} else {
			rc = reply->error;
		}
		NDMC_FREE_REPLY();
	NDMC_ENDWITH

	return rc;
}
Esempio n. 3
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;
}
Esempio n. 4
0
int ndmca_test_query_conn_types(struct ndm_session* sess,
                                struct ndmconn* ref_conn)
{
  struct ndmconn* conn = ref_conn;
  struct ndm_control_agent* ca = sess->control_acb;
  int rc;
  unsigned int i;

  switch (conn->protocol_version) {
    default:
      return -1234;

#ifndef NDMOS_OPTION_NO_NDMP2
    case NDMP2VER:
      NDMC_WITH_VOID_REQUEST(ndmp2_config_get_mover_type, NDMP2VER)
      rc = NDMC_CALL(conn);
      if (rc) {
        ndmalogf(sess, "Test", 1, "GET_MOVER_TYPE failed");
        return rc;
      }

      for (i = 0; i < reply->methods.methods_len; i++) {
        switch (reply->methods.methods_val[i]) {
          case NDMP2_ADDR_LOCAL:
            ca->has_local_addr = 1;
            break;
          case NDMP2_ADDR_TCP:
            ca->has_tcp_addr = 1;
            break;
          default:
            break;
        }
      }

      NDMC_FREE_REPLY();
      NDMC_ENDWITH
      break;
#endif /* !NDMOS_OPTION_NO_NDMP2 */

#ifndef NDMOS_OPTION_NO_NDMP3
    case NDMP3VER:
      NDMC_WITH_VOID_REQUEST(ndmp3_config_get_connection_type, NDMP3VER)
      rc = NDMC_CALL(conn);
      if (rc) {
        ndmalogf(sess, "Test", 1, "GET_CONNECTION_TYPE failed");
        return rc;
      }

      for (i = 0; i < reply->addr_types.addr_types_len; i++) {
        switch (reply->addr_types.addr_types_val[i]) {
          case NDMP3_ADDR_LOCAL:
            ca->has_local_addr = 1;
            break;
          case NDMP3_ADDR_TCP:
            ca->has_tcp_addr = 1;
            break;
          default:
            break;
        }
      }
      NDMC_FREE_REPLY();
      NDMC_ENDWITH
      break;
#endif /* !NDMOS_OPTION_NO_NDMP3 */

#ifndef NDMOS_OPTION_NO_NDMP4
    case NDMP4VER:
      NDMC_WITH_VOID_REQUEST(ndmp4_config_get_connection_type, NDMP4VER)
      rc = NDMC_CALL(conn);
      if (rc) {
        ndmalogf(sess, "Test", 1, "GET_CONNECTION_TYPE failed");
        return rc;
      }

      for (i = 0; i < reply->addr_types.addr_types_len; i++) {
        switch (reply->addr_types.addr_types_val[i]) {
          case NDMP4_ADDR_LOCAL:
            ca->has_local_addr = 1;
            break;
          case NDMP4_ADDR_TCP:
            ca->has_tcp_addr = 1;
            break;
          default:
            break;
        }
      }
      NDMC_FREE_REPLY();
      NDMC_ENDWITH
      break;
#endif /* !NDMOS_OPTION_NO_NDMP4 */
  }

  return 0;
}