xref: /spdk/module/event/subsystems/iobuf/iobuf_rpc.c (revision 1078198e78653b2f39414c1566740018d76ee73d)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright (C) 2022 Intel Corporation.
3  *   All rights reserved.
4  */
5 
6 #include "spdk/stdinc.h"
7 #include "spdk/thread.h"
8 #include "spdk/rpc.h"
9 #include "spdk/string.h"
10 #include "spdk_internal/init.h"
11 
12 static const struct spdk_json_object_decoder rpc_iobuf_set_options_decoders[] = {
13 	{"small_pool_count", offsetof(struct spdk_iobuf_opts, small_pool_count), spdk_json_decode_uint64, true},
14 	{"large_pool_count", offsetof(struct spdk_iobuf_opts, large_pool_count), spdk_json_decode_uint64, true},
15 	{"small_bufsize", offsetof(struct spdk_iobuf_opts, small_bufsize), spdk_json_decode_uint32, true},
16 	{"large_bufsize", offsetof(struct spdk_iobuf_opts, large_bufsize), spdk_json_decode_uint32, true},
17 };
18 
19 static void
20 rpc_iobuf_set_options(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params)
21 {
22 	struct spdk_iobuf_opts opts;
23 	int rc;
24 
25 	spdk_iobuf_get_opts(&opts);
26 	rc = spdk_json_decode_object(params, rpc_iobuf_set_options_decoders,
27 				     SPDK_COUNTOF(rpc_iobuf_set_options_decoders), &opts);
28 	if (rc != 0) {
29 		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
30 						 "spdk_json_decode_object failed");
31 		return;
32 	}
33 
34 	rc = spdk_iobuf_set_opts(&opts);
35 	if (rc != 0) {
36 		spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
37 		return;
38 	}
39 
40 	spdk_jsonrpc_send_bool_response(request, true);
41 }
42 SPDK_RPC_REGISTER("iobuf_set_options", rpc_iobuf_set_options, SPDK_RPC_STARTUP)
43 
44 static void
45 rpc_iobuf_get_stats_done(struct spdk_iobuf_module_stats *modules, uint32_t num_modules,
46 			 void *cb_arg)
47 {
48 	struct spdk_jsonrpc_request *request = cb_arg;
49 	struct spdk_json_write_ctx *w;
50 	struct spdk_iobuf_module_stats *it;
51 	uint32_t i;
52 
53 	w = spdk_jsonrpc_begin_result(request);
54 	spdk_json_write_array_begin(w);
55 
56 	for (i = 0; i < num_modules; ++i) {
57 		it = &modules[i];
58 
59 		spdk_json_write_object_begin(w);
60 		spdk_json_write_named_string(w, "module", it->module);
61 
62 		spdk_json_write_named_object_begin(w, "small_pool");
63 		spdk_json_write_named_uint64(w, "cache", it->small_pool.cache);
64 		spdk_json_write_named_uint64(w, "main", it->small_pool.main);
65 		spdk_json_write_named_uint64(w, "retry", it->small_pool.retry);
66 		spdk_json_write_object_end(w);
67 
68 		spdk_json_write_named_object_begin(w, "large_pool");
69 		spdk_json_write_named_uint64(w, "cache", it->large_pool.cache);
70 		spdk_json_write_named_uint64(w, "main", it->large_pool.main);
71 		spdk_json_write_named_uint64(w, "retry", it->large_pool.retry);
72 		spdk_json_write_object_end(w);
73 
74 		spdk_json_write_object_end(w);
75 	}
76 
77 	spdk_json_write_array_end(w);
78 	spdk_jsonrpc_end_result(request, w);
79 }
80 
81 static void
82 rpc_iobuf_get_stats(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params)
83 {
84 	int rc;
85 
86 	rc = spdk_iobuf_get_stats(rpc_iobuf_get_stats_done, request);
87 	if (rc != 0) {
88 		spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
89 	}
90 }
91 SPDK_RPC_REGISTER("iobuf_get_stats", rpc_iobuf_get_stats, SPDK_RPC_RUNTIME)
92