diff options
Diffstat (limited to 'src/vpp-api/vom')
-rw-r--r-- | src/vpp-api/vom/gbp_subnet.cpp | 17 | ||||
-rw-r--r-- | src/vpp-api/vom/gbp_subnet.hpp | 4 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/vpp-api/vom/gbp_subnet.cpp b/src/vpp-api/vom/gbp_subnet.cpp index 84dbd227ed9..1a9ee86e06b 100644 --- a/src/vpp-api/vom/gbp_subnet.cpp +++ b/src/vpp-api/vom/gbp_subnet.cpp @@ -77,10 +77,10 @@ gbp_subnet::key() const } bool -gbp_subnet::operator==(const gbp_subnet& gbpe) const +gbp_subnet::operator==(const gbp_subnet& gs) const { - return ((key() == gbpe.key()) && (m_recirc == gbpe.m_recirc) && - (m_epg == gbpe.m_epg)); + return ((key() == gs.key()) && (m_type == gs.m_type) && + (m_recirc == gs.m_recirc) && (m_epg == gs.m_epg)); } void @@ -128,6 +128,17 @@ gbp_subnet::update(const gbp_subnet& r) m_hw, m_rd->table_id(), m_prefix, (m_type == type_t::INTERNAL), (m_recirc ? m_recirc->handle() : handle_t::INVALID), (m_epg ? m_epg->id() : ~0))); + } else { + if (m_type != r.m_type) { + m_epg = r.m_epg; + m_recirc = r.m_recirc; + m_type = r.m_type; + + HW::enqueue(new gbp_subnet_cmds::create_cmd( + m_hw, m_rd->table_id(), m_prefix, (m_type == type_t::INTERNAL), + (m_recirc ? m_recirc->handle() : handle_t::INVALID), + (m_epg ? m_epg->id() : ~0))); + } } } diff --git a/src/vpp-api/vom/gbp_subnet.hpp b/src/vpp-api/vom/gbp_subnet.hpp index 9c9166ec018..b4adb40ae45 100644 --- a/src/vpp-api/vom/gbp_subnet.hpp +++ b/src/vpp-api/vom/gbp_subnet.hpp @@ -177,7 +177,7 @@ private: /** * the route domain the prefix is in */ - std::shared_ptr<route_domain> m_rd; + const std::shared_ptr<route_domain> m_rd; /** * prefix to match @@ -187,7 +187,7 @@ private: /* * Subnet type */ - const type_t m_type; + type_t m_type; /** * The interface the prefix is reachable through |