nvmf: add rpc for getting transport information

Change-Id: I8c3cbc1b08a219844c9b25f8c8494efd09e347f6
Signed-off-by: Seth Howell <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/430623
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Seth Howell 2018-10-23 15:07:42 -07:00 committed by Ben Walker
parent 433a1e7b67
commit c89b7bac82
4 changed files with 100 additions and 0 deletions

View File

@ -3394,6 +3394,41 @@ Example response:
}
~~~
## get_nvmf_transports method {#rpc_get_nvmf_transports}
### Parameters
This method has no parameters.
### Example
Example request:
~~~
{
"jsonrpc": "2.0",
"id": 1,
"method": "get_nvmf_transports"
}
~~~
Example response:
~~~
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"type": "RDMA".
"max_queue_depth": 128,
"max_qpairs_per_ctrlr": 64,
"in_capsule_data_size": 4096,
"max_io_size": 131072,
"io_unit_size": 131072
}
]
}
~~~
# Vhost Target {#jsonrpc_components_vhost_tgt}
The following common preconditions need to be met in all target types.

View File

@ -1560,3 +1560,51 @@ nvmf_rpc_create_transport(struct spdk_jsonrpc_request *request,
}
SPDK_RPC_REGISTER("nvmf_create_transport", nvmf_rpc_create_transport, SPDK_RPC_RUNTIME)
static void
dump_nvmf_transport(struct spdk_json_write_ctx *w, struct spdk_nvmf_transport *transport)
{
const struct spdk_nvmf_transport_opts *opts = spdk_nvmf_get_transport_opts(transport);
spdk_nvme_transport_type_t type = spdk_nvmf_get_transport_type(transport);
spdk_json_write_object_begin(w);
spdk_json_write_named_string(w, "trtype", spdk_nvme_transport_id_trtype_str(type));
spdk_json_write_named_uint32(w, "max_queue_depth", opts->max_queue_depth);
spdk_json_write_named_uint32(w, "max_qpairs_per_ctrlr", opts->max_qpairs_per_ctrlr);
spdk_json_write_named_uint32(w, "in_capsule_data_size", opts->in_capsule_data_size);
spdk_json_write_named_uint32(w, "max_io_size", opts->max_io_size);
spdk_json_write_named_uint32(w, "io_unit_size", opts->io_unit_size);
spdk_json_write_named_uint32(w, "max_aq_depth", opts->max_aq_depth);
spdk_json_write_object_end(w);
}
static void
nvmf_rpc_get_nvmf_transports(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct spdk_json_write_ctx *w;
struct spdk_nvmf_transport *transport;
if (params != NULL) {
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
"get_nvmf_transports requires no parameters");
return;
}
w = spdk_jsonrpc_begin_result(request);
if (w == NULL) {
return;
}
spdk_json_write_array_begin(w);
transport = spdk_nvmf_transport_get_first(g_spdk_nvmf_tgt);
while (transport) {
dump_nvmf_transport(w, transport);
transport = spdk_nvmf_transport_get_next(transport);
}
spdk_json_write_array_end(w);
spdk_jsonrpc_end_result(request, w);
}
SPDK_RPC_REGISTER("get_nvmf_transports", nvmf_rpc_get_nvmf_transports, SPDK_RPC_RUNTIME)

View File

@ -1312,6 +1312,14 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
p.add_argument('-a', '--max-aq-depth', help='Max number of admin cmds per AQ', type=int)
p.set_defaults(func=nvmf_create_transport)
@call_cmd
def get_nvmf_transports(args):
print_dict(rpc.nvmf.get_nvmf_transports(args.client))
p = subparsers.add_parser('get_nvmf_transports',
help='Display nvmf transports')
p.set_defaults(func=get_nvmf_transports)
@call_cmd
def get_nvmf_subsystems(args):
print_dict(rpc.nvmf.get_nvmf_subsystems(args.client))

View File

@ -98,6 +98,15 @@ def nvmf_create_transport(client,
return client.call('nvmf_create_transport', params)
def get_nvmf_transports(client):
"""Get list of NVMe-oF transports.
Returns:
List of NVMe-oF transport objects.
"""
return client.call('get_nvmf_transports')
def get_nvmf_subsystems(client):
"""Get list of NVMe-oF subsystems.