summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlinux_dpdk/ws_main.py12
-rwxr-xr-xsrc/main_dpdk.cpp2
-rw-r--r--src/stateless/cp/trex_stateless.cpp11
-rw-r--r--src/stateless/cp/trex_stateless.h11
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp13
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.cpp37
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.h42
7 files changed, 111 insertions, 17 deletions
diff --git a/linux_dpdk/ws_main.py b/linux_dpdk/ws_main.py
index b1fd8761..61a9d4f3 100755
--- a/linux_dpdk/ws_main.py
+++ b/linux_dpdk/ws_main.py
@@ -153,11 +153,12 @@ rpc_server_src = SrcGroup(dir='src/rpc-server/',
])
# stateless code
-stateless_src = SrcGroup(dir='src/stateless/cp/',
- src_list=['trex_stream.cpp',
- 'trex_stream_vm.cpp',
- 'trex_stateless.cpp',
- 'trex_stateless_port.cpp'
+stateless_src = SrcGroup(dir='src/stateless/',
+ src_list=['cp/trex_stream.cpp',
+ 'cp/trex_stream_vm.cpp',
+ 'cp/trex_stateless.cpp',
+ 'cp/trex_stateless_port.cpp',
+ 'dp/trex_stateless_dp_core.cpp'
])
# JSON package
json_src = SrcGroup(dir='external_libs/json',
@@ -413,6 +414,7 @@ includes_path =''' ../src/pal/linux_dpdk/
../src/rpc-server/
../src/stateless/cp/
+ ../src/stateless/dp/
../external_libs/yaml-cpp/include/
../external_libs/zmq/include/
diff --git a/src/main_dpdk.cpp b/src/main_dpdk.cpp
index e3d13f2b..36d5052e 100755
--- a/src/main_dpdk.cpp
+++ b/src/main_dpdk.cpp
@@ -4215,7 +4215,7 @@ static int stateless_entry(__attribute__((unused)) void *dummy) {
if (lpsock->thread_phy_is_master( phy_id )) {
TrexStateless::get_instance().launch_control_plane();
} else {
- TrexStateless::get_instance().launch_on_dp_core();
+ TrexStateless::get_instance().launch_on_dp_core(phy_id);
}
return (0);
diff --git a/src/stateless/cp/trex_stateless.cpp b/src/stateless/cp/trex_stateless.cpp
index 872fdd92..20e001c9 100644
--- a/src/stateless/cp/trex_stateless.cpp
+++ b/src/stateless/cp/trex_stateless.cpp
@@ -63,6 +63,9 @@ void TrexStateless::configure(const TrexStatelessCfg &cfg) {
/* cores */
instance.m_dp_core_count = cfg.m_dp_core_count;
+ for (int i = 0; i < instance.m_dp_core_count; i++) {
+ instance.m_dp_cores.push_back(new TrexStatelessDpCore(i));
+ }
/* done */
instance.m_is_configured = true;
@@ -90,12 +93,8 @@ TrexStateless::launch_control_plane() {
}
void
-TrexStateless::launch_on_dp_core() {
- //std::cout << "\n on DP core \n";
-
- while (true) {
- sleep(1);
- }
+TrexStateless::launch_on_dp_core(uint8_t core_id) {
+ m_dp_cores[core_id - 1]->run();
}
/**
diff --git a/src/stateless/cp/trex_stateless.h b/src/stateless/cp/trex_stateless.h
index 5c674fd6..ef612e84 100644
--- a/src/stateless/cp/trex_stateless.h
+++ b/src/stateless/cp/trex_stateless.h
@@ -26,6 +26,8 @@ limitations under the License.
#include <stdexcept>
#include <trex_stream.h>
+#include <trex_stateless_port.h>
+#include <trex_stateless_dp_core.h>
#include <trex_rpc_server_api.h>
/**
@@ -141,7 +143,7 @@ public:
* launch on a single DP core
*
*/
- void launch_on_dp_core();
+ void launch_on_dp_core(uint8_t core_id);
TrexStatelessPort * get_port_by_id(uint8_t port_id);
uint8_t get_port_count();
@@ -181,11 +183,12 @@ protected:
TrexRpcServer *m_rpc_server;
/* ports */
- std::vector <TrexStatelessPort *> m_ports;
- uint8_t m_port_count;
+ std::vector <TrexStatelessPort *> m_ports;
+ uint8_t m_port_count;
/* cores */
- uint8_t m_dp_core_count;
+ std::vector <TrexStatelessDpCore *> m_dp_cores;
+ uint8_t m_dp_core_count;
/* stats */
TrexStatelessStats m_stats;
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index 031efb58..240b7582 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -22,6 +22,13 @@ limitations under the License.
#include <trex_stateless_port.h>
#include <string>
+// DPDK c++ issue
+#define UINT8_MAX 255
+#define UINT16_MAX 0xFFFF
+// DPDK c++ issue
+
+#include <rte_ethdev.h>
+
using namespace std;
/***************************
@@ -143,7 +150,11 @@ TrexStatelessPort::update_stats() {
#else
/* real update work */
- #endif
+ struct rte_eth_stats stats;
+ rte_eth_stats_get(m_port_id, &stats);
+ printf("ipackets is %u\n", stats.ipackets);
+ printf("opackets is %u\n", stats.opackets);
+ #endif
}
const TrexPortStats &
diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp
new file mode 100644
index 00000000..4e9309ab
--- /dev/null
+++ b/src/stateless/dp/trex_stateless_dp_core.cpp
@@ -0,0 +1,37 @@
+/*
+ Itay Marom
+ Cisco Systems, Inc.
+*/
+
+/*
+Copyright (c) 2015-2015 Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+#include <trex_stateless_dp_core.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <trex_stateless.h>
+
+TrexStatelessDpCore::TrexStatelessDpCore(uint8_t core_id) : m_core_id(core_id) {
+}
+
+void
+TrexStatelessDpCore::run() {
+ printf("On DP core %d\n", m_core_id);
+ while (true) {
+ sleep(1);
+ TrexStateless::get_instance().get_port_by_id(0)->update_stats();
+ }
+}
diff --git a/src/stateless/dp/trex_stateless_dp_core.h b/src/stateless/dp/trex_stateless_dp_core.h
new file mode 100644
index 00000000..d428bac2
--- /dev/null
+++ b/src/stateless/dp/trex_stateless_dp_core.h
@@ -0,0 +1,42 @@
+/*
+ Itay Marom
+ Cisco Systems, Inc.
+*/
+
+/*
+Copyright (c) 2015-2015 Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+#ifndef __TREX_STATELESS_DP_CORE_H__
+#define __TREX_STATELESS_DP_CORE_H__
+
+#include <stdint.h>
+
+/**
+ * stateless DP core object
+ *
+ */
+class TrexStatelessDpCore {
+public:
+
+ TrexStatelessDpCore(uint8_t core_id);
+
+ /* starts the DP core run */
+ void run();
+
+private:
+ uint8_t m_core_id;
+};
+
+#endif /* __TREX_STATELESS_DP_CORE_H__ */