INET Framework for OMNeT++/OMNEST
inet::PIMDM::DownstreamInterface Struct Reference
Inheritance diagram for inet::PIMDM::DownstreamInterface:
inet::PIMBase::Interface

Public Types

enum  Flags { HAS_CONNECTED_RECEIVERS = 0x01 }
 
enum  PruneState { NO_INFO, PRUNE_PENDING, PRUNED }
 
- Public Types inherited from inet::PIMBase::Interface
enum  AssertState { NO_ASSERT_INFO, I_LOST_ASSERT, I_WON_ASSERT }
 

Public Member Functions

 DownstreamInterface (Route *owner, InterfaceEntry *ie)
 
 ~DownstreamInterface ()
 
Routeroute () const
 
PIMDMpimdm () const
 
bool hasConnectedReceivers () const
 
void setHasConnectedReceivers (bool value)
 
bool isInOlist () const
 
void startPruneTimer (double holdTime)
 The method is used to create PIMPrune timer. More...
 
void stopPruneTimer ()
 
void startPrunePendingTimer (double overrideInterval)
 
void stopPrunePendingTimer ()
 
- Public Member Functions inherited from inet::PIMBase::Interface
 Interface (RouteEntry *owner, InterfaceEntry *ie)
 
virtual ~Interface ()
 
bool isFlagSet (int flag) const
 
void setFlags (int flags)
 
void clearFlag (int flag)
 
void setFlag (int flag, bool value)
 
void startAssertTimer (double assertTime)
 
void deleteAssertInfo ()
 

Public Attributes

PruneState pruneState
 
cMessage * pruneTimer
 
cMessage * prunePendingTimer
 
- Public Attributes inherited from inet::PIMBase::Interface
RouteEntryowner
 
InterfaceEntryie
 
int flags
 
AssertState assertState
 
cMessage * assertTimer
 
AssertMetric winnerMetric
 

Member Enumeration Documentation

Enumerator
HAS_CONNECTED_RECEIVERS 
Enumerator
NO_INFO 
PRUNE_PENDING 
PRUNED 
102  {
103  NO_INFO, // no prune info, neither pruneTimer or prunePendingTimer is running
104  PRUNE_PENDING, // received a prune from a downstream neighbor, waiting for an override
105  PRUNED // received a prune from a downstream neighbor and it was not overridden
106  };

Constructor & Destructor Documentation

inet::PIMDM::DownstreamInterface::DownstreamInterface ( Route owner,
InterfaceEntry ie 
)
inline
114  : Interface(owner, ie),
115  pruneState(NO_INFO), pruneTimer(nullptr), prunePendingTimer(nullptr)
116  { ASSERT(owner), ASSERT(ie); }
Interface(RouteEntry *owner, InterfaceEntry *ie)
Definition: PIMBase.h:92
PruneState pruneState
Definition: PIMDM.h:109
cMessage * prunePendingTimer
Definition: PIMDM.h:111
RouteEntry * owner
Definition: PIMBase.h:82
cMessage * pruneTimer
Definition: PIMDM.h:110
InterfaceEntry * ie
Definition: PIMBase.h:83
inet::PIMDM::DownstreamInterface::~DownstreamInterface ( )
1830 {
1831  owner->owner->cancelAndDelete(pruneTimer);
1832  owner->owner->cancelAndDelete(prunePendingTimer);
1833 }
cMessage * prunePendingTimer
Definition: PIMDM.h:111
RouteEntry * owner
Definition: PIMBase.h:82
cMessage * pruneTimer
Definition: PIMDM.h:110
PIMBase * owner
Definition: PIMBase.h:64

Member Function Documentation

bool inet::PIMDM::DownstreamInterface::hasConnectedReceivers ( ) const
inline
bool isFlagSet(int flag) const
Definition: PIMBase.h:98
bool inet::PIMDM::DownstreamInterface::isInOlist ( ) const

Referenced by inet::PIMDM::PIMDMOutInterface::isEnabled(), inet::PIMDM::multicastReceiverAdded(), inet::PIMDM::multicastReceiverRemoved(), and inet::PIMDM::processGraft().

