VOM: GBP: update subnet is type changes 63/11763/2
authorNeale Ranns <neale.ranns@cisco.com>
Fri, 13 Apr 2018 10:01:25 +0000 (03:01 -0700)
committerNeale Ranns <nranns@cisco.com>
Fri, 13 Apr 2018 14:14:58 +0000 (14:14 +0000)
Change-Id: Ic04f419b9c09be34afc390e672793180d56c4665
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
src/vpp-api/vom/gbp_subnet.cpp
src/vpp-api/vom/gbp_subnet.hpp

index 84dbd22..1a9ee86 100644 (file)
@@ -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)));
+    }
   }
 }
 
index 9c9166e..b4adb40 100644 (file)
@@ -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