Many open source projects have moved to using SPDX identifiers to specify license information, reducing the amount of boilerplate code in every source file. This patch replaces the bulk of SPDK .c, .cpp and Makefiles with the BSD-3-Clause identifier. Almost all of these files share the exact same license text, and this patch only modifies the files that contain the most common license text. There can be slight variations because the third clause contains company names - most say "Intel Corporation", but there are instances for Nvidia, Samsung, Eideticom and even "the copyright holder". Used a bash script to automate replacement of the license text with SPDX identifier which is checked into scripts/spdx.sh. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Iaa88ab5e92ea471691dc298cfe41ebfb5d169780 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12904 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Dong Yi <dongx.yi@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: <qun.wan@intel.com>
128 lines
3.4 KiB
C
128 lines
3.4 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright (c) Intel Corporation.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#ifndef SPDK_RPC_CONFIG_H_
|
|
#define SPDK_RPC_CONFIG_H_
|
|
|
|
#include "spdk/stdinc.h"
|
|
|
|
#include "spdk/jsonrpc.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Verify correctness of registered RPC methods and aliases.
|
|
*
|
|
* Incorrect registrations include:
|
|
* - multiple RPC methods registered with the same name
|
|
* - RPC alias registered with a method that does not exist
|
|
* - RPC alias registered that points to another alias
|
|
*
|
|
* \return true if registrations are all correct, false otherwise
|
|
*/
|
|
bool spdk_rpc_verify_methods(void);
|
|
|
|
/**
|
|
* Start listening for RPC connections.
|
|
*
|
|
* \param listen_addr Listening address.
|
|
*
|
|
* \return 0 on success, -1 on failure.
|
|
*/
|
|
int spdk_rpc_listen(const char *listen_addr);
|
|
|
|
/**
|
|
* Poll the RPC server.
|
|
*/
|
|
void spdk_rpc_accept(void);
|
|
|
|
/**
|
|
* Stop listening for RPC connections.
|
|
*/
|
|
void spdk_rpc_close(void);
|
|
|
|
/**
|
|
* Function signature for RPC request handlers.
|
|
*
|
|
* \param request RPC request to handle.
|
|
* \param params Parameters associated with the RPC request.
|
|
*/
|
|
typedef void (*spdk_rpc_method_handler)(struct spdk_jsonrpc_request *request,
|
|
const struct spdk_json_val *params);
|
|
|
|
/**
|
|
* Register an RPC method.
|
|
*
|
|
* \param method Name for the registered method.
|
|
* \param func Function registered for this method to handle the RPC request.
|
|
* \param state_mask State mask of the registered method. If the bit of the state of
|
|
* the RPC server is set in the state_mask, the method is allowed. Otherwise, it is rejected.
|
|
*/
|
|
void spdk_rpc_register_method(const char *method, spdk_rpc_method_handler func,
|
|
uint32_t state_mask);
|
|
|
|
/**
|
|
* Register a deprecated alias for an RPC method.
|
|
*
|
|
* \param method Name for the registered method.
|
|
* \param alias Alias for the registered method.
|
|
*/
|
|
void spdk_rpc_register_alias_deprecated(const char *method, const char *alias);
|
|
|
|
/**
|
|
* Check if \c method is allowed for \c state_mask
|
|
*
|
|
* \param method Method name
|
|
* \param state_mask state mask to check against
|
|
* \return 0 if method is allowed or negative error code:
|
|
* -EPERM method is not allowed
|
|
* -ENOENT method not found
|
|
*/
|
|
int spdk_rpc_is_method_allowed(const char *method, uint32_t state_mask);
|
|
|
|
#define SPDK_RPC_STARTUP 0x1
|
|
#define SPDK_RPC_RUNTIME 0x2
|
|
|
|
/* Give SPDK_RPC_REGISTER a higher execution priority than
|
|
* SPDK_RPC_REGISTER_ALIAS_DEPRECATED to ensure all of the RPCs are registered
|
|
* before we try registering any aliases. Some older versions of clang may
|
|
* otherwise execute the constructors in a different order than
|
|
* defined in the source file (see issue #892).
|
|
*/
|
|
#define SPDK_RPC_REGISTER(method, func, state_mask) \
|
|
static void __attribute__((constructor(1000))) rpc_register_##func(void) \
|
|
{ \
|
|
spdk_rpc_register_method(method, func, state_mask); \
|
|
}
|
|
|
|
#define SPDK_RPC_REGISTER_ALIAS_DEPRECATED(method, alias) \
|
|
static void __attribute__((constructor(1001))) rpc_register_##alias(void) \
|
|
{ \
|
|
spdk_rpc_register_alias_deprecated(#method, #alias); \
|
|
}
|
|
|
|
/**
|
|
* Set the state mask of the RPC server. Any RPC method whose state mask is
|
|
* equal to the state of the RPC server is allowed.
|
|
*
|
|
* \param state_mask New state mask of the RPC server.
|
|
*/
|
|
void spdk_rpc_set_state(uint32_t state_mask);
|
|
|
|
/**
|
|
* Get the current state of the RPC server.
|
|
*
|
|
* \return The current state of the RPC server.
|
|
*/
|
|
uint32_t spdk_rpc_get_state(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|