Commit 099489b2 authored by Seth Howell's avatar Seth Howell Committed by Jim Harris
Browse files

lib/nvmf: Add nvmf_destroy_target rpc

parent c9b89ef1
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -3691,6 +3691,41 @@ Example response:
}
~~~

## nvmf_delete_target method {#rpc_nvmf_delete_target}

Destroy the given NVMe-oF target.

### Parameters

Name                        | Optional | Type        | Description
--------------------------- | -------- | ------------| -----------
name                        | Required | string      | Target name (must be unique to application)

### Example

Example request:

~~~
{
  "jsonrpc": "2.0",
  "method": "nvmf_delete_target",
  "id": 1,
  "params": {
    "name": "old_tgt",
  }
}
~~~

Example response:

~~~
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}
~~~

## nvmf_create_transport method {#rpc_nvmf_create_transport}

Initialize an NVMe-oF transport with the given options.
+46 −0
Original line number Diff line number Diff line
@@ -1452,6 +1452,52 @@ spdk_rpc_nvmf_create_target(struct spdk_jsonrpc_request *request,
}
SPDK_RPC_REGISTER("nvmf_create_target", spdk_rpc_nvmf_create_target, SPDK_RPC_RUNTIME);

static const struct spdk_json_object_decoder nvmf_rpc_destroy_target_decoder[] = {
	{"name", offsetof(struct nvmf_rpc_target_ctx, name), spdk_json_decode_string},
};

static void
nvmf_rpc_destroy_target_done(void *ctx, int status)
{
	struct spdk_jsonrpc_request	*request = ctx;
	struct spdk_json_write_ctx	*w;

	w = spdk_jsonrpc_begin_result(request);
	spdk_json_write_bool(w, true);
	spdk_jsonrpc_end_result(request, w);
}

static void
spdk_rpc_nvmf_delete_target(struct spdk_jsonrpc_request *request,
			    const struct spdk_json_val *params)
{
	struct nvmf_rpc_target_ctx	ctx = {0};
	struct spdk_nvmf_tgt		*tgt;

	/* Decode parameters the first time to get the transport type */
	if (spdk_json_decode_object(params, nvmf_rpc_destroy_target_decoder,
				    SPDK_COUNTOF(nvmf_rpc_destroy_target_decoder),
				    &ctx)) {
		SPDK_ERRLOG("spdk_json_decode_object failed\n");
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, "Invalid parameters");
		free(ctx.name);
		return;
	}

	tgt = spdk_nvmf_get_tgt(ctx.name);

	if (tgt == NULL) {
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
						 "The specified target doesn't exist, cannot delete it.");
		free(ctx.name);
		return;
	}

	spdk_nvmf_tgt_destroy(tgt, nvmf_rpc_destroy_target_done, request);
	free(ctx.name);
}
SPDK_RPC_REGISTER("nvmf_delete_target", spdk_rpc_nvmf_delete_target, SPDK_RPC_RUNTIME);

struct nvmf_rpc_create_transport_ctx {
	char				*trtype;
	char				*tgt_name;
+8 −0
Original line number Diff line number Diff line
@@ -1568,6 +1568,14 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
                   type=int, required=False)
    p.set_defaults(func=nvmf_create_target)

    def nvmf_delete_target(args):
        print_dict(rpc.nvmf.nvmf_delete_target(args.client,
                                               name=args.name))

    p = subparsers.add_parser('nvmf_delete_target', help='Destroy the given NVMe-oF Target')
    p.add_argument('-n', '--name', help='Target name (unique to application)', type=str, required=True)
    p.set_defaults(func=nvmf_delete_target)

    def nvmf_create_transport(args):
        rpc.nvmf.nvmf_create_transport(args.client,
                                       trtype=args.trtype,
+16 −0
Original line number Diff line number Diff line
@@ -54,6 +54,22 @@ def nvmf_create_target(client,
    return client.call("nvmf_create_target", params)


def nvmf_delete_target(client,
                       name):
    """Destroy an NVMe-oF Target.

    Args:
        name: The name of the target you wish to destroy

    Returns:
        True on success or False
    """
    params = {}

    params['name'] = name
    return client.call("nvmf_delete_target", params)


def nvmf_create_transport(client,
                          trtype,
                          tgt_name=None,