X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fvom%2Fvom%2Fvxlan_tunnel.hpp;h=63124e7342603744ce8f1b5f86864e62df9cc8cd;hb=cf3ecb1a42c9c40f386ed59964117c3dab15fa5c;hp=a0b3e9afa3ea22c6b3d839df27a112048b2a3be5;hpb=164e5f8c63652028ecb9c3570e1ea8618b163071;p=vpp.git diff --git a/extras/vom/vom/vxlan_tunnel.hpp b/extras/vom/vom/vxlan_tunnel.hpp index a0b3e9afa3e..63124e73426 100644 --- a/extras/vom/vom/vxlan_tunnel.hpp +++ b/extras/vom/vom/vxlan_tunnel.hpp @@ -49,11 +49,6 @@ public: const boost::asio::ip::address& dst, uint32_t vni); - /** - * less-than operator for map storage - */ - bool operator<(const endpoint_t& o) const; - /** * Comparison operator */ @@ -81,20 +76,32 @@ public: }; /** - * Construct a new object matching the desried state + * mode for the tunnel */ - vxlan_tunnel(const boost::asio::ip::address& src, - const boost::asio::ip::address& dst, - uint32_t vni); + struct mode_t : public enum_base + { + ~mode_t() = default; + const static mode_t STANDARD; + const static mode_t GBP; + const static mode_t GPE; + + private: + mode_t(int v, const std::string s); + mode_t() = default; + }; /** - * Construct a new object matching the desried state with a handle - * read from VPP + * Construct a new object matching the desried state */ - vxlan_tunnel(const handle_t& hdl, - const boost::asio::ip::address& src, + vxlan_tunnel(const boost::asio::ip::address& src, const boost::asio::ip::address& dst, - uint32_t vni); + uint32_t vni, + const mode_t& mode = mode_t::STANDARD); + 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 = mode_t::STANDARD); /* * Destructor @@ -122,9 +129,9 @@ public: const handle_t& handle() const; /** - * Dump all L3Configs into the stream provided + * Fond the singular instance of the interface in the DB by key */ - static void dump(std::ostream& os); + static std::shared_ptr find(const interface::key_t& k); private: /** @@ -204,15 +211,22 @@ private: endpoint_t m_tep; /** - * A map of all VLAN tunnela against thier key + * The tunnel mode + */ + mode_t m_mode; + + /** + * The interface on which to send the packets if the destination + * is multicast */ - static singular_db m_db; + std::shared_ptr m_mcast_itf; /** * Construct a unique name for the tunnel */ static std::string mk_name(const boost::asio::ip::address& src, const boost::asio::ip::address& dst, + const mode_t& mode, uint32_t vni); };