1903 {
1904  // TODO check boundary
1905  bool hasNeighbors = pimdm()->pimNbt->getNumNeighbors(ie->getInterfaceId()) > 0;
1906  return ((hasNeighbors && pruneState != PRUNED) || hasConnectedReceivers()) && assertState != I_LOST_ASSERT;
1907 }
bool hasConnectedReceivers() const
Definition: PIMDM.h:120
PIMNeighborTable * pimNbt
Definition: PIMBase.h:161
int getInterfaceId() const
Definition: InterfaceEntry.h:185
PruneState pruneState
Definition: PIMDM.h:109
PIMDM * pimdm() const
Definition: PIMDM.h:119
virtual int getNumNeighbors(int interfaceId)
Returns the number of neighbors on the given interface.
Definition: PIMNeighborTable.cc:176
InterfaceEntry * ie
Definition: PIMBase.h:83
AssertState assertState
Definition: PIMBase.h:88
PIMDM* inet::PIMDM::DownstreamInterface::pimdm ( ) const
inline
119 { return check_and_cast<PIMDM *>(owner->owner); }
RouteEntry * owner
Definition: PIMBase.h:82
PIMBase * owner
Definition: PIMBase.h:64
PIMDM()
Definition: PIMDM.h:185
Route* inet::PIMDM::DownstreamInterface::route ( ) const
inline

Referenced by inet::PIMDM::processPrunePendingTimer(), and inet::PIMDM::processPruneTimer().

118 { return check_and_cast<Route *>(owner); }
RouteEntry * owner
Definition: PIMBase.h:82
void inet::PIMDM::DownstreamInterface::setHasConnectedReceivers ( bool  value)
inline
void inet::PIMDM::DownstreamInterface::startPrunePendingTimer ( double  overrideInterval)

Referenced by inet::PIMDM::processPrune().

1859 {
1860  ASSERT(!prunePendingTimer);
1861  cMessage *timer = new cMessage("PimPrunePendingTimer", PrunePendingTimer);
1862  timer->setContextPointer(this);
1863  owner->owner->scheduleAt(simTime() + overrideInterval, timer);
1864  prunePendingTimer = timer;
1865 }
double overrideInterval
Definition: PIMDM.h:162
cMessage * prunePendingTimer
Definition: PIMDM.h:111
RouteEntry * owner
Definition: PIMBase.h:82
PIMBase * owner
Definition: PIMBase.h:64
Definition: PIMBase.h:139
void inet::PIMDM::DownstreamInterface::startPruneTimer ( double  holdTime)

The method is used to create PIMPrune timer.

The timer is set when outgoing interface goes to pruned state. After expiration (usually 3min) interface goes back to forwarding state. It is set to (S,G,I).

Referenced by inet::PIMDM::multicastPacketArrivedOnNonRpfInterface(), and inet::PIMDM::processPrunePendingTimer().

1841 {
1842  cMessage *timer = new cMessage("PimPruneTimer", PruneTimer);
1843  timer->setContextPointer(this);
1844  owner->owner->scheduleAt(simTime() + holdTime, timer);
1845  pruneTimer = timer;
1846 }
Definition: PIMBase.h:138
RouteEntry * owner
Definition: PIMBase.h:82
cMessage * pruneTimer
Definition: PIMDM.h:110
double holdTime
Definition: PIMBase.h:169
PIMBase * owner
Definition: PIMBase.h:64
void inet::PIMDM::DownstreamInterface::stopPrunePendingTimer ( )

Referenced by inet::PIMDM::processGraft(), and inet::PIMDM::processJoin().

1868 {
1869  if (prunePendingTimer) {
1870  if (prunePendingTimer->isScheduled())
1871  owner->owner->cancelEvent(prunePendingTimer);
1872  delete prunePendingTimer;
1873  prunePendingTimer = nullptr;
1874  }
1875 }
cMessage * prunePendingTimer
Definition: PIMDM.h:111
RouteEntry * owner
Definition: PIMBase.h:82
PIMBase * owner
Definition: PIMBase.h:64
void inet::PIMDM::DownstreamInterface::stopPruneTimer ( )

Referenced by inet::PIMDM::processGraft(), inet::PIMDM::processJoin(), and inet::PIMDM::processPruneTimer().

1849 {
1850  if (pruneTimer) {
1851  if (pruneTimer->isScheduled())
1852  owner->owner->cancelEvent(pruneTimer);
1853  delete pruneTimer;
1854  pruneTimer = nullptr;
1855  }
1856 }
RouteEntry * owner
Definition: PIMBase.h:82
cMessage * pruneTimer
Definition: PIMDM.h:110
PIMBase * owner
Definition: PIMBase.h:64

Member Data Documentation

cMessage* inet::PIMDM::DownstreamInterface::prunePendingTimer

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