diff options
author | 2017-01-29 17:14:41 +0200 | |
---|---|---|
committer | 2017-02-02 13:42:36 +0200 | |
commit | 39000f461de6b85877db85488b1cc7f1fad9d359 (patch) | |
tree | 8ffa214f3876009bf8778881c63b6c245244ac41 /src | |
parent | 790059069915a700905f4746b22a9a4a6cadc6ad (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.cpp | 20 | ||||
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_general.cpp | 8 | ||||
-rw-r--r-- | src/stateless/cp/trex_api_class.h | 2 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless.cpp | 2 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 5 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.h | 15 | ||||
-rw-r--r-- | src/trex_port_attr.cpp | 1 | ||||
-rwxr-xr-x | src/trex_port_attr.h | 6 |
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 ¶ms, 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 ¶ms, 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 ¶ms, 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; } |