OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
multicast.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef multicast_agent_oper_hpp
6 #define multicast_agent_oper_hpp
7 
8 #include <netinet/in.h>
9 #include <net/ethernet.h>
10 #include <cmn/agent_cmn.h>
11 #include <cmn/agent.h>
12 #include <oper/nexthop.h>
13 #include <oper/vn.h>
15 
17 
18 #define MCTRACE(obj, ...) \
19 do { \
20  Multicast##obj::TraceMsg(MulticastTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
21 } while (false)
22 
23 #define IS_BCAST_MCAST(grp) ((grp.to_ulong() == 0xFFFFFFFF) || \
24  ((grp.to_ulong() & 0xF0000000) == 0xE0000000))
25 class BgpPeer;
26 
29  uint32_t label,
30  const Ip4Address &addr,
31  TunnelType::TypeBmap bmap) :
32  device_uuid_(device_uuid),
33  label_(label),
34  daddr_(addr),
35  tunnel_bmap_(bmap) { }
36  virtual ~OlistTunnelEntry() { }
37 
39  uint32_t label_;
42 };
43 
45  MulticastDBState(const std::string &vrf_name, const uint32_t vxlan_id) :
46  vrf_name_(vrf_name), vxlan_id_(vxlan_id), learning_enabled_(false),
47  pbb_etree_enabled_(false) { }
48 
49  std::string vrf_name_;
50  uint32_t vxlan_id_;
54 };
55 
58 
59  std::string vrf_name_;
61 };
62 
65  std::set<std::string> vrf_list_;
66 };
67 
68 typedef std::vector<OlistTunnelEntry> TunnelOlist;
69 
71 public:
73  MulticastGroupObject(const std::string &vrf_name,
74  const Ip4Address &grp_addr,
75  const std::string &vn_name) :
76  vrf_name_(vrf_name), grp_address_(grp_addr), vn_name_(vn_name),
77  vxlan_id_(0), peer_identifier_(0), deleted_(false), vn_(NULL),
78  dependent_mg_(this, NULL) , pbb_vrf_(false), pbb_vrf_name_(""),
79  peer_(NULL), fabric_label_(0), learning_enabled_(false),
80  pbb_etree_enabled_(false), bridge_domain_(NULL),
82  boost::system::error_code ec;
83  src_address_ = IpAddress::from_string("0.0.0.0", ec).to_v4();
84  local_olist_.clear();
85  };
86  MulticastGroupObject(const std::string &vrf_name,
87  const std::string &vn_name,
88  const Ip4Address &grp_addr,
89  const Ip4Address &src_addr) :
90  vrf_name_(vrf_name), grp_address_(grp_addr), vn_name_(vn_name),
91  src_address_(src_addr), vxlan_id_(0), peer_identifier_(0),
92  deleted_(false), vn_(NULL), dependent_mg_(this, NULL),
93  pbb_vrf_(false), pbb_vrf_name_(""),
94  peer_(NULL), fabric_label_(0), learning_enabled_(false),
95  pbb_etree_enabled_(false), bridge_domain_(NULL),
97  local_olist_.clear();
98  };
99  virtual ~MulticastGroupObject() { };
100 
101  bool CanBeDeleted() const;
102 
103  //Add local member is local VM in server.
104  bool AddLocalMember(const boost::uuids::uuid &intf_uuid,
105  const MacAddress &mac) {
106  local_olist_[intf_uuid] = mac;
107  return true;
108  };
109 
110  //Delete local member from VM list in server
111  bool DeleteLocalMember(const boost::uuids::uuid &intf_uuid) {
112  if (local_olist_.find(intf_uuid) == local_olist_.end()) {
113  return false;
114  }
115  local_olist_.erase(intf_uuid);
116  return true;
117  };
118 
119  // Get list of local VMs.
120  const std::map<boost::uuids::uuid, MacAddress> &GetLocalList() {
121  return local_olist_;
122  }
123 
124  uint32_t GetLocalListSize() { return local_olist_.size(); };
125  void ClearLocalListSize() { local_olist_.clear(); };
126 
127  //Labels for server + server list + ingress source label
128  void FlushAllPeerInfo(const Agent *agent,
129  const Peer *peer,
130  uint64_t peer_identifier);
131 
132  //Gets
133  const std::string &vrf_name() const { return vrf_name_; };
136  ComponentNHKeyList GetInterfaceComponentNHKeyList(uint8_t interface_flags);
137  const std::string &GetVnName() { return vn_name_; };
138  bool IsDeleted() { return deleted_; };
139  void Deleted(bool val) { deleted_ = val; };
140  bool CanUnsubscribe() const {return (deleted_);}
142  uint32_t vxlan_id() const {return vxlan_id_;}
143  void set_peer_identifier(uint64_t peer_id) {peer_identifier_ = peer_id;}
144  uint64_t peer_identifier() {return peer_identifier_;}
145  void set_vn(const VnEntry *vn);
146  void reset_vn();
148  bridge_domain_.reset(bd);
149  }
150 
152  bridge_domain_.reset(NULL);
153  }
154 
155  const VnEntry *vn() const {return vn_.get();}
156 
157  void set_pbb_vrf(bool is_pbb_vrf) {
158  pbb_vrf_ = is_pbb_vrf;
159  }
160  bool pbb_vrf() const {
161  return pbb_vrf_;
162  }
163 
165  return mg_list_.begin();
166  }
167 
169  return mg_list_.end();
170  }
171 
173  dependent_mg_.reset(obj);
174  }
175 
177  return dependent_mg_.get();
178  }
179 
180  void set_fabric_olist(const TunnelOlist &olist) {
181  fabric_olist_ = olist;
182  }
183 
184  const TunnelOlist& fabric_olist() const {
185  return fabric_olist_;
186  }
187 
188  void set_pbb_vrf_name(std::string name) {
189  pbb_vrf_name_ = name;
190  }
191 
192  const std::string& pbb_vrf_name() {
193  return pbb_vrf_name_;
194  }
195 
196  const Peer *peer() {
197  return peer_;
198  }
199 
200  void set_peer(const Peer *peer) {
201  peer_ = peer;
202  }
203 
204  uint32_t fabric_label() const {
205  return fabric_label_;
206  }
207 
208  void set_fabric_label(uint32_t label) {
209  fabric_label_ = label;
210  }
211 
212  bool learning_enabled() const {
213  return learning_enabled_;
214  }
215 
218  }
219 
220  bool pbb_etree_enabled() const {
221  return pbb_etree_enabled_;
222  }
223 
226  }
227 
228  bool mvpn_registered() const {
229  return mvpn_registered_;
230  }
231 
234  }
235 
236  void incr_vn_count() {
237  vn_count_++;
238  }
239 
240  void decr_vn_count() {
241  vn_count_--;
242  }
243 
244  uint32_t vn_count() {
245  return vn_count_;
246  }
247 
248  uint32_t evpn_igmp_flags() const {
249  return evpn_igmp_flags_;
250  }
251 
254  }
255 
256  MulticastGroupObject* GetDependentMG(uint32_t isid);
257 private:
258  friend class MulticastHandler;
259  std::string vrf_name_;
261  std::string vn_name_;
263  uint32_t vxlan_id_;
265  bool deleted_;
266  std::map<boost::uuids::uuid, MacAddress> local_olist_; /* UUID of local i/f
267  and its MAC */
269 
272 
273  bool pbb_vrf_;
274  std::string pbb_vrf_name_;
276  const Peer *peer_;
277  uint32_t fabric_label_;
283  uint32_t vn_count_;
286 };
287 
289 public:
291  MulticastTEWalker(const std::string &name, Agent *agent);
292  virtual ~MulticastTEWalker();
293 
294  virtual bool RouteWalkNotify(DBTablePartBase *partition, DBEntryBase *e);
295 
296 private:
298 };
299 
300 struct AgentRouteData;
301 
302 /* Static class for handling multicast objects common functionalities */
304 public:
305  static const uint32_t kMulticastTimeout = 5 * 60 * 1000;
306  static const Ip4Address kBroadcast;
307  typedef std::set<MulticastGroupObject *> MulticastGroupObjectList;
308  typedef std::map<boost::uuids::uuid, MulticastGroupObjectList>
310  typedef std::vector<std::string> ManagedPhysicalDevicesList;
311 
313  virtual ~MulticastHandler() {
314  assert(multicast_obj_list_.size() == 0);
315  }
316 
317  MulticastGroupObject *CreateMulticastGroupObject(const string &vrf_name,
318  const string &vn_name,
319  const Ip4Address &src_addr,
320  const Ip4Address &grp_addr,
321  uint32_t vxlan_id);
322 
323  /* Called by XMPP to add ctrl node sent olist and label */
324  void ModifyFabricMembers(const Peer *peer,
325  const std::string &vrf_name,
326  const Ip4Address &group,
327  const Ip4Address &source,
328  uint32_t source_label,
329  const TunnelOlist &olist,
330  uint64_t peer_identifier = 0);
331  void ModifyEvpnMembers(const Peer *peer,
332  const std::string &vrf_name,
333  const Ip4Address &grp,
334  const Ip4Address &src,
335  const TunnelOlist &olist,
336  uint32_t ethernet_tag,
337  uint64_t peer_identifier = 0);
338  /* Called as a result of XMPP message received with OLIST of
339  * evpn endpoints with mpls or vxlan encap
340  */
341  void ModifyEvpnMembers(const Peer *peer,
342  const std::string &vrf_name,
343  const TunnelOlist &olist,
344  uint32_t ethernet_tag,
345  uint64_t peer_identifier = 0);
346  void ModifyTorMembers(const Peer *peer,
347  const std::string &vrf_name,
348  const TunnelOlist &olist,
349  uint32_t ethernet_tag,
350  uint64_t peer_identifier = 0);
351  void ModifyMvpnVrfRegistration(const Peer *peer,
352  const std::string &vrf_name,
353  const Ip4Address &group,
354  const Ip4Address &source,
355  uint64_t peer_identifier);
356 
357  //Registered for VN notification
358  void ModifyVN(DBTablePartBase *partition, DBEntryBase *e);
359  //Registered for VRF notification
360  void ModifyVRF(DBTablePartBase *partition, DBEntryBase *e);
361  void McastTableNotify(DBTablePartBase *partition, DBEntryBase *e);
362  //Registered for VM notification
363  void ModifyVmInterface(DBTablePartBase *partition, DBEntryBase *e);
364  void NotifyPhysicalDevice(DBTablePartBase *partition, DBEntryBase *e);
365  //Register VM and VN notification
366  void Register();
367 
368  //Singleton object reference
370  return obj_;
371  };
372  void TriggerLocalRouteChange(MulticastGroupObject *obj, const Peer *peer);
374  const Peer *peer,
375  const string &vrf_name,
376  const Ip4Address &src,
377  const Ip4Address &grp,
378  const TunnelOlist &olist,
379  uint64_t peer_identifier,
380  bool delete_op,
381  COMPOSITETYPE comp_type,
382  uint32_t label,
383  bool fabric,
384  uint32_t ethernet_tag);
385  void HandleIpam(const VnEntry *vn);
386  void HandleVxLanChange(const VnEntry *vn);
388  DBEntryBase *e);
389  //For test routines to clear all routes and mpls label
390  void Shutdown();
391  //Multicast obj list addition deletion
392  MulticastGroupObject *FindFloodGroupObject(const std::string &vrf_name);
393  MulticastGroupObject *FindActiveGroupObject(const std::string &vrf_name,
394  const Ip4Address &dip);
395  MulticastGroupObject *FindActiveGroupObject(const std::string &vrf_name,
396  const Ip4Address &sip,
397  const Ip4Address &dip);
398  std::set<MulticastGroupObject *> &GetMulticastObjList() {
399  return multicast_obj_list_;
400  };
401  MulticastGroupObject *FindGroupObject(const std::string &vrf_name,
402  const Ip4Address &sip,
403  const Ip4Address &dip);
405  uint8_t flags);
406  void AddMulticastRoute(MulticastGroupObject *obj, const Peer *peer,
407  uint32_t ethernet_tag,
408  AgentRouteData *data,
409  AgentRouteData *bridge_data);
410  void DeleteMulticastRoute(const Peer *peer,
411  const string &vrf_name,
412  const Ip4Address &src_addr,
413  const Ip4Address &grp_addr,
414  uint32_t ethernet_tag,
415  COMPOSITETYPE comp_type);
416  bool FlushPeerInfo(uint64_t peer_sequence);
417  void DeleteBroadcast(const Peer *peer,
418  const std::string &vrf_name,
419  uint32_t ethernet_tag,
421  void DeleteMulticastObject(const std::string &vrf_name,
422  const Ip4Address &src_addr,
423  const Ip4Address &grp_addr);
424 
425  const Agent *agent() const {return agent_;}
426  void Terminate();
427  void AddBridgeDomain(DBTablePartBase *paritition,
428  DBEntryBase *e);
430  return physical_devices_;
431  }
432 
433  void AddLocalPeerRoute(MulticastGroupObject *sg_object);
435  void CreateMulticastVrfSourceGroup(const std::string &vrf_name,
436  const std::string &vn_name,
437  const Ip4Address &src_addr,
438  const Ip4Address &grp_addr);
440  boost::uuids::uuid vm_itf_uuid);
441  void DeleteMulticastVrfSourceGroup(const std::string &vrf_name,
442  const Ip4Address &src_addr,
443  const Ip4Address &grp_addr);
444  bool AddVmInterfaceToVrfSourceGroup(const std::string &vrf_name,
445  const std::string &vn_name,
446  const VmInterface *vm_itf,
447  const Ip4Address &src_addr,
448  const Ip4Address &grp_addr);
449  void DeleteVmInterfaceFromVrfSourceGroup(const std::string &vrf_name,
450  const VmInterface *vm_itf,
451  const Ip4Address &src_addr,
452  const Ip4Address &grp_addr);
453  void DeleteVmInterfaceFromVrfSourceGroup(const std::string &vrf_name,
454  const VmInterface *vm_itf,
455  const Ip4Address &grp_addr = Ip4Address());
456 
457  void AddVmInterfaceToSourceGroup(const std::string &mvpn_vrf_name,
458  const std::string &vn_name,
459  const VmInterface *vm_itf,
460  const Ip4Address &src_addr,
461  const Ip4Address &grp_addr);
462  void DeleteVmInterfaceFromSourceGroup(const std::string &mvpn_vrf_name,
463  const VmInterface *vm_itf,
464  const Ip4Address &src_addr,
465  const Ip4Address &grp_addr);
466  void DeleteVmInterfaceFromSourceGroup(const std::string &mvpn_vrf_name,
467  const VmInterface *vm_itf,
468  const Ip4Address &grp_addr);
469  void DeleteVmInterfaceFromSourceGroup(const std::string &mvpn_vrf_name,
470  const std::string &vm_vrf_name,
471  const VmInterface *vm_itf);
472 
473  void SetEvpnMulticastSGFlags(const std::string &vrf_name,
474  const Ip4Address &src_addr,
475  const Ip4Address &grp_addr,
476  uint32_t flags);
477  uint32_t GetEvpnMulticastSGFlags(const std::string &vrf_name,
478  const Ip4Address &src_addr,
479  const Ip4Address &grp_addr);
480 
481  bool FilterVmi(const VmInterface *vmi);
482 
483  static void GetMulticastMacFromIp(const Ip4Address &ip, MacAddress &mac) {
484  const Ip4Address::bytes_type &bytes_v4 = ip.to_bytes();
485  MacAddress mac_address((unsigned int)0x01,
486  (unsigned int)0x00,
487  (unsigned int)0x5E,
488  (unsigned int)(bytes_v4.at(1)&0x7F),
489  (unsigned int)bytes_v4.at(2),
490  (unsigned int)bytes_v4.at(3));
491  mac = mac_address;
492  }
493 
494 private:
495  //operations on list of all objectas per group/source/vrf
497  multicast_obj_list_.insert(obj);
498  };
499  //VM intf add-delete
500  void DeleteVmInterface(const VmInterface *intf,
501  const std::string &vrf_name);
502  void DeleteVmInterface(const VmInterface *intf,
503  MulticastIntfDBState *state);
504  void AddVmInterfaceInFloodGroup(const VmInterface *vm_itf,
505  MulticastIntfDBState *state);
506  void AddVmInterfaceInFloodGroup(const VmInterface *vm_itf,
507  const std::string &vrf_name);
508  void Resync(MulticastGroupObject *obj);
510 
511  //broadcast rt add /delete
513  const std::string &vrf_name,
514  const std::string &vn_name,
515  const Ip4Address &addr,
516  uint32_t label,
517  int vxlan_id,
518  uint32_t ethernet_tag);
520  bool learning_enabled);
522  bool pbb_etree_enabled);
523 
524  //VM itf to multicast ob
526  MulticastGroupObject *obj) {
527 
528  if (this->vm_to_mcobj_list_[vm_itf_uuid].find(obj) ==
529  this->vm_to_mcobj_list_[vm_itf_uuid].end()) {
530  this->vm_to_mcobj_list_[vm_itf_uuid].insert(obj);
531  }
532  };
533 
535  MulticastGroupObjectList &objList) {
536 
537  VmMulticastGroupObjectList::iterator vmi_it =
538  vm_to_mcobj_list_.find(vm_itf_uuid);
539  if (vmi_it == vm_to_mcobj_list_.end()) {
540  return false;
541  }
542 
543  objList = this->vm_to_mcobj_list_[vm_itf_uuid];
544  return true;
545  }
546 
548  const MulticastGroupObject *obj) {
549  VmMulticastGroupObjectList::iterator vmi_it =
550  vm_to_mcobj_list_.find(vm_itf_uuid);
551  if (vmi_it == vm_to_mcobj_list_.end()) {
552  return;
553  }
554 
555  MulticastGroupObjectList::iterator mc_it = vmi_it->second.begin();
556  for (;mc_it != vmi_it->second.end(); mc_it++) {
557  if (*mc_it == obj) {
558  vmi_it->second.erase(mc_it);
559  break;
560  }
561  }
562 
563  if (vmi_it->second.size() == 0) {
564  vm_to_mcobj_list_.erase(vmi_it);
565  }
566  };
567 
568  std::set<MulticastGroupObject *> &
570  {
571  return vm_to_mcobj_list_[uuid];
572  };
573 
579 
581  std::map<std::string, std::vector<VnIpam> > vrf_ipam_mapping_;
582  //VN uuid to VRF name mapping
583  std::map<boost::uuids::uuid, string> vn_vrf_mapping_;
584  //VM uuid <-> VN uuid
585  //List of all multicast objects(VRF/G/S)
587  //Reference mapping of VM to participating multicast object list
589 
598 };
599 
600 #endif /* multicast_agent_oper_hpp */
void DeleteVmInterface(const VmInterface *intf, const std::string &vrf_name)
Definition: multicast.cc:678
bool CanUnsubscribe() const
Definition: multicast.h:140
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)
Definition: multicast.cc:1795
uint32_t TypeBmap
Definition: nexthop.h:248
std::set< std::string > vrf_list_
Definition: multicast.h:65
void Terminate()
Definition: multicast.cc:71
bool layer2_control_word_
Definition: multicast.h:53
void ModifyMvpnVrfRegistration(const Peer *peer, const std::string &vrf_name, const Ip4Address &group, const Ip4Address &source, uint64_t peer_identifier)
Definition: multicast.cc:1348
uint32_t GetLocalListSize()
Definition: multicast.h:124
void TriggerLocalRouteChange(MulticastGroupObject *obj, const Peer *peer)
Definition: multicast.cc:843
static MulticastHandler * obj_
Definition: multicast.h:578
MulticastGroupObject * FindGroupObject(const std::string &vrf_name, const Ip4Address &sip, const Ip4Address &dip)
Definition: multicast.cc:772
void AddToMulticastObjList(MulticastGroupObject *obj)
Definition: multicast.h:496
Agent * agent() const
const std::string & vrf_name() const
Definition: multicast.h:133
MulticastGroupObject(const std::string &vrf_name, const Ip4Address &grp_addr, const std::string &vn_name)
Definition: multicast.h:73
void ChangePbbEtreeMode(MulticastGroupObject *obj, bool pbb_etree_enabled)
Definition: multicast.cc:465
void set_learning_enabled(bool learning_enabled)
Definition: multicast.h:216
DependencyRef< MulticastGroupObject, MulticastGroupObject > dependent_mg_
Definition: multicast.h:270
MulticastDBState * CreateBridgeDomainMG(DBTablePartBase *p, BridgeDomainEntry *bd)
Definition: multicast.cc:376
DBTable::ListenerId vn_listener_id_
Definition: multicast.h:590
bool FlushPeerInfo(uint64_t peer_sequence)
Definition: multicast.cc:1408
virtual ~OlistTunnelEntry()
Definition: multicast.h:36
uint32_t fabric_label() const
Definition: multicast.h:204
void set_pbb_etree_enabled(bool pbb_etree_enabled)
Definition: multicast.h:224
const Peer * peer()
Definition: multicast.h:196
void AddVmToMulticastObjMap(const boost::uuids::uuid &vm_itf_uuid, MulticastGroupObject *obj)
Definition: multicast.h:525
const Ip4Address & GetSourceAddress()
Definition: multicast.h:135
std::set< MulticastGroupObject * > MulticastGroupObjectList
Definition: multicast.h:307
bool pbb_vrf() const
Definition: multicast.h:160
void ModifyTorMembers(const Peer *peer, const std::string &vrf_name, const TunnelOlist &olist, uint32_t ethernet_tag, uint64_t peer_identifier=0)
Definition: multicast.cc:1322
SandeshTraceBufferPtr MulticastTraceBuf
bool CanBeDeleted() const
Definition: multicast.cc:475
void HandleVnParametersChange(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:160
std::string vrf_name_
Definition: multicast.h:59
ComponentNHKeyList GetInterfaceComponentNHKeyList(MulticastGroupObject *obj, uint8_t flags)
Definition: multicast.cc:827
int ListenerId
Definition: db_table.h:62
const Peer * peer_
Definition: multicast.h:276
const ManagedPhysicalDevicesList & physical_devices() const
Definition: multicast.h:429
AgentRouteWalkerPtr te_walker_
Definition: multicast.h:596
const VnEntry * vn() const
Definition: multicast.h:155
DISALLOW_COPY_AND_ASSIGN(MulticastGroupObject)
boost::uuids::uuid uuid
void set_pbb_vrf_name(std::string name)
Definition: multicast.h:188
void CreateMulticastVrfSourceGroup(const std::string &vrf_name, const std::string &vn_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
Definition: multicast.cc:1620
DBTable::ListenerId physical_device_listener_id_
Definition: multicast.h:594
ObjectType * get() const
Definition: dependency.h:49
uint32_t fabric_label_
Definition: multicast.h:277
OlistTunnelEntry(const boost::uuids::uuid &device_uuid, uint32_t label, const Ip4Address &addr, TunnelType::TypeBmap bmap)
Definition: multicast.h:28
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)
Definition: multicast.cc:87
std::map< boost::uuids::uuid, MacAddress > local_olist_
Definition: multicast.h:266
void AddMulticastRoute(MulticastGroupObject *obj, const Peer *peer, uint32_t ethernet_tag, AgentRouteData *data, AgentRouteData *bridge_data)
Definition: multicast.cc:915
void DeleteVmInterfaceFromVrfSourceGroup(const std::string &vrf_name, const VmInterface *vm_itf, const Ip4Address &src_addr, const Ip4Address &grp_addr)
Definition: multicast.cc:1843
bool pbb_etree_enabled() const
Definition: multicast.h:220
static void GetMulticastMacFromIp(const Ip4Address &ip, MacAddress &mac)
Definition: multicast.h:483
MulticastGroupObject * FindFloodGroupObject(const std::string &vrf_name)
Definition: multicast.cc:764
void SetEvpnMulticastSGFlags(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, uint32_t flags)
Definition: multicast.cc:1970
bool pbb_etree_enabled_
Definition: multicast.h:52
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
void Resync(MulticastGroupObject *obj)
Definition: multicast.cc:1512
MulticastTEWalker(const std::string &name, Agent *agent)
Definition: multicast.cc:1997
DBTableBase::ListenerId id_
Definition: multicast.h:60
bool learning_enabled() const
Definition: multicast.h:212
void DeleteMulticastVrfSourceGroup(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
Definition: multicast.cc:1709
MulticastGroupObjectList multicast_obj_list_
Definition: multicast.h:586
std::vector< ComponentNHKeyPtr > ComponentNHKeyList
Definition: nexthop.h:1641
Agent * agent_
Definition: multicast.h:580
MulticastGroupObject * FindActiveGroupObject(const std::string &vrf_name, const Ip4Address &dip)
bool AddLocalMember(const boost::uuids::uuid &intf_uuid, const MacAddress &mac)
Definition: multicast.h:104
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)
Definition: multicast.cc:1752
uint8_t type
Definition: load_balance.h:109
boost::uuids::uuid device_uuid_
Definition: multicast.h:38
DBTable::ListenerId interface_listener_id_
Definition: multicast.h:592
const Agent * agent() const
Definition: multicast.h:425
std::map< std::string, std::vector< VnIpam > > vrf_ipam_mapping_
Definition: multicast.h:581
Definition: agent.h:358
BridgeDomainConstRef bridge_domain_
Definition: multicast.h:281
uint32_t label_
Definition: multicast.h:39
void set_peer_identifier(uint64_t peer_id)
Definition: multicast.h:143
void AddLocalPeerRoute(MulticastGroupObject *sg_object)
Definition: multicast.cc:1554
void NotifyPhysicalDevice(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:547
uint32_t evpn_igmp_flags() const
Definition: multicast.h:248
bool DeleteLocalMember(const boost::uuids::uuid &intf_uuid)
Definition: multicast.h:111
void ModifyVmInterface(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:593
void FlushAllPeerInfo(const Agent *agent, const Peer *peer, uint64_t peer_identifier)
Definition: multicast.cc:1374
MulticastGroupObject(const std::string &vrf_name, const std::string &vn_name, const Ip4Address &grp_addr, const Ip4Address &src_addr)
Definition: multicast.h:86
void set_dependent_mg(MulticastGroupObject *obj)
Definition: multicast.h:172
Ip4Address daddr_
Definition: multicast.h:40
TunnelType::TypeBmap tunnel_bmap_
Definition: multicast.h:41
MGList::iterator mg_list_begin()
Definition: multicast.h:164
void ResyncDependentVrf(MulticastGroupObject *obj)
Definition: multicast.cc:1472
void DeleteVmToMulticastObjMap(const boost::uuids::uuid &vm_itf_uuid, const MulticastGroupObject *obj)
Definition: multicast.h:547
uint32_t vn_count()
Definition: multicast.h:244
VmMulticastGroupObjectList vm_to_mcobj_list_
Definition: multicast.h:588
uint64_t peer_identifier_
Definition: multicast.h:264
const Ip4Address & GetGroupAddress()
Definition: multicast.h:134
MulticastGroupObject * CreateMulticastGroupObject(const string &vrf_name, const string &vn_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, uint32_t vxlan_id)
Definition: multicast.cc:494
void DeleteMulticastRoute(const Peer *peer, const string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, uint32_t ethernet_tag, COMPOSITETYPE comp_type)
Definition: multicast.cc:943
void set_vxlan_id(uint32_t vxlan_id)
Definition: multicast.h:141
const std::map< boost::uuids::uuid, MacAddress > & GetLocalList()
Definition: multicast.h:120
std::string vrf_name_
Definition: multicast.h:49
Definition: peer.h:44
uint32_t evpn_igmp_flags_
Definition: multicast.h:284
void HandleVxLanChange(const VnEntry *vn)
Definition: multicast.cc:138
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
std::string vn_name_
Definition: multicast.h:261
void set_fabric_label(uint32_t label)
Definition: multicast.h:208
void set_vn(const VnEntry *vn)
Definition: multicast.cc:804
DBTableWalker::WalkId RouteWalkerIdList[Agent::ROUTE_TABLE_MAX]
Definition: multicast.h:290
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
virtual ~MulticastGroupObject()
Definition: multicast.h:99
DISALLOW_COPY_AND_ASSIGN(MulticastHandler)
Definition: vn.h:151
bool FilterVmi(const VmInterface *vmi)
Definition: multicast.cc:571
ComponentNHKeyList GetInterfaceComponentNHKeyList(uint8_t interface_flags)
Definition: multicast.cc:813
void DeleteEvpnPath(MulticastGroupObject *obj)
Definition: multicast.cc:1526
void DeleteBroadcast(const Peer *peer, const std::string &vrf_name, uint32_t ethernet_tag, COMPOSITETYPE type)
Definition: multicast.cc:126
Ip4Address grp_address_
Definition: multicast.h:260
MulticastDBState(const std::string &vrf_name, const uint32_t vxlan_id)
Definition: multicast.h:45
void McastTableNotify(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:257
void HandleIpam(const VnEntry *vn)
Definition: multicast.cc:513
uint32_t GetEvpnMulticastSGFlags(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
Definition: multicast.cc:1986
void set_bridge_domain(const BridgeDomainEntry *bd)
Definition: multicast.h:147
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)
Definition: multicast.cc:977
static const uint32_t kMulticastTimeout
Definition: multicast.h:305
const TunnelOlist & fabric_olist() const
Definition: multicast.h:184
void DeleteMulticastObject(const std::string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
Definition: multicast.cc:726
const std::string & GetVnName()
Definition: multicast.h:137
VnEntryConstRef vn_
Definition: multicast.h:268
DBTable::ListenerId vrf_listener_id_
Definition: multicast.h:591
Ip4Address src_address_
Definition: multicast.h:262
MulticastHandler(Agent *agent)
Definition: multicast.cc:1396
void UpdateReference(MulticastGroupObject *obj)
Definition: multicast.cc:1488
bool learning_enabled_
Definition: multicast.h:51
void AddBridgeDomain(DBTablePartBase *paritition, DBEntryBase *e)
Definition: multicast.cc:399
DependencyList< MulticastGroupObject, MulticastGroupObject > MGList
Definition: multicast.h:72
uint64_t peer_identifier()
Definition: multicast.h:144
void ModifyVN(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:249
#define COMPOSITETYPE
Definition: nexthop.h:1600
void ClearLocalListSize()
Definition: multicast.h:125
std::set< MulticastGroupObject * > & GetVmToMulticastObjMap(const boost::uuids::uuid &uuid)
Definition: multicast.h:569
uint32_t vxlan_id_
Definition: multicast.h:50
void Deleted(bool val)
Definition: multicast.h:139
void set_mvpn_registered(bool mvpn_registered)
Definition: multicast.h:232
std::vector< std::string > ManagedPhysicalDevicesList
Definition: multicast.h:310
ManagedPhysicalDevicesList physical_devices_
Definition: multicast.h:595
uint32_t vxlan_id() const
Definition: multicast.h:142
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)
Definition: multicast.cc:1174
std::string vrf_name_
Definition: multicast.h:259
std::map< boost::uuids::uuid, string > vn_vrf_mapping_
Definition: multicast.h:583
std::map< boost::uuids::uuid, MulticastGroupObjectList > VmMulticastGroupObjectList
Definition: multicast.h:309
std::set< MulticastGroupObject * > & GetMulticastObjList()
Definition: multicast.h:398
void AddVmInterfaceInFloodGroup(const VmInterface *vm_itf, MulticastIntfDBState *state)
Definition: multicast.cc:635
void reset_bridge_domain()
Definition: multicast.h:151
void DeleteLocalPeerRoute(MulticastGroupObject *sg_object)
Definition: multicast.cc:1594
DBTable::ListenerId bridge_domain_id_
Definition: multicast.h:593
static MulticastHandler * GetInstance()
Definition: multicast.h:369
void set_peer(const Peer *peer)
Definition: multicast.h:200
void HandleRouteChangeAndMulticastObject(MulticastGroupObject *sg_object, boost::uuids::uuid vm_itf_uuid)
Definition: multicast.cc:1657
void set_pbb_vrf(bool is_pbb_vrf)
Definition: multicast.h:157
void reset(ObjectType *ptr)
Definition: dependency.h:32
MulticastGroupObject * GetDependentMG(uint32_t isid)
Definition: multicast.cc:483
static const Ip4Address kBroadcast
Definition: multicast.h:306
boost::intrusive_ptr< const VnEntry > VnEntryConstRef
Definition: agent.h:70
void ChangeLearningMode(MulticastGroupObject *obj, bool learning_enabled)
Definition: multicast.cc:455
std::string pbb_vrf_name_
Definition: multicast.h:274
void ModifyVRF(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:338
std::vector< OlistTunnelEntry > TunnelOlist
Definition: multicast.h:68
boost::intrusive_ptr< const BridgeDomainEntry > BridgeDomainConstRef
Definition: agent.h:190
bool FindVmToMulticastObjMap(const boost::uuids::uuid &vm_itf_uuid, MulticastGroupObjectList &objList)
Definition: multicast.h:534
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)
Definition: multicast.cc:1245
void set_evpn_igmp_flags(uint32_t evpn_igmp_flags)
Definition: multicast.h:252
MGList::iterator mg_list_end()
Definition: multicast.h:168
DEPENDENCY_LIST(MulticastGroupObject, MulticastGroupObject, mg_list_)
const std::string & pbb_vrf_name()
Definition: multicast.h:192
TunnelOlist fabric_olist_
Definition: multicast.h:275
virtual ~MulticastHandler()
Definition: multicast.h:313
bool mvpn_registered() const
Definition: multicast.h:228
MulticastGroupObject * dependent_mg()
Definition: multicast.h:176
virtual bool RouteWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
Definition: multicast.cc:2004
virtual ~MulticastTEWalker()
Definition: multicast.cc:2001
void DeleteVmInterfaceFromSourceGroup(const std::string &mvpn_vrf_name, const VmInterface *vm_itf, const Ip4Address &src_addr, const Ip4Address &grp_addr)
Definition: multicast.cc:1872
void set_fabric_olist(const TunnelOlist &olist)
Definition: multicast.h:180