diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/internal_api/trex_platform_api.h | 7 | ||||
-rw-r--r-- | src/main_dpdk.cpp | 11 | ||||
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_general.cpp | 1 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 21 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.h | 1 |
5 files changed, 41 insertions, 0 deletions
diff --git a/src/internal_api/trex_platform_api.h b/src/internal_api/trex_platform_api.h index 249adb2f..5d5f4389 100644 --- a/src/internal_api/trex_platform_api.h +++ b/src/internal_api/trex_platform_api.h @@ -25,6 +25,7 @@ limitations under the License. #include <stdint.h> #include <vector> #include <string> +#include <string.h> /** * Global stats @@ -129,6 +130,7 @@ public: virtual int del_rx_flow_stat_rule(uint8_t port_id, uint8_t type, uint16_t proto, uint16_t id) const = 0; virtual void set_promiscuous(uint8_t port_id, bool enabled) const = 0; virtual bool get_promiscuous(uint8_t port_id) const = 0; + virtual void get_macaddr(uint8_t port_id, uint8_t *macaddr) const = 0; virtual ~TrexPlatformApi() {} }; @@ -159,6 +161,7 @@ public: int del_rx_flow_stat_rule(uint8_t port_id, uint8_t type, uint16_t proto, uint16_t id) const; void set_promiscuous(uint8_t port_id, bool enabled) const; bool get_promiscuous(uint8_t port_id) const; + void get_macaddr(uint8_t port_id, uint8_t *macaddr) const; }; @@ -215,6 +218,10 @@ public: return false; } + void get_macaddr(uint8_t port_id, uint8_t *macaddr) const { + memset(macaddr, 0, 6); + } + private: int m_dp_core_count; }; diff --git a/src/main_dpdk.cpp b/src/main_dpdk.cpp index c23e27d4..cdf4f6f3 100644 --- a/src/main_dpdk.cpp +++ b/src/main_dpdk.cpp @@ -5180,3 +5180,14 @@ bool TrexDpdkPlatformApi::get_promiscuous(uint8_t port_id) const { return g_trex.m_ports[port_id].get_promiscuous(); } +void TrexDpdkPlatformApi::get_macaddr(uint8_t port_id, uint8_t *macaddr) const { + struct ether_addr rte_mac_addr; + + g_trex.m_ports[port_id].macaddr_get(&rte_mac_addr); + + assert(ETHER_ADDR_LEN == 6); + for (int i = 0; i < 6; i++) { + macaddr[i] = rte_mac_addr.addr_bytes[i]; + } + +} diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index 05565179..47569bde 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -177,6 +177,7 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value ¶ms, Json::Value &result) { section["ports"][i]["index"] = i; section["ports"][i]["driver"] = driver; + section["ports"][i]["macaddr"] = port->get_macaddr(); section["ports"][i]["rx"]["caps"] = port->get_rx_caps(); section["ports"][i]["rx"]["counters"] = port->get_rx_count_num(); diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp index 43f32d22..01733117 100644 --- a/src/stateless/cp/trex_stateless_port.cpp +++ b/src/stateless/cp/trex_stateless_port.cpp @@ -679,7 +679,28 @@ TrexStatelessPort::get_promiscuous() { } +std::string +TrexStatelessPort::get_macaddr() { + uint8_t macaddr[6]; + std::string output; + get_stateless_obj()->get_platform_api()->get_macaddr(m_port_id, macaddr); + + for (int i = 0; i < 6; i++) { + char formatted[4]; + + if (i == 0) { + snprintf(formatted, sizeof(formatted), "%02x", macaddr[i]); + } else { + snprintf(formatted, sizeof(formatted), ":%02x", macaddr[i]); + } + + output += formatted; + } + + return output; + +} void TrexStatelessPort::add_stream(TrexStream *stream) { diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h index 1d3eebc3..0d626375 100644 --- a/src/stateless/cp/trex_stateless_port.h +++ b/src/stateless/cp/trex_stateless_port.h @@ -331,6 +331,7 @@ public: */ void set_promiscuous(bool enabled); bool get_promiscuous(); + std::string get_macaddr(); private: |