VOM: vxlan-tunnel mcast interface fix
[vpp.git] / extras / vom / vom / vxlan_tunnel.cpp
index 2bc386c..248aadf 100644 (file)
@@ -26,8 +26,8 @@ const std::string VXLAN_TUNNEL_NAME = "vxlan-tunnel-itf";
 vxlan_tunnel::event_handler vxlan_tunnel::m_evh;
 
 const vxlan_tunnel::mode_t vxlan_tunnel::mode_t::STANDARD(0, "standard");
-const vxlan_tunnel::mode_t vxlan_tunnel::mode_t::GBP(0, "GBP");
-const vxlan_tunnel::mode_t vxlan_tunnel::mode_t::GPE(0, "GPE");
+const vxlan_tunnel::mode_t vxlan_tunnel::mode_t::GBP(1, "GBP");
+const vxlan_tunnel::mode_t vxlan_tunnel::mode_t::GPE(2, "GPE");
 
 vxlan_tunnel::mode_t::mode_t(int v, const std::string s)
   : enum_base<vxlan_tunnel::mode_t>(v, s)
@@ -113,9 +113,17 @@ vxlan_tunnel::vxlan_tunnel(const vxlan_tunnel& o)
   : interface(o)
   , m_tep(o.m_tep)
   , m_mode(o.m_mode)
+  , m_mcast_itf(o.m_mcast_itf)
 {
 }
 
+bool
+vxlan_tunnel::operator==(const vxlan_tunnel& other) const
+{
+  return ((m_tep == other.m_tep) && (m_mode == other.m_mode) &&
+          (m_mcast_itf == other.m_mcast_itf));
+}
+
 const handle_t&
 vxlan_tunnel::handle() const
 {
@@ -167,6 +175,8 @@ vxlan_tunnel::to_string() const
   std::ostringstream s;
   s << "vxlan-tunnel: " << m_hdl.to_string() << " " << m_mode.to_string() << " "
     << m_tep.to_string();
+  if (m_mcast_itf)
+    s << " " << m_mcast_itf->to_string();
 
   return (s.str());
 }
@@ -177,7 +187,7 @@ vxlan_tunnel::update(const vxlan_tunnel& desired)
   /*
    * the desired state is always that the interface should be created
    */
-  if (!m_hdl) {
+  if (rc_t::OK != m_hdl.rc()) {
     if (mode_t::STANDARD == m_mode)
       HW::enqueue(new vxlan_tunnel_cmds::create_cmd(
         m_hdl, name(), m_tep,