summaryrefslogtreecommitdiffstats
path: root/src/stateless/dp/trex_stateless_dp_core.cpp
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2015-10-29 18:15:17 +0200
committerimarom <imarom@cisco.com>2015-10-29 18:15:17 +0200
commit9a820782c35c6de79d2e724a48087e8ee62fc72d (patch)
tree08b13a55cd5eb4f93d51fca5fc373a9c7a9dfb72 /src/stateless/dp/trex_stateless_dp_core.cpp
parente0e66e7eef2f9d1f4cb1c93841b2345a42c8d278 (diff)
Hanoch's review comments #1 : fixed performancei issue
with the stateless node
Diffstat (limited to 'src/stateless/dp/trex_stateless_dp_core.cpp')
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.cpp43
1 files changed, 4 insertions, 39 deletions
diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp
index 73387f0e..9c10504e 100644
--- a/src/stateless/dp/trex_stateless_dp_core.cpp
+++ b/src/stateless/dp/trex_stateless_dp_core.cpp
@@ -21,20 +21,10 @@ limitations under the License.
#include <trex_stateless_dp_core.h>
#include <trex_stateless_messaging.h>
#include <trex_streams_compiler.h>
+#include <trex_stream_node.h>
#include <bp_sim.h>
-/**
- * extended info for the stateless node
- * TODO:
- * static_assert(sizeof(dp_node_extended_info_st) <= sizeof(CGenNodeStateless::m_pad_end), "hello");
- */
-typedef struct dp_node_extended_info_ {
- double next_time_offset;
- uint8_t is_stream_active;
-
-} dp_node_extended_info_st;
-
TrexStatelessDpCore::TrexStatelessDpCore(uint8_t thread_id, CFlowGenListPerThread *core) {
m_thread_id = thread_id;
m_core = core;
@@ -62,29 +52,6 @@ TrexStatelessDpCore::start() {
}
void
-TrexStatelessDpCore::handle_pkt_event(CGenNode *node) {
-
- //TODO: optimize the fast path here...
-
- CGenNodeStateless *node_sl = (CGenNodeStateless *)node;
- dp_node_extended_info_st *opaque = (dp_node_extended_info_st *)node_sl->get_opaque_storage();
-
- /* is this stream active ? */
- if (!opaque->is_stream_active) {
- m_core->free_node(node);
- return;
- }
-
- m_core->m_node_gen.m_v_if->send_node(node);
-
- /* in case of continues */
- node->m_time += opaque->next_time_offset;
-
- /* insert a new event */
- m_core->m_node_gen.m_p_queue.push(node);
-}
-
-void
TrexStatelessDpCore::add_cont_stream(double pps, const uint8_t *pkt, uint16_t pkt_len) {
CGenNodeStateless *node = m_core->create_node_sl();
@@ -100,9 +67,8 @@ TrexStatelessDpCore::add_cont_stream(double pps, const uint8_t *pkt, uint16_t pk
uint16_t pkt_size = pkt_len;
const uint8_t *stream_pkt = pkt;
- dp_node_extended_info_st *opaque = (dp_node_extended_info_st *)node->get_opaque_storage();
- opaque->next_time_offset = 1.0 / pps;
- opaque->is_stream_active = 1;
+ node->m_next_time_offset = 1.0 / pps;
+ node->m_is_stream_active = 1;
/* allocate const mbuf */
rte_mbuf_t *m = CGlobalInfo::pktmbuf_alloc(node->get_socket_id(), pkt_size);
@@ -145,8 +111,7 @@ TrexStatelessDpCore::stop_traffic() {
for every active node - make sure next time
the scheduler invokes it, it will be free */
for (auto node : m_active_nodes) {
- dp_node_extended_info_st *opaque = (dp_node_extended_info_st *)node->get_opaque_storage();
- opaque->is_stream_active = 0;
+ node->m_is_stream_active = 0;
}
m_active_nodes.clear();