Fixes for 'make UNATTENDED=yes CC=clang CXX=clang verify'
[vpp.git] / src / vpp-api / vom / l2_binding.cpp
index cc0e84a..4118f74 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "vom/l2_binding.hpp"
 #include "vom/l2_binding_cmds.hpp"
+#include "vom/singular_db_funcs.hpp"
 
 namespace VOM {
 /**
@@ -152,17 +153,28 @@ void
 l2_binding::update(const l2_binding& desired)
 {
   /*
- * the desired state is always that the interface should be created
- */
  * the desired state is always that the interface should be created
  */
   if (rc_t::OK != m_binding.rc()) {
     HW::enqueue(
       new l2_binding_cmds::bind_cmd(m_binding, m_itf->handle(), m_bd->id(),
                                     interface::type_t::BVI == m_itf->type()));
+  } else if (!(*m_bd == *desired.m_bd)) {
+    /*
+     * re-binding to a different BD. do unbind, bind.
+     */
+    HW::enqueue(
+      new l2_binding_cmds::unbind_cmd(m_binding, m_itf->handle(), m_bd->id(),
+                                      interface::type_t::BVI == m_itf->type()));
+    m_bd = desired.m_bd;
+    HW::enqueue(
+      new l2_binding_cmds::bind_cmd(m_binding, m_itf->handle(), m_bd->id(),
+                                    interface::type_t::BVI == m_itf->type()));
   }
 
   /*
* set the VTR operation is request
- */
  * set the VTR operation if request
  */
   if (m_vtr_op.update(desired.m_vtr_op)) {
     HW::enqueue(new l2_binding_cmds::set_vtr_op_cmd(m_vtr_op, m_itf->handle(),
                                                     m_vtr_op_tag));
@@ -184,7 +196,7 @@ l2_binding::singular() const
 void
 l2_binding::dump(std::ostream& os)
 {
-  m_db.dump(os);
+  db_dump(m_db, os);
 }
 
 l2_binding::event_handler::event_handler()
@@ -216,7 +228,7 @@ l2_binding::event_handler::order() const
 void
 l2_binding::event_handler::show(std::ostream& os)
 {
-  m_db.dump(os);
+  db_dump(m_db, os);
 }
 }