diff options
Diffstat (limited to 'src/stateless/rx/trex_stateless_capture.cpp')
-rw-r--r-- | src/stateless/rx/trex_stateless_capture.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/stateless/rx/trex_stateless_capture.cpp b/src/stateless/rx/trex_stateless_capture.cpp index 83bb2d38..4ed126cc 100644 --- a/src/stateless/rx/trex_stateless_capture.cpp +++ b/src/stateless/rx/trex_stateless_capture.cpp @@ -53,22 +53,36 @@ TrexStatelessCapture::handle_pkt_rx(const rte_mbuf_t *m, int port) { m_pkt_buffer->push(m); } +void +TrexStatelessCaptureMngr::update_global_filter() { + CaptureFilter new_filter; + + for (TrexStatelessCapture *capture : m_captures) { + new_filter += capture->get_filter(); + } + + m_global_filter = new_filter; +} + capture_id_t TrexStatelessCaptureMngr::add(uint64_t limit, const CaptureFilter &filter) { if (m_captures.size() > MAX_CAPTURE_SIZE) { - throw TrexException(TrexException::T_CAPTURE_MAX_INSTANCES); + return CAPTURE_TOO_MANY_CAPTURES; } int new_id = m_id_counter++; TrexStatelessCapture *new_buffer = new TrexStatelessCapture(new_id, limit, filter); m_captures.push_back(new_buffer); + + /* update global filter */ + update_global_filter(); return new_id; } -void +capture_id_t TrexStatelessCaptureMngr::remove(capture_id_t id) { int index = -1; @@ -81,12 +95,18 @@ TrexStatelessCaptureMngr::remove(capture_id_t id) { /* does not exist */ if (index == -1) { - throw TrexException(TrexException::T_CAPTURE_INVALID_ID); + return CAPTURE_ID_NOT_FOUND; } TrexStatelessCapture *capture = m_captures[index]; m_captures.erase(m_captures.begin() + index); - delete capture; + + delete capture; + + /* update global filter */ + update_global_filter(); + + return id; } void |