diff --git a/net/dpdk.cc b/net/dpdk.cc index 9de50ff0f9..234a14b7d8 100644 --- a/net/dpdk.cc +++ b/net/dpdk.cc @@ -814,6 +814,7 @@ class dpdk_qp : public net::qp { public: explicit dpdk_qp(dpdk_device* dev, uint8_t qid); + virtual void rx_start() override; virtual future<> send(packet p) override { abort(); } @@ -921,7 +922,7 @@ private: rte_mempool *_pktmbuf_pool_rx; void *_rx_xmem = nullptr; tx_buf_factory _tx_buf_factory; - reactor::poller _rx_poller; + std::experimental::optional _rx_poller; reactor::poller _tx_gc_poller; std::vector _tx_burst; uint16_t _tx_burst_idx = 0; @@ -1191,7 +1192,6 @@ template dpdk_qp::dpdk_qp(dpdk_device* dev, uint8_t qid) : _dev(dev), _qid(qid), _tx_buf_factory(qid), - _rx_poller([&] { return poll_rx_once(); }), _tx_gc_poller([&] { return _tx_buf_factory.gc(); }) { if (!init_rx_mbuf_pool()) { @@ -1218,6 +1218,11 @@ dpdk_qp::dpdk_qp(dpdk_device* dev, uint8_t qid) } } +template +void dpdk_qp::rx_start() { + _rx_poller = reactor::poller([&] { return poll_rx_once(); }); +} + template void dpdk_qp::process_packets( struct rte_mbuf **bufs, uint16_t count)