diff options
Diffstat (limited to 'extras/vom/vom/gbp_bridge_domain.cpp')
-rw-r--r-- | extras/vom/vom/gbp_bridge_domain.cpp | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/extras/vom/vom/gbp_bridge_domain.cpp b/extras/vom/vom/gbp_bridge_domain.cpp index 101209fc2c7..e370a6abb0c 100644 --- a/extras/vom/vom/gbp_bridge_domain.cpp +++ b/extras/vom/vom/gbp_bridge_domain.cpp @@ -47,6 +47,8 @@ gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, : m_id(bd.id()) , m_bd(bd.singular()) , m_bvi(bvi.singular()) + , m_uu_fwd() + , m_bm_flood() , m_flags(flags) { } @@ -54,11 +56,13 @@ gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, const interface& bvi, const interface& uu_fwd, + const interface& bm_flood, const flags_t& flags) : m_id(bd.id()) , m_bd(bd.singular()) , m_bvi(bvi.singular()) , m_uu_fwd(uu_fwd.singular()) + , m_bm_flood(bm_flood.singular()) , m_flags(flags) { } @@ -66,11 +70,13 @@ gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, const std::shared_ptr<interface> bvi, const std::shared_ptr<interface> uu_fwd, + const std::shared_ptr<interface> bm_flood, const flags_t& flags) : m_id(bd.id()) , m_bd(bd.singular()) - , m_bvi(bvi->singular()) - , m_uu_fwd(uu_fwd->singular()) + , m_bvi(bvi) + , m_uu_fwd(uu_fwd) + , m_bm_flood(bm_flood) , m_flags(flags) { } @@ -78,11 +84,13 @@ gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, gbp_bridge_domain::gbp_bridge_domain(const bridge_domain& bd, const interface& bvi, const std::shared_ptr<interface> uu_fwd, + const std::shared_ptr<interface> bm_flood, const flags_t& flags) : m_id(bd.id()) , m_bd(bd.singular()) , m_bvi(bvi.singular()) - , m_uu_fwd(uu_fwd->singular()) + , m_uu_fwd(uu_fwd) + , m_bm_flood(bm_flood) , m_flags(flags) { } @@ -92,6 +100,7 @@ gbp_bridge_domain::gbp_bridge_domain(const gbp_bridge_domain& bd) , m_bd(bd.m_bd) , m_bvi(bd.m_bvi) , m_uu_fwd(bd.m_uu_fwd) + , m_bm_flood(bd.m_bm_flood) , m_flags(bd.m_flags) { } @@ -139,6 +148,13 @@ gbp_bridge_domain::operator==(const gbp_bridge_domain& b) const else equal = false; + if (m_bm_flood && b.m_bm_flood) + equal &= (m_bm_flood->key() == b.m_bm_flood->key()); + else if (!m_bm_flood && !b.m_bm_flood) + ; + else + equal = false; + return ((m_bd->key() == b.m_bd->key()) && equal); } @@ -157,7 +173,8 @@ gbp_bridge_domain::replay() if (rc_t::OK == m_id.rc()) { HW::enqueue(new gbp_bridge_domain_cmds::create_cmd( m_id, (m_bvi ? m_bvi->handle() : handle_t::INVALID), - (m_uu_fwd ? m_uu_fwd->handle() : handle_t::INVALID), m_flags)); + (m_uu_fwd ? m_uu_fwd->handle() : handle_t::INVALID), + (m_bm_flood ? m_bm_flood->handle() : handle_t::INVALID), m_flags)); } } @@ -200,7 +217,8 @@ gbp_bridge_domain::update(const gbp_bridge_domain& desired) if (rc_t::OK != m_id.rc()) { HW::enqueue(new gbp_bridge_domain_cmds::create_cmd( m_id, (m_bvi ? m_bvi->handle() : handle_t::INVALID), - (m_uu_fwd ? m_uu_fwd->handle() : handle_t::INVALID), m_flags)); + (m_uu_fwd ? m_uu_fwd->handle() : handle_t::INVALID), + (m_bm_flood ? m_bm_flood->handle() : handle_t::INVALID), m_flags)); } } @@ -239,11 +257,13 @@ gbp_bridge_domain::event_handler::handle_populate(const client_db::key_t& key) std::shared_ptr<interface> uu_fwd = interface::find(payload.bd.uu_fwd_sw_if_index); + std::shared_ptr<interface> bm_flood = + interface::find(payload.bd.bm_flood_sw_if_index); std::shared_ptr<interface> bvi = interface::find(payload.bd.bvi_sw_if_index); - if (uu_fwd && bvi) { - gbp_bridge_domain bd(payload.bd.bd_id, bvi, uu_fwd); + if (uu_fwd && bm_flood && bvi) { + gbp_bridge_domain bd(payload.bd.bd_id, bvi, uu_fwd, bm_flood); OM::commit(key, bd); VOM_LOG(log_level_t::DEBUG) << "dump: " << bd.to_string(); } else if (bvi) { |