summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/flow_stat.cpp6
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp4
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_stream.cpp15
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp3
-rw-r--r--src/stateless/cp/trex_stateless_port.h14
5 files changed, 36 insertions, 6 deletions
diff --git a/src/flow_stat.cpp b/src/flow_stat.cpp
index 298bcb52..e97586f7 100644
--- a/src/flow_stat.cpp
+++ b/src/flow_stat.cpp
@@ -587,7 +587,11 @@ bool CFlowStatRuleMgr::dump_json(std::string & json) {
// read hw counters, and update
data_section["timestamp"] = Json::Value::UInt64(os_get_hr_tick_64());
for (uint8_t port = 0; port < m_num_ports; port++) {
- m_api->get_rx_stats(port, stats, -1, false);
+ int rc = m_api->get_rx_stats(port, stats, -1, false);
+ if (rc == -1) {
+ continue;
+ }
+
for (int i = 0; i < TREX_FDIR_STAT_SIZE; i++) {
if (stats[i] != 0) {
m_user_id_map.find_user_id(m_hw_id_map.get_user_id(i))->set_rx_counter(port, stats[i]);
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index 6ac88352..9b3b59a7 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -178,6 +178,10 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value &params, Json::Value &result) {
section["ports"][i]["driver"] = driver;
+ section["ports"][i]["rx"]["caps"] = port->get_rx_caps();
+ section["ports"][i]["rx"]["counters"] = port->get_rx_count_num();
+
+
switch (speed) {
case TrexPlatformApi::SPEED_1G:
section["ports"][i]["speed"] = 1;
diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
index 5e23b813..cf11f8c6 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
@@ -105,18 +105,23 @@ TrexRpcCmdAddStream::_run(const Json::Value &params, Json::Value &result) {
stream->m_rx_check.m_enabled = parse_bool(rx, "enabled", result);
+ TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(stream->m_port_id);
+
/* if it is enabled - we need more fields */
if (stream->m_rx_check.m_enabled) {
- stream->m_rx_check.m_user_id = parse_int(rx, "stream_id", result);
- stream->m_rx_check.m_seq_enabled = parse_bool(rx, "seq_enabled", result);
- stream->m_rx_check.m_latency = parse_bool(rx, "latency_enabled", result);
+
+ if (port->get_rx_caps() == 0) {
+ generate_parse_err(result, "RX stats is not supported on this interface");
+ }
+
+ stream->m_rx_check.m_user_id = parse_int(rx, "stream_id", result);
+ stream->m_rx_check.m_seq_enabled = parse_bool(rx, "seq_enabled", result);
+ stream->m_rx_check.m_latency = parse_bool(rx, "latency_enabled", result);
}
/* make sure this is a valid stream to add */
validate_stream(stream, result);
- TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(stream->m_port_id);
-
try {
port->add_stream(stream.get());
stream.release();
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index 88c38112..d2463925 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -61,6 +61,9 @@ TrexStatelessPort::TrexStatelessPort(uint8_t port_id, const TrexPlatformApi *api
/* get the platform specific data */
api->get_interface_info(port_id, m_driver_name, m_speed, m_has_crc);
+ /* get RX caps */
+ api->get_interface_stat_info(port_id, m_rx_count_num, m_rx_caps);
+
/* get the DP cores belonging to this port */
api->port_id_to_cores(m_port_id, core_pair_list);
diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h
index 434181c4..a956c421 100644
--- a/src/stateless/cp/trex_stateless_port.h
+++ b/src/stateless/cp/trex_stateless_port.h
@@ -284,6 +284,18 @@ public:
uint64_t get_port_speed_bps() const;
/**
+ * return RX caps
+ *
+ */
+ int get_rx_caps() const {
+ return m_rx_caps;
+ }
+
+ uint16_t get_rx_count_num() const {
+ return m_rx_count_num;
+ }
+
+ /**
* return true if port adds CRC to a packet (not occurs for
* VNICs)
*
@@ -376,6 +388,8 @@ private:
port_state_e m_port_state;
std::string m_driver_name;
bool m_has_crc;
+ uint16_t m_rx_count_num;
+ uint16_t m_rx_caps;
TrexPlatformApi::driver_speed_e m_speed;