X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fvom%2Fvom%2Facl_binding.cpp;h=d57ed7741e5ac77dbd3a1ebf22f83df30aed33f5;hb=420c6bf1a751ad117131ac4148f6950133e44d80;hp=73f015df37764486a60e8d866320f8a475102867;hpb=4270808205d56f78dcd5a293b72a45840dbaf34b;p=vpp.git diff --git a/extras/vom/vom/acl_binding.cpp b/extras/vom/vom/acl_binding.cpp index 73f015df377..d57ed7741e5 100644 --- a/extras/vom/vom/acl_binding.cpp +++ b/extras/vom/vom/acl_binding.cpp @@ -18,9 +18,19 @@ namespace VOM { namespace ACL { +template <> +dependency_t +l2_binding::event_handler::order() const +{ + return (dependency_t::BINDING); +} + template <> l2_binding::event_handler::event_handler() { + /* hack to get this function instantiated */ + order(); + OM::register_listener(this); inspect::register_handler({ "l2-acl-binding" }, "L2 ACL bindings", this); } @@ -29,6 +39,9 @@ template <> void l2_binding::event_handler::handle_populate(const client_db::key_t& key) { + /* hack to get this function instantiated */ + order(); + /* * dump VPP Bridge domains */ @@ -43,19 +56,36 @@ l2_binding::event_handler::handle_populate(const client_db::key_t& key) std::shared_ptr itf = interface::find(payload.sw_if_index); - for (int ii = 0; ii < payload.count; ii++) { - std::shared_ptr acl = l2_list::find(payload.acls[ii]); + if (itf) { + for (int ii = 0; ii < payload.count; ii++) { + std::shared_ptr acl = l2_list::find(payload.acls[ii]); - l2_binding binding(direction_t::INPUT, *itf, *acl); - - OM::commit(key, binding); + if (acl) { + l2_binding binding(direction_t::INPUT, *itf, *acl); + OM::commit(key, binding); + } else { + VOM_LOG(log_level_t::ERROR) << "no ACL id:" << payload.acls[ii]; + } + } + } else { + VOM_LOG(log_level_t::ERROR) << "no interface:" << payload.sw_if_index; } } } +template <> +dependency_t +l3_binding::event_handler::order() const +{ + return (dependency_t::BINDING); +} + template <> l3_binding::event_handler::event_handler() { + /* hack to get this function instantiated */ + order(); + OM::register_listener(this); inspect::register_handler({ "l3-acl-binding" }, "L3 ACL bindings", this); } @@ -64,6 +94,9 @@ template <> void l3_binding::event_handler::handle_populate(const client_db::key_t& key) { + /* hack to get this function instantiated */ + order(); + std::shared_ptr cmd = std::make_shared(); @@ -76,17 +109,25 @@ l3_binding::event_handler::handle_populate(const client_db::key_t& key) std::shared_ptr itf = interface::find(payload.sw_if_index); uint8_t n_input = payload.n_input; - for (int ii = 0; ii < payload.count; ii++) { - std::shared_ptr acl = l3_list::find(payload.acls[ii]); - - if (n_input) { - l3_binding binding(direction_t::INPUT, *itf, *acl); - n_input--; - OM::commit(key, binding); - } else { - l3_binding binding(direction_t::OUTPUT, *itf, *acl); - OM::commit(key, binding); + if (itf) { + for (int ii = 0; ii < payload.count; ii++) { + std::shared_ptr acl = l3_list::find(payload.acls[ii]); + + if (acl) { + if (n_input) { + l3_binding binding(direction_t::INPUT, *itf, *acl); + n_input--; + OM::commit(key, binding); + } else { + l3_binding binding(direction_t::OUTPUT, *itf, *acl); + OM::commit(key, binding); + } + } else { + VOM_LOG(log_level_t::ERROR) << "no ACL id:" << payload.acls[ii]; + } } + } else { + VOM_LOG(log_level_t::ERROR) << "no interface:" << payload.sw_if_index; } } }