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)
interface::admin_state_t::UP)
, m_tep(src, dst, vni)
, m_mode(mode)
+ , m_mcast_itf()
+{
+}
+
+vxlan_tunnel::vxlan_tunnel(const boost::asio::ip::address& src,
+ const boost::asio::ip::address& dst,
+ uint32_t vni,
+ const interface& mcast_itf,
+ const mode_t& mode)
+ : interface(mk_name(src, dst, mode, vni),
+ interface::type_t::VXLAN,
+ interface::admin_state_t::UP)
+ , m_tep(src, dst, vni)
+ , m_mode(mode)
+ , m_mcast_itf(mcast_itf.singular())
{
}
: 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&
{
if (m_hdl) {
if (mode_t::STANDARD == m_mode)
- HW::enqueue(new vxlan_tunnel_cmds::create_cmd(m_hdl, name(), m_tep));
+ HW::enqueue(new vxlan_tunnel_cmds::create_cmd(
+ m_hdl, name(), m_tep,
+ (m_mcast_itf ? m_mcast_itf->handle() : handle_t::INVALID)));
else if (mode_t::GBP == m_mode)
- HW::enqueue(new vxlan_gbp_tunnel_cmds::create_cmd(m_hdl, name(), m_tep));
+ HW::enqueue(new vxlan_gbp_tunnel_cmds::create_cmd(
+ m_hdl, name(), m_tep,
+ (m_mcast_itf ? m_mcast_itf->handle() : handle_t::INVALID)));
}
}
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());
}
/*
* 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));
+ HW::enqueue(new vxlan_tunnel_cmds::create_cmd(
+ m_hdl, name(), m_tep,
+ (m_mcast_itf ? m_mcast_itf->handle() : handle_t::INVALID)));
else if (mode_t::GBP == m_mode)
- HW::enqueue(new vxlan_gbp_tunnel_cmds::create_cmd(m_hdl, name(), m_tep));
+ HW::enqueue(new vxlan_gbp_tunnel_cmds::create_cmd(
+ m_hdl, name(), m_tep,
+ (m_mcast_itf ? m_mcast_itf->handle() : handle_t::INVALID)));
}
}