diff options
author | Mohsin Kazmi <sykazmi@cisco.com> | 2018-02-14 15:47:19 +0100 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2018-02-19 10:09:49 +0000 |
commit | d91d14095b8ac0d3151fd8f6b03277d447029814 (patch) | |
tree | 8a13d06fabde29305353bb4985a70a71253f52bd | |
parent | 3a5938223395bb6dc74769d109471f4210217b43 (diff) |
VOM: acl: Some necessary fixes
It:
1. changes ethertype_rule_t to hold actual objects instead of
reference to them.
2. fixes acl_ethertype 'update' function
3. fixes pretty-print of acl-list-update.
4. adds l3-acl update unit test.
Change-Id: Iec72212806e96bd0574b46b563de79f0744cb248
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
-rw-r--r-- | src/vpp-api/vom/acl_ethertype.cpp | 8 | ||||
-rw-r--r-- | src/vpp-api/vom/acl_ethertype.hpp | 6 | ||||
-rw-r--r-- | src/vpp-api/vom/acl_list_cmds.hpp | 6 | ||||
-rw-r--r-- | test/ext/vom_test.cpp | 7 |
4 files changed, 20 insertions, 7 deletions
diff --git a/src/vpp-api/vom/acl_ethertype.cpp b/src/vpp-api/vom/acl_ethertype.cpp index 2f0163398d0..043f0b0e632 100644 --- a/src/vpp-api/vom/acl_ethertype.cpp +++ b/src/vpp-api/vom/acl_ethertype.cpp @@ -70,7 +70,7 @@ singular_db<interface::key_t, acl_ethertype> acl_ethertype::m_db; acl_ethertype::event_handler acl_ethertype::m_evh; acl_ethertype::acl_ethertype(const interface& itf, - acl_ethertype::ethertype_rules_t le) + const acl_ethertype::ethertype_rules_t& le) : m_itf(itf.singular()) , m_le(le) , m_binding(true) @@ -146,15 +146,17 @@ acl_ethertype::to_string() const } void -acl_ethertype::update(const acl_ethertype& old) +acl_ethertype::update(const acl_ethertype& desired) { /* * always update the instance with the latest rules */ - if (!m_binding || old.m_le != m_le) { + if (!m_binding || desired.m_le != m_le) { HW::enqueue( new acl_ethertype_cmds::bind_cmd(m_binding, m_itf->handle(), m_le)); } + + m_le = desired.m_le; } std::shared_ptr<acl_ethertype> diff --git a/src/vpp-api/vom/acl_ethertype.hpp b/src/vpp-api/vom/acl_ethertype.hpp index 42897aebd6a..98d3ce20707 100644 --- a/src/vpp-api/vom/acl_ethertype.hpp +++ b/src/vpp-api/vom/acl_ethertype.hpp @@ -76,12 +76,12 @@ private: /** * ethertype for this rule */ - const ethertype_t& m_eth; + const ethertype_t m_eth; /** * direction in which ethertype will be applied w.r.t. intf */ - const direction_t& m_dir; + const direction_t m_dir; }; class acl_ethertype : public object_base @@ -102,7 +102,7 @@ public: /** * Construct a new object matching the desried state */ - acl_ethertype(const interface& itf, ethertype_rules_t le); + acl_ethertype(const interface& itf, const ethertype_rules_t& le); /** * Copy Constructor diff --git a/src/vpp-api/vom/acl_list_cmds.hpp b/src/vpp-api/vom/acl_list_cmds.hpp index e4aa950bdce..23d77c7e26c 100644 --- a/src/vpp-api/vom/acl_list_cmds.hpp +++ b/src/vpp-api/vom/acl_list_cmds.hpp @@ -59,7 +59,11 @@ public: std::string to_string() const { std::ostringstream s; - s << "ACL-list-update: " << this->item().to_string(); + s << "ACL-list-update:[ " << this->item().to_string() << " rule-list:["; + for (auto rule : m_rules) { + s << " " << rule.to_string(); + } + s << "]]"; return (s.str()); } diff --git a/test/ext/vom_test.cpp b/test/ext/vom_test.cpp index d9bd67984f1..4c09ab4439c 100644 --- a/test/ext/vom_test.cpp +++ b/test/ext/vom_test.cpp @@ -1013,6 +1013,13 @@ BOOST_AUTO_TEST_CASE(test_acl) { ADD_EXPECT(ACL::list_cmds::l3_update_cmd(hw_acl, acl_name, rules)); TRY_CHECK_RC(OM::write(fyodor, acl1)); + ACL::l3_rule r3(30, ACL::action_t::PERMIT, route::prefix_t::ZERO, route::prefix_t::ZERO); + ACL::l3_list acl2(acl_name); + acl2.insert(r3); + ACL::l3_list::rules_t rules2 = {r3}; + ADD_EXPECT(ACL::list_cmds::l3_update_cmd(hw_acl, acl_name, rules2)); + TRY_CHECK_RC(OM::write(fyodor, acl2)); + ACL::l3_binding *l3b = new ACL::l3_binding(direction_t::INPUT, itf1, acl1); HW::item<bool> hw_binding(true, rc_t::OK); ADD_EXPECT(ACL::binding_cmds::l3_bind_cmd(hw_binding, direction_t::INPUT, |