diff options
author | 2018-12-05 04:34:27 -0800 | |
---|---|---|
committer | 2018-12-05 14:30:02 +0000 | |
commit | 7e9affb696fcfd8f22cdce0caf46b1e2f25c5799 (patch) | |
tree | 8afdb2f45499c4f6f98ceb9e4ab1a4077d5057e4 /extras/vom/vom/interface_cmds.cpp | |
parent | 661f91fe0a6bd87040408d45d116b63c0811f4f9 (diff) |
VOM: interface event struct
Change-Id: If133829ba4db2da1c9c20bfbbdfc6df6276efa10
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'extras/vom/vom/interface_cmds.cpp')
-rw-r--r-- | extras/vom/vom/interface_cmds.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/extras/vom/vom/interface_cmds.cpp b/extras/vom/vom/interface_cmds.cpp index 9e2772584c0..c4fd6613a0e 100644 --- a/extras/vom/vom/interface_cmds.cpp +++ b/extras/vom/vom/interface_cmds.cpp @@ -441,7 +441,30 @@ events_cmd::retire(connection& con) void events_cmd::notify() { - m_listener.handle_interface_event(this); + std::lock_guard<interface_cmds::events_cmd> lg(*this); + std::vector<interface::event> events; + + for (auto& msg : *this) { + auto& payload = msg.get_payload(); + + handle_t handle(payload.sw_if_index); + std::shared_ptr<interface> sp = interface::find(handle); + + if (sp) { + interface::oper_state_t oper_state = + interface::oper_state_t::from_int(payload.link_up_down); + + VOM_LOG(log_level_t::DEBUG) << "Interface Event: " << sp->to_string() + << " state: " << oper_state.to_string(); + + sp->set(oper_state); + events.push_back({ *sp, oper_state }); + } + } + + flush(); + + m_listener.handle_interface_event(events); } std::string |