5 #ifndef multicast_agent_oper_hpp
6 #define multicast_agent_oper_hpp
8 #include <netinet/in.h>
9 #include <net/ethernet.h>
18 #define MCTRACE(obj, ...) \
20 Multicast##obj::TraceMsg(MulticastTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
23 #define IS_BCAST_MCAST(grp) ((grp.to_ulong() == 0xFFFFFFFF) || \
24 ((grp.to_ulong() & 0xF0000000) == 0xE0000000))
75 const std::string &vn_name) :
82 boost::system::error_code ec;
83 src_address_ = IpAddress::from_string(
"0.0.0.0", ec).to_v4();
87 const std::string &vn_name,
165 return mg_list_.begin();
169 return mg_list_.end();
308 typedef std::map<boost::uuids::uuid, MulticastGroupObjectList>
318 const string &vn_name,
325 const std::string &vrf_name,
328 uint32_t source_label,
330 uint64_t peer_identifier = 0);
332 const std::string &vrf_name,
336 uint32_t ethernet_tag,
337 uint64_t peer_identifier = 0);
342 const std::string &vrf_name,
344 uint32_t ethernet_tag,
345 uint64_t peer_identifier = 0);
347 const std::string &vrf_name,
349 uint32_t ethernet_tag,
350 uint64_t peer_identifier = 0);
352 const std::string &vrf_name,
355 uint64_t peer_identifier);
375 const string &vrf_name,
379 uint64_t peer_identifier,
384 uint32_t ethernet_tag);
407 uint32_t ethernet_tag,
411 const string &vrf_name,
414 uint32_t ethernet_tag,
418 const std::string &vrf_name,
419 uint32_t ethernet_tag,
436 const std::string &vn_name,
445 const std::string &vn_name,
458 const std::string &vn_name,
470 const std::string &vm_vrf_name,
484 const Ip4Address::bytes_type &bytes_v4 = ip.to_bytes();
488 (
unsigned int)(bytes_v4.at(1)&0x7F),
489 (
unsigned int)bytes_v4.at(2),
490 (
unsigned int)bytes_v4.at(3));
501 const std::string &vrf_name);
507 const std::string &vrf_name);
513 const std::string &vrf_name,
514 const std::string &vn_name,
518 uint32_t ethernet_tag);
520 bool learning_enabled);
522 bool pbb_etree_enabled);
537 VmMulticastGroupObjectList::iterator vmi_it =
549 VmMulticastGroupObjectList::iterator vmi_it =
555 MulticastGroupObjectList::iterator mc_it = vmi_it->second.begin();
556 for (;mc_it != vmi_it->second.end(); mc_it++) {
558 vmi_it->second.erase(mc_it);
563 if (vmi_it->second.size() == 0) {
568 std::set<MulticastGroupObject *> &
void DeleteVmInterface(const VmInterface *intf, const std::string &vrf_name)
bool CanUnsubscribe() const
void AddVmInterfaceToSourceGroup(const std::string &mvpn_vrf_name, const std::string &vn_name, const VmInterface *vm_itf, const Ip4Address &src_addr, const Ip4Address &grp_addr)
std::set< std::string > vrf_list_
bool layer2_control_word_
void ModifyMvpnVrfRegistration(const Peer *peer, const std::string &vrf_name, const Ip4Address &group, const Ip4Address &source, uint64_t peer_identifier)
uint32_t GetLocalListSize()
void TriggerLocalRouteChange(MulticastGroupObject *obj, const Peer *peer)
static MulticastHandler * obj_
MulticastGroupObject * FindGroupObject(const std::string &vrf_name, const Ip4Address &sip, const Ip4Address &dip)
void AddToMulticastObjList(MulticastGroupObject *obj)
const std::string & vrf_name() const
MulticastGroupObject(const std::string &vrf_name, const Ip4Address &grp_addr, const std::string &vn_name)
void ChangePbbEtreeMode(MulticastGroupObject *obj, bool pbb_etree_enabled)
void set_learning_enabled(bool learning_enabled)
DependencyRef< MulticastGroupObject, MulticastGroupObject > dependent_mg_
MulticastDBState * CreateBridgeDomainMG(DBTablePartBase *p, BridgeDomainEntry *bd)
DBTable::ListenerId vn_listener_id_
bool FlushPeerInfo(uint64_t peer_sequence)
virtual ~OlistTunnelEntry()
uint32_t fabric_label() const
void set_pbb_etree_enabled(bool pbb_etree_enabled)
bool layer2_control_word_
void AddVmToMulticastObjMap(const boost::uuids::uuid &vm_itf_uuid, MulticastGroupObject *obj)
const Ip4Address & GetSourceAddress()
std::set< MulticastGroupObject * > MulticastGroupObjectList
void ModifyTorMembers(const Peer *peer, const std::string &vrf_name, const TunnelOlist &olist, uint32_t ethernet_tag, uint64_t peer_identifier=0)
SandeshTraceBufferPtr MulticastTraceBuf
bool CanBeDeleted() const
void HandleVnParametersChange(DBTablePartBase *partition, DBEntryBase *e)
ComponentNHKeyList GetInterfaceComponentNHKeyList(MulticastGroupObject *obj, uint8_t flags)
const ManagedPhysicalDevicesList & physical_devices() const
AgentRouteWalkerPtr te_walker_
const VnEntry * vn() const
DISALLOW_COPY_AND_ASSIGN(MulticastGroupObject)
void set_pbb_vrf_name(std::string name)
void CreateMulticastVrfSourceGroup(const std::string &vrf_name, const std::string &vn_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
DBTable::ListenerId physical_device_listener_id_
OlistTunnelEntry(const boost::uuids::uuid &device_uuid, uint32_t label, const Ip4Address &addr, TunnelType::TypeBmap bmap)
void AddL2BroadcastRoute(MulticastGroupObject *obj, const std::string &vrf_name, const std::string &vn_name, const Ip4Address &addr, uint32_t label, int vxlan_id, uint32_t ethernet_tag)
std::map< boost::uuids::uuid, MacAddress > local_olist_
void AddMulticastRoute(MulticastGroupObject *obj, const Peer *peer, uint32_t ethernet_tag, AgentRouteData *data, AgentRouteData *bridge_data)
void DeleteVmInterfaceFromVrfSourceGroup(const std::string &vrf_name, const VmInterface *vm_itf, const Ip4Address &src_addr, const Ip4Address &grp_addr)
bool pbb_etree_enabled() const
static void GetMulticastMacFromIp(const Ip4Address &ip, MacAddress &mac)
MulticastGroupObject * FindFloodGroupObject(const std::string &vrf_name)
void SetEvpnMulticastSGFlags(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, uint32_t flags)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
void Resync(MulticastGroupObject *obj)
MulticastTEWalker(const std::string &name, Agent *agent)
DBTableBase::ListenerId id_
bool learning_enabled() const
void DeleteMulticastVrfSourceGroup(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
MulticastGroupObjectList multicast_obj_list_
std::vector< ComponentNHKeyPtr > ComponentNHKeyList
MulticastGroupObject * FindActiveGroupObject(const std::string &vrf_name, const Ip4Address &dip)
bool AddLocalMember(const boost::uuids::uuid &intf_uuid, const MacAddress &mac)
DISALLOW_COPY_AND_ASSIGN(MulticastTEWalker)
bool AddVmInterfaceToVrfSourceGroup(const std::string &vrf_name, const std::string &vn_name, const VmInterface *vm_itf, const Ip4Address &src_addr, const Ip4Address &grp_addr)
boost::uuids::uuid device_uuid_
DBTable::ListenerId interface_listener_id_
const Agent * agent() const
std::map< std::string, std::vector< VnIpam > > vrf_ipam_mapping_
BridgeDomainConstRef bridge_domain_
void set_peer_identifier(uint64_t peer_id)
void AddLocalPeerRoute(MulticastGroupObject *sg_object)
void NotifyPhysicalDevice(DBTablePartBase *partition, DBEntryBase *e)
uint32_t evpn_igmp_flags() const
bool DeleteLocalMember(const boost::uuids::uuid &intf_uuid)
void ModifyVmInterface(DBTablePartBase *partition, DBEntryBase *e)
void FlushAllPeerInfo(const Agent *agent, const Peer *peer, uint64_t peer_identifier)
MulticastGroupObject(const std::string &vrf_name, const std::string &vn_name, const Ip4Address &grp_addr, const Ip4Address &src_addr)
void set_dependent_mg(MulticastGroupObject *obj)
TunnelType::TypeBmap tunnel_bmap_
MGList::iterator mg_list_begin()
void ResyncDependentVrf(MulticastGroupObject *obj)
void DeleteVmToMulticastObjMap(const boost::uuids::uuid &vm_itf_uuid, const MulticastGroupObject *obj)
VmMulticastGroupObjectList vm_to_mcobj_list_
uint64_t peer_identifier_
const Ip4Address & GetGroupAddress()
MulticastGroupObject * CreateMulticastGroupObject(const string &vrf_name, const string &vn_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, uint32_t vxlan_id)
void DeleteMulticastRoute(const Peer *peer, const string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, uint32_t ethernet_tag, COMPOSITETYPE comp_type)
void set_vxlan_id(uint32_t vxlan_id)
const std::map< boost::uuids::uuid, MacAddress > & GetLocalList()
uint32_t evpn_igmp_flags_
void HandleVxLanChange(const VnEntry *vn)
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
void set_fabric_label(uint32_t label)
void set_vn(const VnEntry *vn)
DBTableWalker::WalkId RouteWalkerIdList[Agent::ROUTE_TABLE_MAX]
boost::asio::ip::address_v4 Ip4Address
virtual ~MulticastGroupObject()
DISALLOW_COPY_AND_ASSIGN(MulticastHandler)
bool FilterVmi(const VmInterface *vmi)
ComponentNHKeyList GetInterfaceComponentNHKeyList(uint8_t interface_flags)
void DeleteEvpnPath(MulticastGroupObject *obj)
void DeleteBroadcast(const Peer *peer, const std::string &vrf_name, uint32_t ethernet_tag, COMPOSITETYPE type)
MulticastDBState(const std::string &vrf_name, const uint32_t vxlan_id)
void McastTableNotify(DBTablePartBase *partition, DBEntryBase *e)
void HandleIpam(const VnEntry *vn)
uint32_t GetEvpnMulticastSGFlags(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
void set_bridge_domain(const BridgeDomainEntry *bd)
void TriggerRemoteRouteChange(MulticastGroupObject *obj, const Peer *peer, const string &vrf_name, const Ip4Address &src, const Ip4Address &grp, const TunnelOlist &olist, uint64_t peer_identifier, bool delete_op, COMPOSITETYPE comp_type, uint32_t label, bool fabric, uint32_t ethernet_tag)
static const uint32_t kMulticastTimeout
const TunnelOlist & fabric_olist() const
void DeleteMulticastObject(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
const std::string & GetVnName()
DBTable::ListenerId vrf_listener_id_
MulticastHandler(Agent *agent)
void UpdateReference(MulticastGroupObject *obj)
void AddBridgeDomain(DBTablePartBase *paritition, DBEntryBase *e)
DependencyList< MulticastGroupObject, MulticastGroupObject > MGList
uint64_t peer_identifier()
void ModifyVN(DBTablePartBase *partition, DBEntryBase *e)
void ClearLocalListSize()
std::set< MulticastGroupObject * > & GetVmToMulticastObjMap(const boost::uuids::uuid &uuid)
void set_mvpn_registered(bool mvpn_registered)
std::vector< std::string > ManagedPhysicalDevicesList
ManagedPhysicalDevicesList physical_devices_
uint32_t vxlan_id() const
void ModifyFabricMembers(const Peer *peer, const std::string &vrf_name, const Ip4Address &group, const Ip4Address &source, uint32_t source_label, const TunnelOlist &olist, uint64_t peer_identifier=0)
std::map< boost::uuids::uuid, string > vn_vrf_mapping_
std::map< boost::uuids::uuid, MulticastGroupObjectList > VmMulticastGroupObjectList
std::set< MulticastGroupObject * > & GetMulticastObjList()
void AddVmInterfaceInFloodGroup(const VmInterface *vm_itf, MulticastIntfDBState *state)
void reset_bridge_domain()
void DeleteLocalPeerRoute(MulticastGroupObject *sg_object)
DBTable::ListenerId bridge_domain_id_
static MulticastHandler * GetInstance()
void set_peer(const Peer *peer)
void HandleRouteChangeAndMulticastObject(MulticastGroupObject *sg_object, boost::uuids::uuid vm_itf_uuid)
void set_pbb_vrf(bool is_pbb_vrf)
void reset(ObjectType *ptr)
MulticastGroupObject * GetDependentMG(uint32_t isid)
static const Ip4Address kBroadcast
boost::intrusive_ptr< const VnEntry > VnEntryConstRef
void ChangeLearningMode(MulticastGroupObject *obj, bool learning_enabled)
std::string pbb_vrf_name_
void ModifyVRF(DBTablePartBase *partition, DBEntryBase *e)
std::vector< OlistTunnelEntry > TunnelOlist
boost::intrusive_ptr< const BridgeDomainEntry > BridgeDomainConstRef
bool FindVmToMulticastObjMap(const boost::uuids::uuid &vm_itf_uuid, MulticastGroupObjectList &objList)
void ModifyEvpnMembers(const Peer *peer, const std::string &vrf_name, const Ip4Address &grp, const Ip4Address &src, const TunnelOlist &olist, uint32_t ethernet_tag, uint64_t peer_identifier=0)
void set_evpn_igmp_flags(uint32_t evpn_igmp_flags)
MGList::iterator mg_list_end()
DEPENDENCY_LIST(MulticastGroupObject, MulticastGroupObject, mg_list_)
const std::string & pbb_vrf_name()
TunnelOlist fabric_olist_
virtual ~MulticastHandler()
bool mvpn_registered() const
MulticastGroupObject * dependent_mg()
virtual bool RouteWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
virtual ~MulticastTEWalker()
void DeleteVmInterfaceFromSourceGroup(const std::string &mvpn_vrf_name, const VmInterface *vm_itf, const Ip4Address &src_addr, const Ip4Address &grp_addr)
void set_fabric_olist(const TunnelOlist &olist)