diff options
Diffstat (limited to 'src/rpc-server/commands')
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_general.cpp | 26 | ||||
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmds.h | 2 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index 27010e0e..c3fba8e1 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -92,6 +92,32 @@ TrexRpcCmdPing::_run(const Json::Value ¶ms, Json::Value &result) { } /** + * shutdown command + */ +trex_rpc_cmd_rc_e +TrexRpcCmdShutdown::_run(const Json::Value ¶ms, Json::Value &result) { + + const string &user = parse_string(params, "user", result); + bool force = parse_bool(params, "force", result); + + /* verify every port is either free or owned by the issuer */ + for (auto port : get_stateless_obj()->get_port_list()) { + TrexPortOwner &owner = port->get_owner(); + if ( (!owner.is_free()) && (!owner.is_owned_by(user)) && !force) { + std::stringstream ss; + ss << "port " << int(port->get_port_id()) << " is owned by '" << owner.get_name() << "' - specify 'force' for override"; + generate_execute_err(result, ss.str()); + } + } + + /* signal that we got a shutdown request */ + get_stateless_obj()->get_platform_api()->mark_for_shutdown("server received RPC 'shutdown' request"); + + result["result"] = Json::objectValue; + return (TREX_RPC_CMD_OK); +} + +/** * query command */ trex_rpc_cmd_rc_e diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h index 2776727d..24b95227 100644 --- a/src/rpc-server/commands/trex_rpc_cmds.h +++ b/src/rpc-server/commands/trex_rpc_cmds.h @@ -133,5 +133,7 @@ TREX_RPC_CMD_DEFINE(TrexRpcCmdValidate, "validate", 2, false, APIClass::API_CLAS TREX_RPC_CMD_DEFINE(TrexRpcCmdPushRemote, "push_remote", 6, true, APIClass::API_CLASS_TYPE_CORE); +TREX_RPC_CMD_DEFINE(TrexRpcCmdShutdown, "shutdown", 2, false, APIClass::API_CLASS_TYPE_CORE); + #endif /* __TREX_RPC_CMD_H__ */ |