From 1af3389118b49e89e82b05db28865c8197577b0f Mon Sep 17 00:00:00 2001 From: Mohsin Kazmi Date: Thu, 5 Apr 2018 14:43:43 +0200 Subject: vom: Fix the itf stats replay Change-Id: Iedc6bbaa1c0a1c3c6e1b8ed6d67db28046a551f4 Signed-off-by: Mohsin Kazmi (cherry picked from commit 58c711a196d9b178bfe6190964a7df92145cf949) --- src/vpp-api/vom/interface.cpp | 16 ++++++++++++++++ src/vpp-api/vom/interface_cmds.cpp | 12 ++++++++++++ src/vpp-api/vom/interface_cmds.hpp | 12 +++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/vpp-api/vom/interface.cpp b/src/vpp-api/vom/interface.cpp index 435002a1067..262d9eaf7b6 100644 --- a/src/vpp-api/vom/interface.cpp +++ b/src/vpp-api/vom/interface.cpp @@ -169,6 +169,10 @@ interface::sweep() } if (m_stats) { + if (stats_type_t::DETAILED == m_stats_type) { + HW::enqueue(new interface_cmds::collect_detail_stats_change_cmd( + m_stats_type, handle_i(), false)); + } HW::enqueue(new interface_cmds::stats_disable_cmd(m_hdl.data())); m_stats.reset(); } @@ -198,6 +202,18 @@ interface::replay() HW::enqueue(new interface_cmds::state_change_cmd(m_state, m_hdl)); } + if (m_stats) { + if (stats_type_t::DETAILED == m_stats_type) { + m_stats_type.set(rc_t::NOOP); + HW::enqueue(new interface_cmds::collect_detail_stats_change_cmd( + m_stats_type, handle_i(), true)); + } + stat_listener& listener = m_stats->listener(); + listener.status().set(rc_t::NOOP); + m_stats.reset(new interface_cmds::stats_enable_cmd(listener, handle_i())); + HW::enqueue(m_stats); + } + if (m_table_id && (m_table_id.data() != route::DEFAULT_TABLE)) { HW::enqueue( new interface_cmds::set_table_cmd(m_table_id, l3_proto_t::IPV4, m_hdl)); diff --git a/src/vpp-api/vom/interface_cmds.cpp b/src/vpp-api/vom/interface_cmds.cpp index b1decd2bf7c..49a24c1301b 100644 --- a/src/vpp-api/vom/interface_cmds.cpp +++ b/src/vpp-api/vom/interface_cmds.cpp @@ -582,6 +582,18 @@ stats_enable_cmd::retire(connection& con) wait(); } +interface::stat_listener& +stats_enable_cmd::listener() const +{ + return m_listener; +} + +void +stats_enable_cmd::set(const rc_t& rc) +{ + m_listener.status().set(rc); +} + void stats_enable_cmd::notify() { diff --git a/src/vpp-api/vom/interface_cmds.hpp b/src/vpp-api/vom/interface_cmds.hpp index 41ec5caf0e3..7a0040deb0a 100644 --- a/src/vpp-api/vom/interface_cmds.hpp +++ b/src/vpp-api/vom/interface_cmds.hpp @@ -483,6 +483,16 @@ public: */ std::string to_string() const; + /** + * (re)set status + */ + void set(const rc_t& rc); + + /** + * get listener + */ + interface::stat_listener& listener() const; + /** * Comparison operator - only used for UT */ @@ -502,7 +512,7 @@ private: /** * The interface on which we are enabling states */ - handle_t m_swifindex; + const handle_t& m_swifindex; }; /** -- cgit 1.2.3-korg