Exemple #1
0
static bool
nvmf_process_property_get(struct spdk_nvmf_request *req)
{
	struct spdk_nvmf_fabric_prop_get_rsp *response;
	struct spdk_nvmf_fabric_prop_get_cmd *cmd;

	cmd = &req->cmd->prop_get_cmd;
	response = &req->rsp->prop_get_rsp;

	nvmf_property_get(req->conn->sess, cmd, response);

	return true;
}
Exemple #2
0
static int
nvmf_process_property_get(struct spdk_nvmf_conn *conn,
			  struct nvme_qp_tx_desc *tx_desc)
{
	struct spdk_nvmf_fabric_prop_get_rsp *response;
	struct nvmf_request *req = &tx_desc->req_state;
	struct spdk_nvmf_fabric_prop_get_cmd *cmd;
	int	ret;

	cmd = &req->cmd->prop_get_cmd;
	response = &req->rsp->prop_get_rsp;

	nvmf_property_get(conn->sess, cmd, response);

	/* send the nvmf response if setup by NVMf library */
	SPDK_TRACELOG(SPDK_TRACE_DEBUG, "send property get capsule response\n");
	ret = spdk_nvmf_send_response(conn, req);
	if (ret) {
		SPDK_ERRLOG("Unable to send aq qp tx descriptor\n");
		return -1;
	}

	return 0;
}
Exemple #3
0
static void
nvmf_test_property_get(void)
{
	struct nvmf_session *sess;
	struct spdk_nvmf_fabric_prop_get_cmd cmd;
	struct spdk_nvmf_fabric_prop_get_rsp response;
	union spdk_nvme_cap_lo_register *cap_lo;
	union spdk_nvme_cap_hi_register *cap_hi;
	union spdk_nvme_csts_register *csts;
	union spdk_nvme_aqa_register *aqa;
	union spdk_nvmf_property_size *propsz;

	sess = nvmf_find_session_by_id("subsystem1", SS_SC_CNTLID);
	nvmf_init_session_properties(sess, 64);
	sess->vcprop.csts.bits.rdy = 1;
	/* vs */
	BUILD_PROPERTY_CMD(vs, 0, 17);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 17);
	CU_ASSERT_EQUAL(response.value.u32.low, 0x10000);
	/* cap_lo */
	BUILD_PROPERTY_CMD(cap_lo, 1, 18);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 18);
	cap_lo = (union spdk_nvme_cap_lo_register *)&response.value.u32.low;
	cap_hi = (union spdk_nvme_cap_hi_register *)&response.value.u32.high;
	CU_ASSERT_EQUAL(cap_lo->bits.to, 1);
	CU_ASSERT_EQUAL(cap_hi->bits.css_nvm, 1);
	/* cc */
	BUILD_PROPERTY_CMD(cc, 0, 19);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 19);
	CU_ASSERT_EQUAL(response.value.u32.low, 0);
	/* csts */
	BUILD_PROPERTY_CMD(csts, 0, 20);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 20);
	csts = (union spdk_nvme_csts_register *)&response.value.u32.low;
	CU_ASSERT_EQUAL(csts->bits.rdy, 1);
	/* aqa */
	BUILD_PROPERTY_CMD(aqa, 0, 21);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 21);
	aqa = (union spdk_nvme_aqa_register *)&response.value.u32.low;
	CU_ASSERT_EQUAL(aqa->bits.asqs, 64);
	CU_ASSERT_EQUAL(aqa->bits.acqs, 64);
	/* propsz */
	BUILD_PROPERTY_CMD(propsz, 0, 22);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 22);
	propsz = (union spdk_nvmf_property_size *)&response.value.u32.low;
	CU_ASSERT_EQUAL(propsz->bits.size, sizeof(struct spdk_nvmf_ctrlr_properties) / 64);
	/* cap_hi */
	BUILD_PROPERTY_CMD(cap_hi, 0, 23);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 23);
	cap_hi = (union spdk_nvme_cap_hi_register *)&response.value.u32.low;
	CU_ASSERT_EQUAL(cap_hi->bits.css_nvm, 1);
	/* intms */
	BUILD_PROPERTY_CMD(intms, 0, 24);
	RUN_AND_CHECK_PROPERTY_RESULT(SPDK_NVMF_FABRIC_SC_INVALID_PARAM, 24);
	/* intmc */
	BUILD_PROPERTY_CMD(intmc, 0, 25);
	RUN_AND_CHECK_PROPERTY_RESULT(SPDK_NVMF_FABRIC_SC_INVALID_PARAM, 25);
	/* nssr */
	BUILD_PROPERTY_CMD(nssr, 0, 26);
	RUN_AND_CHECK_PROPERTY_RESULT(0, 26);
	/* asq */
	BUILD_PROPERTY_CMD(asq, 0, 27);
	RUN_AND_CHECK_PROPERTY_RESULT(SPDK_NVMF_FABRIC_SC_INVALID_PARAM, 27);
	/* acq */
	BUILD_PROPERTY_CMD(acq, 0, 28);
	RUN_AND_CHECK_PROPERTY_RESULT(SPDK_NVMF_FABRIC_SC_INVALID_PARAM, 28);
	/* begin to check error condition */
#define TEST_SIZE_NOT_RIGHT(prop_name, attr, c_id) \
	do { \
		BUILD_PROPERTY_CMD(prop_name, attr, c_id); \
		RUN_AND_CHECK_PROPERTY_RESULT(SPDK_NVMF_FABRIC_SC_INVALID_PARAM, c_id); \
	} while (0)

	TEST_SIZE_NOT_RIGHT(cc, 1, 22);
	TEST_SIZE_NOT_RIGHT(csts, 1, 23);
	TEST_SIZE_NOT_RIGHT(aqa, 1, 24);
	TEST_SIZE_NOT_RIGHT(propsz, 1, 25);
	TEST_SIZE_NOT_RIGHT(vs, 1, 26);
	TEST_SIZE_NOT_RIGHT(nssr, 1, 27);
	TEST_SIZE_NOT_RIGHT(capattr_hi, 1, 28);
	/* invalid offset */
	cmd.ofst = 0xffff;
	cmd.attrib = 0;
	cmd.cid = 29;
	nvmf_property_get(sess, &cmd, &response);
	CU_ASSERT_EQUAL(response.status.sc, SPDK_NVMF_FABRIC_SC_INVALID_PARAM);
}