2022-06-03 19:15:11 +00:00
|
|
|
/* SPDX-License-Identifier: BSD-3-Clause
|
2022-11-01 20:26:26 +00:00
|
|
|
* Copyright (C) 2018 Intel Corporation.
|
2018-12-06 15:56:06 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "spdk/rpc.h"
|
|
|
|
#include "spdk/string.h"
|
|
|
|
#include "spdk/notify.h"
|
|
|
|
#include "spdk/env.h"
|
|
|
|
#include "spdk/util.h"
|
|
|
|
|
2020-10-06 16:16:26 +00:00
|
|
|
#include "spdk/log.h"
|
2018-12-06 15:56:06 +00:00
|
|
|
|
|
|
|
static int
|
2019-09-20 08:24:52 +00:00
|
|
|
notify_get_types_cb(const struct spdk_notify_type *type, void *ctx)
|
2018-12-06 15:56:06 +00:00
|
|
|
{
|
|
|
|
spdk_json_write_string((struct spdk_json_write_ctx *)ctx, spdk_notify_type_get_name(type));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2020-05-10 23:32:35 +00:00
|
|
|
rpc_notify_get_types(struct spdk_jsonrpc_request *request,
|
|
|
|
const struct spdk_json_val *params)
|
2018-12-06 15:56:06 +00:00
|
|
|
{
|
|
|
|
struct spdk_json_write_ctx *w;
|
|
|
|
|
|
|
|
if (params != NULL) {
|
|
|
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
|
|
"No parameters required");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
w = spdk_jsonrpc_begin_result(request);
|
|
|
|
spdk_json_write_array_begin(w);
|
2019-09-20 08:24:52 +00:00
|
|
|
spdk_notify_foreach_type(notify_get_types_cb, w);
|
2018-12-06 15:56:06 +00:00
|
|
|
spdk_json_write_array_end(w);
|
|
|
|
|
|
|
|
spdk_jsonrpc_end_result(request, w);
|
|
|
|
}
|
2020-05-10 23:32:35 +00:00
|
|
|
SPDK_RPC_REGISTER("notify_get_types", rpc_notify_get_types, SPDK_RPC_RUNTIME)
|
2018-12-06 15:56:06 +00:00
|
|
|
|
2019-09-20 08:35:27 +00:00
|
|
|
struct rpc_notify_get_notifications {
|
2018-12-06 15:56:06 +00:00
|
|
|
uint64_t id;
|
|
|
|
uint64_t max;
|
|
|
|
|
|
|
|
struct spdk_json_write_ctx *w;
|
|
|
|
};
|
|
|
|
|
2019-09-20 08:35:27 +00:00
|
|
|
static const struct spdk_json_object_decoder rpc_notify_get_notifications_decoders[] = {
|
|
|
|
{"id", offsetof(struct rpc_notify_get_notifications, id), spdk_json_decode_uint64, true},
|
|
|
|
{"max", offsetof(struct rpc_notify_get_notifications, max), spdk_json_decode_uint64, true},
|
2018-12-06 15:56:06 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2019-09-20 08:35:27 +00:00
|
|
|
notify_get_notifications_cb(uint64_t id, const struct spdk_notify_event *ev, void *ctx)
|
2018-12-06 15:56:06 +00:00
|
|
|
{
|
2019-09-20 08:35:27 +00:00
|
|
|
struct rpc_notify_get_notifications *req = ctx;
|
2018-12-06 15:56:06 +00:00
|
|
|
|
|
|
|
spdk_json_write_object_begin(req->w);
|
|
|
|
spdk_json_write_named_string(req->w, "type", ev->type);
|
|
|
|
spdk_json_write_named_string(req->w, "ctx", ev->ctx);
|
|
|
|
spdk_json_write_named_uint64(req->w, "id", id);
|
|
|
|
spdk_json_write_object_end(req->w);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2020-05-10 23:32:35 +00:00
|
|
|
rpc_notify_get_notifications(struct spdk_jsonrpc_request *request,
|
|
|
|
const struct spdk_json_val *params)
|
2018-12-06 15:56:06 +00:00
|
|
|
{
|
2019-09-20 08:35:27 +00:00
|
|
|
struct rpc_notify_get_notifications req = {0, UINT64_MAX};
|
2018-12-06 15:56:06 +00:00
|
|
|
|
|
|
|
if (params &&
|
2019-09-20 08:35:27 +00:00
|
|
|
spdk_json_decode_object(params, rpc_notify_get_notifications_decoders,
|
|
|
|
SPDK_COUNTOF(rpc_notify_get_notifications_decoders), &req)) {
|
2020-09-04 11:27:29 +00:00
|
|
|
SPDK_DEBUGLOG(notify_rpc, "spdk_json_decode_object failed\n");
|
2018-12-06 15:56:06 +00:00
|
|
|
|
|
|
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
|
|
spdk_strerror(EINVAL));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
req.w = spdk_jsonrpc_begin_result(request);
|
|
|
|
|
|
|
|
spdk_json_write_array_begin(req.w);
|
2019-09-20 08:35:27 +00:00
|
|
|
spdk_notify_foreach_event(req.id, req.max, notify_get_notifications_cb, &req);
|
2018-12-06 15:56:06 +00:00
|
|
|
spdk_json_write_array_end(req.w);
|
|
|
|
|
|
|
|
spdk_jsonrpc_end_result(request, req.w);
|
|
|
|
}
|
2020-05-10 23:32:35 +00:00
|
|
|
SPDK_RPC_REGISTER("notify_get_notifications", rpc_notify_get_notifications, SPDK_RPC_RUNTIME)
|
2018-12-06 15:56:06 +00:00
|
|
|
|
2020-09-04 11:27:29 +00:00
|
|
|
SPDK_LOG_REGISTER_COMPONENT(notify_rpc)
|