diff options
author | 2015-09-17 16:27:47 +0300 | |
---|---|---|
committer | 2015-09-17 16:27:47 +0300 | |
commit | 96765d2bf2c416f652da904cf7524ff75b678aee (patch) | |
tree | adaffcbd4782207e03198814cd288b66b07d7b36 /src/rpc-server/commands | |
parent | 1e723ff84bb6cdf6dd3a58650af059b6814b5331 (diff) |
moved 'owning states' to port granularity instead of machine
Diffstat (limited to 'src/rpc-server/commands')
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_general.cpp | 29 | ||||
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmds.h | 6 |
2 files changed, 26 insertions, 9 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index 97ccae06..106a167a 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -175,6 +175,8 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value ¶ms, Json::Value &result) { section["ports"][i]["driver"] = driver; section["ports"][i]["speed"] = speed; + section["ports"][i]["owner"] = port->get_owner(); + switch (port->get_state()) { case TrexStatelessPort::PORT_STATE_DOWN: section["ports"][i]["status"] = "down"; @@ -208,7 +210,10 @@ trex_rpc_cmd_rc_e TrexRpcCmdGetOwner::_run(const Json::Value ¶ms, Json::Value &result) { Json::Value §ion = result["result"]; - section["owner"] = TrexRpcServer::get_owner(); + uint8_t port_id = parse_port(params, result); + + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + section["owner"] = port->get_owner(); return (TREX_RPC_CMD_OK); } @@ -220,17 +225,21 @@ TrexRpcCmdGetOwner::_run(const Json::Value ¶ms, Json::Value &result) { trex_rpc_cmd_rc_e TrexRpcCmdAcquire::_run(const Json::Value ¶ms, Json::Value &result) { + uint8_t port_id = parse_port(params, result); + const string &new_owner = parse_string(params, "user", result); bool force = parse_bool(params, "force", result); /* if not free and not you and not force - fail */ - if ( (!TrexRpcServer::is_free_to_aquire()) && (TrexRpcServer::get_owner() != new_owner) && (!force)) { - generate_execute_err(result, "device is already taken by '" + TrexRpcServer::get_owner() + "'"); + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + + if ( (!port->is_free_to_aquire()) && (port->get_owner() != new_owner) && (!force)) { + generate_execute_err(result, "device is already taken by '" + port->get_owner() + "'"); } - string handle = TrexRpcServer::set_owner(new_owner); + port->set_owner(new_owner); - result["result"] = handle; + result["result"] = port->get_owner_handler(); return (TREX_RPC_CMD_OK); } @@ -242,7 +251,15 @@ TrexRpcCmdAcquire::_run(const Json::Value ¶ms, Json::Value &result) { trex_rpc_cmd_rc_e TrexRpcCmdRelease::_run(const Json::Value ¶ms, Json::Value &result) { - TrexRpcServer::clear_owner(); + uint8_t port_id = parse_port(params, result); + + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + + if (port->get_state() == TrexStatelessPort::PORT_STATE_TRANSMITTING) { + generate_execute_err(result, "cannot release a port during transmission"); + } + + port->clear_owner(); result["result"] = "ACK"; diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h index 643aa22d..e261d1c6 100644 --- a/src/rpc-server/commands/trex_rpc_cmds.h +++ b/src/rpc-server/commands/trex_rpc_cmds.h @@ -69,9 +69,9 @@ void get_hostname(std::string &hostname); /** * ownership */ -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetOwner, "get_owner", 0, false); -TREX_RPC_CMD_DEFINE(TrexRpcCmdAcquire, "acquire", 2, false); -TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 0, true); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetOwner, "get_owner", 1, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdAcquire, "acquire", 3, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 1, true); /** |