summaryrefslogtreecommitdiffstats
path: root/src/rpc-server
diff options
context:
space:
mode:
Diffstat (limited to 'src/rpc-server')
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp26
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_stream.cpp53
2 files changed, 73 insertions, 6 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index 1a7132ff..9570aae7 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -25,6 +25,8 @@ limitations under the License.
#include <trex_stateless_port.h>
#include <trex_rpc_cmds_table.h>
+#include <internal_api/trex_platform_api.h>
+
#include <fstream>
#include <iostream>
#include <unistd.h>
@@ -167,14 +169,34 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value &params, Json::Value &result) {
for (int i = 0; i < main->get_port_count(); i++) {
string driver;
- string speed;
+ TrexPlatformApi::driver_speed_e speed;
TrexStatelessPort *port = main->get_port_by_id(i);
port->get_properties(driver, speed);
section["ports"][i]["index"] = i;
+
section["ports"][i]["driver"] = driver;
- section["ports"][i]["speed"] = speed;
+
+ switch (speed) {
+ case TrexPlatformApi::SPEED_1G:
+ section["ports"][i]["speed"] = 1;
+ break;
+
+ case TrexPlatformApi::SPEED_10G:
+ section["ports"][i]["speed"] = 10;
+ break;
+
+ case TrexPlatformApi::SPEED_40G:
+ section["ports"][i]["speed"] = 40;
+ break;
+
+ default:
+ /* unknown value */
+ section["ports"][i]["speed"] = 0;
+ break;
+ }
+
section["ports"][i]["owner"] = port->get_owner();
diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
index cdd13ed6..96224d4e 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
@@ -463,7 +463,6 @@ trex_rpc_cmd_rc_e
TrexRpcCmdStartTraffic::_run(const Json::Value &params, Json::Value &result) {
uint8_t port_id = parse_byte(params, "port_id", result);
- double mul = parse_double(params, "mul", result);
double duration = parse_double(params, "duration", result);
if (port_id >= get_stateless_obj()->get_port_count()) {
@@ -474,8 +473,33 @@ TrexRpcCmdStartTraffic::_run(const Json::Value &params, Json::Value &result) {
TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(port_id);
+
+ const Json::Value &mul = parse_object(params, "mul", result);
+
+ std::string mul_type = parse_string(mul, "type", result);
+ double max_rate = parse_double(mul, "max", result);
+
+
+ double m = 0;
+
+ /* dispatch according to type of multiplier */
+ if (mul_type == "raw") {
+ m = max_rate;
+
+ } else if (mul_type == "max_bps") {
+ m = port->calculate_m_from_bps(max_rate);
+
+ } else if (mul_type == "max_pps") {
+ m = port->calculate_m_from_pps(max_rate);
+
+ } else {
+ generate_parse_err(result, "multiplier type can be either 'raw', 'max_bps' or 'max_pps'");
+ }
+
+
try {
- port->start_traffic(mul, duration);
+ port->start_traffic(m, duration);
+
} catch (const TrexRpcException &ex) {
generate_execute_err(result, ex.what());
}
@@ -617,7 +641,6 @@ trex_rpc_cmd_rc_e
TrexRpcCmdUpdateTraffic::_run(const Json::Value &params, Json::Value &result) {
uint8_t port_id = parse_byte(params, "port_id", result);
- double mul = parse_double(params, "mul", result);
if (port_id >= get_stateless_obj()->get_port_count()) {
std::stringstream ss;
@@ -627,8 +650,30 @@ TrexRpcCmdUpdateTraffic::_run(const Json::Value &params, Json::Value &result) {
TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(port_id);
+ /* multiplier */
+ const Json::Value &mul = parse_object(params, "mul", result);
+
+ std::string mul_type = parse_string(mul, "type", result);
+ double max_rate = parse_double(mul, "max", result);
+
+ double m = 0;
+
+ /* dispatch according to type of multiplier */
+ if (mul_type == "raw") {
+ m = max_rate;
+
+ } else if (mul_type == "max_bps") {
+ m = port->calculate_m_from_bps(max_rate);
+
+ } else if (mul_type == "max_pps") {
+ m = port->calculate_m_from_pps(max_rate);
+
+ } else {
+ generate_parse_err(result, "multiplier type can be either 'raw', 'max_bps' or 'max_pps'");
+ }
+
try {
- port->update_traffic(mul);
+ port->update_traffic(m);
} catch (const TrexRpcException &ex) {
generate_execute_err(result, ex.what());
}