From aaef3f95683bfa1574537c543e4ffc86afb0480f Mon Sep 17 00:00:00 2001 From: imarom Date: Thu, 25 Feb 2016 09:54:45 -0500 Subject: port attributes - promiscuous and etc. --- src/rpc-server/commands/trex_rpc_cmd_general.cpp | 36 ++++++++++++++++++++++++ src/rpc-server/commands/trex_rpc_cmds.h | 2 +- src/rpc-server/trex_rpc_cmds_table.cpp | 1 + 3 files changed, 38 insertions(+), 1 deletion(-) (limited to 'src/rpc-server') diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index 9b3b59a7..05565179 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -207,6 +207,39 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value ¶ms, Json::Value &result) { return (TREX_RPC_CMD_OK); } +/** + * set port commands + * + * @author imarom (24-Feb-16) + * + * @param params + * @param result + * + * @return trex_rpc_cmd_rc_e + */ +trex_rpc_cmd_rc_e +TrexRpcCmdSetPortAttr::_run(const Json::Value ¶ms, Json::Value &result) { + + uint8_t port_id = parse_port(params, result); + TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(port_id); + + const Json::Value &attr = parse_object(params, "attr", result); + + /* iterate over all attributes in the dict */ + for (const std::string &name : attr.getMemberNames()) { + + /* handle promiscuous */ + if (name == "promiscuous") { + bool enabled = parse_bool(attr[name], "enabled", result); + port->set_promiscuous(enabled); + } + } + + result["result"] = Json::objectValue; + return (TREX_RPC_CMD_OK); +} + + /** * returns the current owner of the device * @@ -318,6 +351,9 @@ TrexRpcCmdGetPortStatus::_run(const Json::Value ¶ms, Json::Value &result) { result["result"]["state"] = port->get_state_as_string(); result["result"]["max_stream_id"] = port->get_max_stream_id(); + /* attributes */ + result["result"]["attr"]["promiscuous"]["enabled"] = port->get_promiscuous(); + return (TREX_RPC_CMD_OK); } diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h index 9545e585..ac63e39d 100644 --- a/src/rpc-server/commands/trex_rpc_cmds.h +++ b/src/rpc-server/commands/trex_rpc_cmds.h @@ -81,7 +81,7 @@ TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 1, true); */ TREX_RPC_CMD_DEFINE(TrexRpcCmdGetPortStats, "get_port_stats", 1, false); TREX_RPC_CMD_DEFINE(TrexRpcCmdGetPortStatus, "get_port_status", 1, false); - +TREX_RPC_CMD_DEFINE(TrexRpcCmdSetPortAttr, "set_port_attr", 3, false); /** * stream cmds diff --git a/src/rpc-server/trex_rpc_cmds_table.cpp b/src/rpc-server/trex_rpc_cmds_table.cpp index 5218cd0a..7b8dfdfc 100644 --- a/src/rpc-server/trex_rpc_cmds_table.cpp +++ b/src/rpc-server/trex_rpc_cmds_table.cpp @@ -43,6 +43,7 @@ TrexRpcCommandsTable::TrexRpcCommandsTable() { register_command(new TrexRpcCmdRelease()); register_command(new TrexRpcCmdGetPortStats()); register_command(new TrexRpcCmdGetPortStatus()); + register_command(new TrexRpcCmdSetPortAttr()); /* stream commands */ -- cgit 1.2.3-korg