INET Framework for OMNeT++/OMNEST
inet::IGMPv3::RouterGroupData Struct Reference

#include <IGMPv3.h>

Public Member Functions

 RouterGroupData (RouterInterfaceData *parent, IPv4Address group)
 
virtual ~RouterGroupData ()
 
bool hasSourceRecord (IPv4Address source)
 
SourceRecordcreateSourceRecord (IPv4Address source)
 
SourceRecordgetOrCreateSourceRecord (IPv4Address source)
 
void deleteSourceRecord (IPv4Address source)
 
std::string getStateInfo () const
 
void collectForwardedSources (IPv4MulticastSourceList &result) const
 

Public Attributes

RouterInterfaceDataparent
 
IPv4Address groupAddr
 
FilterMode filter
 
RouterGroupState state
 
cMessage * timer
 
SourceToSourceRecordMap sources
 

Private Member Functions

void printSourceList (std::ostream &out, bool withRunningTimer) const
 

Constructor & Destructor Documentation

inet::IGMPv3::RouterGroupData::RouterGroupData ( RouterInterfaceData parent,
IPv4Address  group 
)
127 {
128  ASSERT(parent);
129  ASSERT(groupAddr.isMulticast());
130 
131  timer = new cMessage("IGMPv3 router group timer", IGMPV3_R_GROUP_TIMER);
132  timer->setContextPointer(this);
133 }
RouterInterfaceData * parent
Definition: IGMPv3.h:126
cMessage * timer
Definition: IGMPv3.h:130
bool isMulticast() const
Returns true if this address is in the multicast address range, 224.0.0.0 thru 239.255.255.255, that is, it&#39;s a class D address.
Definition: IPv4Address.h:226
IPv4Address groupAddr
Definition: IGMPv3.h:127
RouterGroupState state
Definition: IGMPv3.h:129
Definition: IGMPv3.h:63
Definition: IGMPv3.h:166
FilterMode filter
Definition: IGMPv3.h:128
inet::IGMPv3::RouterGroupData::~RouterGroupData ( )
virtual
136 {
137  parent->owner->cancelAndDelete(timer);
138 }
RouterInterfaceData * parent
Definition: IGMPv3.h:126
cMessage * timer
Definition: IGMPv3.h:130
IGMPv3 * owner
Definition: IGMPv3.h:152

Member Function Documentation

void inet::IGMPv3::RouterGroupData::collectForwardedSources ( IPv4MulticastSourceList result) const

Referenced by inet::IGMPv3::processReport().

189 {
190  switch (filter) {
191  case IGMPV3_FM_INCLUDE:
192  result.filterMode = MCAST_INCLUDE_SOURCES;
193  result.sources.clear();
194  for (const auto & elem : sources) {
195  if (elem.second->sourceTimer && elem.second->sourceTimer->isScheduled())
196  result.sources.push_back(elem.first);
197  }
198  break;
199 
200  case IGMPV3_FM_EXCLUDE:
201  result.filterMode = MCAST_EXCLUDE_SOURCES;
202  result.sources.clear();
203  for (const auto & elem : sources) {
204  if (!elem.second->sourceTimer || !elem.second->sourceTimer->isScheduled())
205  result.sources.push_back(elem.first);
206  }
207  break;
208  }
209 }
SourceToSourceRecordMap sources
Definition: IGMPv3.h:131
Definition: IGMPv3.h:63
FilterMode filter
Definition: IGMPv3.h:128
Definition: IGMPv3.h:64
Definition: InterfaceEntry.h:44
Definition: InterfaceEntry.h:44
IGMPv3::SourceRecord * inet::IGMPv3::RouterGroupData::createSourceRecord ( IPv4Address  source)

Referenced by getOrCreateSourceRecord(), and inet::IGMPv3::processReport().

141 {
142  ASSERT(sources.find(source) == sources.end());
143  SourceRecord *record = new SourceRecord(this, source);
144  sources[source] = record;
145  return record;
146 }
SourceToSourceRecordMap sources
Definition: IGMPv3.h:131
void inet::IGMPv3::RouterGroupData::deleteSourceRecord ( IPv4Address  source)

Referenced by inet::IGMPv3::processReport(), inet::IGMPv3::processRouterGroupTimer(), and inet::IGMPv3::processRouterSourceTimer().

157 {
158  auto it = sources.find(source);
159  if (it != sources.end()) {
160  SourceRecord *record = it->second;
161  sources.erase(it);
162  delete record;
163  }
164 }
SourceToSourceRecordMap sources
Definition: IGMPv3.h:131
IGMPv3::SourceRecord * inet::IGMPv3::RouterGroupData::getOrCreateSourceRecord ( IPv4Address  source)

Referenced by inet::IGMPv3::processReport().

149 {
150  auto it = sources.find(source);
151  if (it != sources.end())
152  return it->second;
153  return createSourceRecord(source);
154 }
SourceToSourceRecordMap sources
Definition: IGMPv3.h:131
SourceRecord * createSourceRecord(IPv4Address source)
Definition: IGMPv3.cc:140
string inet::IGMPv3::RouterGroupData::getStateInfo ( ) const

Referenced by inet::IGMPv3::processReport(), and inet::IGMPv3::processRouterGroupTimer().

167 {
168  ostringstream out;
169  switch (filter) {
170  case IGMPV3_FM_INCLUDE:
171  out << "INCLUDE(";
172  printSourceList(out, true);
173  out << ")";
174  break;
175 
176  case IGMPV3_FM_EXCLUDE:
177  out << "EXCLUDE(";
178  printSourceList(out, true);
179  out << ";";
180  printSourceList(out, false);
181  out << ")";
182  break;
183  }
184  return out.str();
185 }
Definition: IGMPv3.h:63
void printSourceList(std::ostream &out, bool withRunningTimer) const
Definition: IGMPv3.cc:211
FilterMode filter
Definition: IGMPv3.h:128
Definition: IGMPv3.h:64
bool inet::IGMPv3::RouterGroupData::hasSourceRecord ( IPv4Address  source)
inline

Referenced by inet::IGMPv3::processReport().

136 { return sources.find(source) != sources.end(); }
SourceToSourceRecordMap sources
Definition: IGMPv3.h:131
void inet::IGMPv3::RouterGroupData::printSourceList ( std::ostream &  out,
bool  withRunningTimer 
) const
private

Referenced by getStateInfo().

212 {
213  bool first = true;
214  for (const auto & elem : sources) {
215  bool timerIsRunning = elem.second->sourceTimer && elem.second->sourceTimer->isScheduled();
216  if (withRunningTimer == timerIsRunning) {
217  if (!first)
218  out << ",";
219  first = false;
220  out << elem.first;
221  }
222  }
223 }
SourceToSourceRecordMap sources
Definition: IGMPv3.h:131

Member Data Documentation

RouterGroupState inet::IGMPv3::RouterGroupData::state

The documentation for this struct was generated from the following files: