summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2017-01-24 14:11:32 +0200
committerimarom <imarom@cisco.com>2017-01-24 14:11:32 +0200
commit19df06349d311377ca1ef10f91ef1f786b41418b (patch)
tree3c5fa2e76fd5dd0dff370df7013e757e289b1ac5
parent418fd3d0a7169f2d8934e8be82d11e1a388d681c (diff)
code review cleanups - C++
Signed-off-by: imarom <imarom@cisco.com>
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py2
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp7
-rw-r--r--src/stateless/common/trex_stateless_pkt.cpp18
-rw-r--r--src/stateless/common/trex_stateless_pkt.h58
-rw-r--r--src/stateless/rx/trex_stateless_capture.cpp8
-rw-r--r--src/stateless/rx/trex_stateless_capture.h15
-rw-r--r--src/stateless/rx/trex_stateless_rx_port_mngr.cpp2
7 files changed, 83 insertions, 27 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
index f7432107..d81765c6 100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
@@ -3049,7 +3049,7 @@ class STLClient(object):
if not rc:
raise STLError(rc)
- return {'id': rc.data()['capture_id'], 'ts': rc.data()['ts']}
+ return {'id': rc.data()['capture_id'], 'ts': rc.data()['start_ts']}
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index 6f0ab09a..c20c77d4 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -901,12 +901,16 @@ TrexRpcCmdCapture::parse_cmd_start(const Json::Value &params, Json::Value &resul
/* populate the filter */
for (int i = 0; i < tx_json.size(); i++) {
uint8_t tx_port = parse_byte(tx_json, i, result);
+ validate_port_id(tx_port, result);
+
filter.add_tx(tx_port);
ports.insert(tx_port);
}
for (int i = 0; i < rx_json.size(); i++) {
uint8_t rx_port = parse_byte(rx_json, i, result);
+ validate_port_id(rx_port, result);
+
filter.add_rx(rx_port);
ports.insert(rx_port);
}
@@ -922,6 +926,7 @@ TrexRpcCmdCapture::parse_cmd_start(const Json::Value &params, Json::Value &resul
static MsgReply<TrexCaptureRCStart> reply;
reply.reset();
+ /* send a start message to RX core */
TrexStatelessRxCaptureStart *start_msg = new TrexStatelessRxCaptureStart(filter, limit, reply);
get_stateless_obj()->send_msg_to_rx(start_msg);
@@ -931,7 +936,7 @@ TrexRpcCmdCapture::parse_cmd_start(const Json::Value &params, Json::Value &resul
}
result["result"]["capture_id"] = rc.get_new_id();
- result["result"]["ts"] = now_sec();
+ result["result"]["start_ts"] = rc.get_start_ts();
}
/**
diff --git a/src/stateless/common/trex_stateless_pkt.cpp b/src/stateless/common/trex_stateless_pkt.cpp
index f7d47ec0..14c14462 100644
--- a/src/stateless/common/trex_stateless_pkt.cpp
+++ b/src/stateless/common/trex_stateless_pkt.cpp
@@ -34,7 +34,7 @@
*
* @return uint8_t*
*/
-void copy_mbuf(uint8_t *dest, const rte_mbuf_t *m) {
+void mbuf_to_buffer(uint8_t *dest, const rte_mbuf_t *m) {
int index = 0;
for (const rte_mbuf_t *it = m; it != NULL; it = it->next) {
@@ -55,7 +55,7 @@ TrexPkt::TrexPkt(const rte_mbuf_t *m, int port, origin_e origin, uint64_t index)
m_raw = new uint8_t[m_size];
/* copy data */
- copy_mbuf(m_raw, m);
+ mbuf_to_buffer(m_raw, m);
/* generate a packet timestamp */
m_timestamp = now_sec();
@@ -76,6 +76,12 @@ TrexPkt::TrexPkt(const TrexPkt &other) {
m_index = other.m_index;
}
+
+/**************************************
+ * TRex packet buffer
+ *
+ *************************************/
+
TrexPktBuffer::TrexPktBuffer(uint64_t size, mode_e mode) {
m_mode = mode;
m_buffer = nullptr;
@@ -117,13 +123,14 @@ TrexPktBuffer::push(const rte_mbuf_t *m, int port, TrexPkt::origin_e origin, uin
/* push packet */
m_buffer[m_head] = new TrexPkt(m, port, origin, pkt_index);
m_bytes += m_buffer[m_head]->get_size();
-
- m_head = next(m_head);
+ /* advance */
+ m_head = next(m_head);
}
/**
* packet will be handled internally
+ * packet pointer is invalid after this call
*/
void
TrexPktBuffer::push(const TrexPkt *pkt) {
@@ -140,6 +147,8 @@ TrexPktBuffer::push(const TrexPkt *pkt) {
/* push packet */
m_buffer[m_head] = pkt;
+ m_bytes += pkt->get_size();
+
m_head = next(m_head);
}
@@ -179,4 +188,3 @@ TrexPktBuffer::to_json() const {
return output;
}
-
diff --git a/src/stateless/common/trex_stateless_pkt.h b/src/stateless/common/trex_stateless_pkt.h
index 1b6bd2f8..573f4950 100644
--- a/src/stateless/common/trex_stateless_pkt.h
+++ b/src/stateless/common/trex_stateless_pkt.h
@@ -32,33 +32,45 @@
/**
* copies MBUF to a flat buffer
*
- * @author imarom (1/1/2017)
- *
- * @param dest
- * @param m
*/
-void copy_mbuf(uint8_t *dest, const rte_mbuf_t *m);
+void mbuf_to_buffer(uint8_t *dest, const rte_mbuf_t *m);
-/**
- * describes a single saved packet
+/**************************************
+ * TRex packet
*
- */
+ *************************************/
class TrexPkt {
public:
+ /**
+ * origin of the created packet
+ */
enum origin_e {
ORIGIN_NONE = 1,
ORIGIN_TX,
ORIGIN_RX
};
+ /**
+ * generate a packet from MBUF
+ */
TrexPkt(const rte_mbuf_t *m, int port = -1, origin_e origin = ORIGIN_NONE, uint64_t index = 0);
+
+ /**
+ * duplicate an existing packet
+ */
TrexPkt(const TrexPkt &other);
+
+ /**
+ * sets a packet index
+ * used by a buffer of packets
+ */
void set_index(uint64_t index) {
m_index = index;
}
+
/* slow path and also RVO - pass by value is ok */
Json::Value to_json() const {
Json::Value output;
@@ -115,6 +127,10 @@ private:
};
+/**************************************
+ * TRex packet buffer
+ *
+ *************************************/
class TrexPktBuffer {
public:
@@ -136,10 +152,23 @@ public:
~TrexPktBuffer();
/**
- * push a packet to the buffer
- *
+ * push a packet to the buffer
+ * packet will be generated from a MBUF
+ *
+ */
+ void push(const rte_mbuf_t *m,
+ int port = -1,
+ TrexPkt::origin_e origin = TrexPkt::ORIGIN_NONE,
+ uint64_t pkt_index = 0);
+
+ /**
+ * push an existing packet structure
+ * packet will *not* be duplicated
+ *
+ * after calling this function
+ * the packet is no longer usable
+ * from caller prespective
*/
- void push(const rte_mbuf_t *m, int port = -1, TrexPkt::origin_e origin = TrexPkt::ORIGIN_NONE, uint64_t pkt_index = 0);
void push(const TrexPkt *pkt);
/**
@@ -171,6 +200,10 @@ public:
return (m_size - 1);
}
+ /**
+ * see mode_e
+ *
+ */
mode_e get_mode() const {
return m_mode;
}
@@ -180,6 +213,9 @@ public:
*/
uint32_t get_element_count() const;
+ /**
+ * current bytes holded by the buffer
+ */
uint32_t get_bytes() const {
return m_bytes;
}
diff --git a/src/stateless/rx/trex_stateless_capture.cpp b/src/stateless/rx/trex_stateless_capture.cpp
index f0d4e806..7b020444 100644
--- a/src/stateless/rx/trex_stateless_capture.cpp
+++ b/src/stateless/rx/trex_stateless_capture.cpp
@@ -157,14 +157,14 @@ TrexStatelessCaptureMngr::start(const CaptureFilter &filter, uint64_t limit, Tre
int new_id = m_id_counter++;
- TrexStatelessCapture *new_buffer = new TrexStatelessCapture(new_id, limit, filter);
- m_captures.push_back(new_buffer);
+ TrexStatelessCapture *new_capture = new TrexStatelessCapture(new_id, limit, filter);
+ m_captures.push_back(new_capture);
/* update global filter */
update_global_filter();
/* result */
- rc.set_new_id(new_id);
+ rc.set_rc(new_id, new_capture->get_start_ts());
}
void
@@ -176,7 +176,7 @@ TrexStatelessCaptureMngr::stop(capture_id_t capture_id, TrexCaptureRCStop &rc) {
}
capture->stop();
- rc.set_count(capture->get_pkt_count());
+ rc.set_rc(capture->get_pkt_count());
}
void
diff --git a/src/stateless/rx/trex_stateless_capture.h b/src/stateless/rx/trex_stateless_capture.h
index 0f98fd95..852aee2a 100644
--- a/src/stateless/rx/trex_stateless_capture.h
+++ b/src/stateless/rx/trex_stateless_capture.h
@@ -83,23 +83,30 @@ public:
class TrexCaptureRCStart : public TrexCaptureRC {
public:
- void set_new_id(capture_id_t new_id) {
- m_capture_id = new_id;
- m_rc = RC_OK;
+ void set_rc(capture_id_t new_id, dsec_t start_ts) {
+ m_capture_id = new_id;
+ m_start_ts = start_ts;
+ m_rc = RC_OK;
+
}
capture_id_t get_new_id() const {
return m_capture_id;
}
+ dsec_t get_start_ts() const {
+ return m_start_ts;
+ }
+
private:
capture_id_t m_capture_id;
+ dsec_t m_start_ts;
};
class TrexCaptureRCStop : public TrexCaptureRC {
public:
- void set_count(uint32_t pkt_count) {
+ void set_rc(uint32_t pkt_count) {
m_pkt_count = pkt_count;
m_rc = RC_OK;
}
diff --git a/src/stateless/rx/trex_stateless_rx_port_mngr.cpp b/src/stateless/rx/trex_stateless_rx_port_mngr.cpp
index ede86062..b01665ec 100644
--- a/src/stateless/rx/trex_stateless_rx_port_mngr.cpp
+++ b/src/stateless/rx/trex_stateless_rx_port_mngr.cpp
@@ -492,7 +492,7 @@ RXServer::duplicate_mbuf(const rte_mbuf_t *m) {
}
/* copy data */
- copy_mbuf(dest, m);
+ mbuf_to_buffer(dest, m);
return clone_mbuf;
}