Commit 088379cf authored by Seth Howell's avatar Seth Howell Committed by Jim Harris
Browse files

nvme_rdma: Add source addr info to RPC



Change-Id: Id6b5aee4b36d828a0f9e5ddc85293a15342d2aae
Signed-off-by: default avatarSeth Howell <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/436220


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent b1ecb314
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -28,6 +28,9 @@ arg refers to a Discovery Controller or not.
Added an API function `spdk_nvme_host_id_parse` and corresponding object `spdk_nvme_host_id`
for parsing host address and host service ID arguments on a per connection basis.

The RPC `construct_nvme_bdev` now allows a user to specify a source address and service id for the host to
use when connecting to the controller backing the NVMe bdev.

### NVMe-oF Target

The `spdk_nvmf_tgt_opts` struct has been deprecated in favor of `spdk_nvmf_transport_opts`.
+2 −0
Original line number Diff line number Diff line
@@ -1036,6 +1036,8 @@ adrfam | Optional | string | NVMe-oF target adrfam: ipv4,
trsvcid                 | Optional | string      | NVMe-oF target trsvcid: port number
subnqn                  | Optional | string      | NVMe-oF target subnqn
hostnqn                 | Optional | string      | NVMe-oF target hostnqn
hostaddr                | Optional | string      | NVMe-oF host address: ip address
hostsvcid               | Optional | string      | NVMe-oF host trsvcid: port number

### Example

+9 −0
Original line number Diff line number Diff line
@@ -1192,6 +1192,7 @@ spdk_bdev_nvme_set_hotplug(bool enabled, uint64_t period_us, spdk_msg_fn cb, voi

int
spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
		      struct spdk_nvme_host_id *hostid,
		      const char *base_name,
		      const char **names, size_t *count,
		      const char *hostnqn)
@@ -1219,6 +1220,14 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
		snprintf(opts.hostnqn, sizeof(opts.hostnqn), "%s", hostnqn);
	}

	if (hostid->hostaddr[0] != '\0') {
		snprintf(opts.src_addr, sizeof(opts.src_addr), "%s", hostid->hostaddr);
	}

	if (hostid->hostsvcid[0] != '\0') {
		snprintf(opts.src_svcid, sizeof(opts.src_svcid), "%s", hostid->hostsvcid);
	}

	ctrlr = spdk_nvme_connect(trid, &opts, sizeof(opts));
	if (!ctrlr) {
		SPDK_ERRLOG("Failed to create new device\n");
+1 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ int spdk_bdev_nvme_set_opts(const struct spdk_bdev_nvme_opts *opts);
int spdk_bdev_nvme_set_hotplug(bool enabled, uint64_t period_us, spdk_msg_fn cb, void *cb_ctx);

int spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
			  struct spdk_nvme_host_id *hostid,
			  const char *base_name,
			  const char **names, size_t *count,
			  const char *hostnqn);
+18 −2
Original line number Diff line number Diff line
@@ -165,6 +165,8 @@ struct rpc_construct_nvme {
	char *trsvcid;
	char *subnqn;
	char *hostnqn;
	char *hostaddr;
	char *hostsvcid;
};

static void
@@ -177,6 +179,8 @@ free_rpc_construct_nvme(struct rpc_construct_nvme *req)
	free(req->trsvcid);
	free(req->subnqn);
	free(req->hostnqn);
	free(req->hostaddr);
	free(req->hostsvcid);
}

static const struct spdk_json_object_decoder rpc_construct_nvme_decoders[] = {
@@ -187,7 +191,10 @@ static const struct spdk_json_object_decoder rpc_construct_nvme_decoders[] = {
	{"adrfam", offsetof(struct rpc_construct_nvme, adrfam), spdk_json_decode_string, true},
	{"trsvcid", offsetof(struct rpc_construct_nvme, trsvcid), spdk_json_decode_string, true},
	{"subnqn", offsetof(struct rpc_construct_nvme, subnqn), spdk_json_decode_string, true},
	{"hostnqn", offsetof(struct rpc_construct_nvme, hostnqn), spdk_json_decode_string, true}
	{"hostnqn", offsetof(struct rpc_construct_nvme, hostnqn), spdk_json_decode_string, true},
	{"hostaddr", offsetof(struct rpc_construct_nvme, hostaddr), spdk_json_decode_string, true},
	{"hostsvcid", offsetof(struct rpc_construct_nvme, hostsvcid), spdk_json_decode_string, true}

};

#define NVME_MAX_BDEVS_PER_RPC 128
@@ -199,6 +206,7 @@ spdk_rpc_construct_nvme_bdev(struct spdk_jsonrpc_request *request,
	struct rpc_construct_nvme req = {};
	struct spdk_json_write_ctx *w;
	struct spdk_nvme_transport_id trid = {};
	struct spdk_nvme_host_id hostid = {};
	const char *names[NVME_MAX_BDEVS_PER_RPC];
	size_t count;
	size_t i;
@@ -240,8 +248,16 @@ spdk_rpc_construct_nvme_bdev(struct spdk_jsonrpc_request *request,
		snprintf(trid.subnqn, sizeof(trid.subnqn), "%s", req.subnqn);
	}

	if (req.hostaddr) {
		snprintf(hostid.hostaddr, sizeof(hostid.hostaddr), "%s", req.hostaddr);
	}

	if (req.hostsvcid) {
		snprintf(hostid.hostsvcid, sizeof(hostid.hostsvcid), "%s", req.hostsvcid);
	}

	count = NVME_MAX_BDEVS_PER_RPC;
	if (spdk_bdev_nvme_create(&trid, req.name, names, &count, req.hostnqn)) {
	if (spdk_bdev_nvme_create(&trid, &hostid, req.name, names, &count, req.hostnqn)) {
		goto invalid;
	}

Loading