lib/nvmf: Add nvmf_destroy_target rpc

Change-Id: I048793d32dcd19a5723dedec96fade9e7a889e3b
Signed-off-by: Seth Howell <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468390
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Alexey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Seth Howell 2019-09-13 14:52:05 -07:00 committed by Jim Harris
parent c9b89ef128
commit 099489b207
4 changed files with 105 additions and 0 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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,

View File

@ -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,