summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYaroslav Brustinov <ybrustin@cisco.com>2017-01-29 17:14:41 +0200
committerYaroslav Brustinov <ybrustin@cisco.com>2017-02-02 13:42:36 +0200
commit39000f461de6b85877db85488b1cc7f1fad9d359 (patch)
tree8ffa214f3876009bf8778881c63b6c245244ac41 /src
parent790059069915a700905f4746b22a9a4a6cadc6ad (diff)
ipv6 scan & ping
Change-Id: I4f8112b4c942d149da5ea3f0ee01ac82d7fe32cc Signed-off-by: Yaroslav Brustinov <ybrustin@cisco.com>
Diffstat (limited to 'src')
-rw-r--r--src/main_dpdk.cpp20
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp8
-rw-r--r--src/stateless/cp/trex_api_class.h2
-rw-r--r--src/stateless/cp/trex_stateless.cpp2
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp5
-rw-r--r--src/stateless/cp/trex_stateless_port.h15
-rw-r--r--src/trex_port_attr.cpp1
-rwxr-xr-xsrc/trex_port_attr.h6
8 files changed, 57 insertions, 2 deletions
diff --git a/src/main_dpdk.cpp b/src/main_dpdk.cpp
index ebad39df..687cf457 100644
--- a/src/main_dpdk.cpp
+++ b/src/main_dpdk.cpp
@@ -1874,6 +1874,15 @@ int DpdkTRexPortAttr::set_promiscuous(bool enable){
return 0;
}
+int DpdkTRexPortAttr::set_multicast(bool enable){
+ if (enable) {
+ rte_eth_allmulticast_enable(m_port_id);
+ }else{
+ rte_eth_allmulticast_disable(m_port_id);
+ }
+ return 0;
+}
+
int DpdkTRexPortAttr::set_link_up(bool up){
if (up) {
return rte_eth_dev_set_link_up(m_port_id);
@@ -1893,6 +1902,17 @@ bool DpdkTRexPortAttr::get_promiscuous(){
return ( ret?true:false);
}
+bool DpdkTRexPortAttr::get_multicast(){
+ int ret=rte_eth_allmulticast_get(m_port_id);
+ if (ret<0) {
+ rte_exit(EXIT_FAILURE, "rte_eth_allmulticast_get: "
+ "err=%d, port=%u\n",
+ ret, m_port_id);
+
+ }
+ return ( ret?true:false);
+}
+
void DpdkTRexPortAttr::get_hw_src_mac(struct ether_addr *mac_addr){
rte_eth_macaddr_get(m_port_id , mac_addr);
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index 60180659..d2546740 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -296,12 +296,14 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value &params, Json::Value &result) {
string driver;
string pci_addr;
string description;
+ string hw_mac;
supp_speeds_t supp_speeds;
int numa;
TrexStatelessPort *port = main->get_port_by_id(i);
port->get_properties(driver);
+ port->get_hw_mac(hw_mac);
port->get_pci_info(pci_addr, numa);
main->get_platform_api()->getPortAttrObj(i)->get_description(description);
@@ -314,6 +316,7 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value &params, Json::Value &result) {
section["ports"][i]["pci_addr"] = pci_addr;
section["ports"][i]["numa"] = numa;
+ section["ports"][i]["hw_mac"] = hw_mac;
uint16_t caps = port->get_rx_caps();
section["ports"][i]["rx"]["caps"] = Json::arrayValue;
@@ -368,6 +371,11 @@ TrexRpcCmdSetPortAttr::_run(const Json::Value &params, Json::Value &result) {
ret = get_stateless_obj()->get_platform_api()->getPortAttrObj(port_id)->set_promiscuous(enabled);
}
+ else if (name == "multicast") {
+ bool enabled = parse_bool(attr[name], "enabled", result);
+ ret = get_stateless_obj()->get_platform_api()->getPortAttrObj(port_id)->set_multicast(enabled);
+ }
+
else if (name == "link_status") {
bool up = parse_bool(attr[name], "up", result);
ret = get_stateless_obj()->get_platform_api()->getPortAttrObj(port_id)->set_link_up(up);
diff --git a/src/stateless/cp/trex_api_class.h b/src/stateless/cp/trex_api_class.h
index 748d1478..a4c4bb65 100644
--- a/src/stateless/cp/trex_api_class.h
+++ b/src/stateless/cp/trex_api_class.h
@@ -82,7 +82,7 @@ public:
}
std::string get_server_ver() {
- return ver(m_major, m_major);
+ return ver(m_major, m_minor);
}
std::string & verify_api(int major, int minor) {
diff --git a/src/stateless/cp/trex_stateless.cpp b/src/stateless/cp/trex_stateless.cpp
index 6ab9b417..b42391f5 100644
--- a/src/stateless/cp/trex_stateless.cpp
+++ b/src/stateless/cp/trex_stateless.cpp
@@ -56,7 +56,7 @@ TrexStateless::TrexStateless(const TrexStatelessCfg &cfg) {
/* API core version */
const int API_VER_MAJOR = 3;
- const int API_VER_MINOR = 0;
+ const int API_VER_MINOR = 1;
m_api_classes[APIClass::API_CLASS_TYPE_CORE].init(APIClass::API_CLASS_TYPE_CORE,
API_VER_MAJOR,
API_VER_MINOR);
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index b88ac715..b0366fb5 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -916,6 +916,11 @@ TrexStatelessPort::get_pci_info(std::string &pci_addr, int &numa_node) {
}
void
+TrexStatelessPort::get_hw_mac(std::string &hw_mac) {
+ utl_macaddr_to_str(m_api_info.hw_macaddr, hw_mac);
+}
+
+void
TrexStatelessPort::add_stream(TrexStream *stream) {
verify_state(PORT_STATE_IDLE | PORT_STATE_STREAMS, "add_stream");
diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h
index 4b8ea3d9..296e0d05 100644
--- a/src/stateless/cp/trex_stateless_port.h
+++ b/src/stateless/cp/trex_stateless_port.h
@@ -388,6 +388,21 @@ public:
void get_pci_info(std::string &pci_addr, int &numa_node);
+ void get_hw_mac(std::string &hw_mac);
+
+
+ /**
+ * enable RX capture on port
+ *
+ */
+ void start_rx_capture(const std::string &pcap_filename, uint64_t limit);
+
+ /**
+ * disable RX capture if on
+ *
+ */
+ void stop_rx_capture();
+
/**
* start RX queueing of packets
*
diff --git a/src/trex_port_attr.cpp b/src/trex_port_attr.cpp
index 4c5ac9e4..f2c75859 100644
--- a/src/trex_port_attr.cpp
+++ b/src/trex_port_attr.cpp
@@ -150,6 +150,7 @@ void
TRexPortAttr::to_json(Json::Value &output) {
output["promiscuous"]["enabled"] = get_promiscuous();
+ output["multicast"]["enabled"] = get_multicast();
output["link"]["up"] = is_link_up();
output["speed"] = get_link_speed() / 1000; // make sure we have no cards of less than 1 Gbps
output["rx_filter_mode"] = get_rx_filter_mode();
diff --git a/src/trex_port_attr.h b/src/trex_port_attr.h
index a2fcf7e9..7a1a88f0 100755
--- a/src/trex_port_attr.h
+++ b/src/trex_port_attr.h
@@ -203,6 +203,7 @@ public:
/* GETTERS */
virtual bool get_promiscuous() = 0;
+ virtual bool get_multicast() = 0;
virtual void get_hw_src_mac(struct ether_addr *mac_addr) = 0;
virtual uint32_t get_link_speed() { return m_link.link_speed; } // L1 Mbps
virtual bool is_link_duplex() { return (m_link.link_duplex ? true : false); }
@@ -223,6 +224,7 @@ public:
/* SETTERS */
virtual int set_promiscuous(bool enabled) = 0;
+ virtual int set_multicast(bool enabled) = 0;
virtual int add_mac(char * mac) = 0;
virtual int set_link_up(bool up) = 0;
virtual int set_flow_ctrl(int mode) = 0;
@@ -323,6 +325,7 @@ public:
/* GETTERS */
virtual bool get_promiscuous();
+ virtual bool get_multicast();
virtual void get_hw_src_mac(struct ether_addr *mac_addr);
virtual int get_xstats_values(xstats_values_t &xstats_values);
virtual int get_xstats_names(xstats_names_t &xstats_names);
@@ -332,6 +335,7 @@ public:
/* SETTERS */
virtual int set_promiscuous(bool enabled);
+ virtual int set_multicast(bool enabled);
virtual int add_mac(char * mac);
virtual int set_link_up(bool up);
virtual int set_flow_ctrl(int mode);
@@ -377,6 +381,7 @@ public:
void reset_xstats() {}
void update_description() {}
bool get_promiscuous() { return false; }
+ bool get_multicast() { return false; }
void get_hw_src_mac(struct ether_addr *mac_addr) {}
int get_xstats_values(xstats_values_t &xstats_values) { return -ENOTSUP; }
int get_xstats_names(xstats_names_t &xstats_names) { return -ENOTSUP; }
@@ -384,6 +389,7 @@ public:
void get_description(std::string &description) {}
void get_supported_speeds(supp_speeds_t &supp_speeds) {}
int set_promiscuous(bool enabled) { return -ENOTSUP; }
+ int set_multicast(bool enabled) { return -ENOTSUP; }
int add_mac(char * mac) { return -ENOTSUP; }
int set_link_up(bool up) { return -ENOTSUP; }
int set_flow_ctrl(int mode) { return -ENOTSUP; }