INET Framework for OMNeT++/OMNEST
inet::PimSm::DownstreamInterface Struct Reference
Inheritance diagram for inet::PimSm::DownstreamInterface:
inet::PimSm::PimsmInterface

Public Types

enum  JoinPruneState { NO_INFO, JOIN, PRUNE_PENDING }
 States of each outgoing interface. More...
 
- Public Types inherited from inet::PimSm::PimsmInterface
enum  Flags { RECEIVER_INCLUDE = 1 << 0, RECEIVER_EXCLUDE = 1 << 1, COULD_ASSERT = 1 << 2, ASSERT_TRACKING_DESIRED = 1 << 3 }
 

Public Member Functions

 DownstreamInterface (Route *owner, NetworkInterface *ie, JoinPruneState joinPruneState, bool show=true)
 
virtual ~DownstreamInterface ()
 
int getInterfaceId () const
 
bool isInImmediateOlist () const
 
bool isInInheritedOlist () const
 
void startPrunePendingTimer (double joinPruneOverrideInterval)
 
- Public Member Functions inherited from inet::PimSm::PimsmInterface
 PimsmInterface (Route *owner, NetworkInterface *ie)
 
virtual ~PimsmInterface ()
 
Routeroute () const
 
PimSmpimsm () const
 
void startExpiryTimer (double holdTime)
 
bool localReceiverInclude () const
 
void setLocalReceiverInclude (bool value)
 
bool localReceiverExclude () const
 
void setLocalReceiverExclude (bool value)
 
bool couldAssert () const
 
void setCouldAssert (bool value)
 
bool assertTrackingDesired () const
 
void setAssertTrackingDesired (bool value)
 
bool pimInclude () const
 
bool pimExclude () const
 

Public Attributes

JoinPruneState joinPruneState
 
cMessage * prunePendingTimer
 
- Public Attributes inherited from inet::PimSm::PimsmInterface
cMessage * expiryTimer
 

Member Enumeration Documentation

◆ JoinPruneState

States of each outgoing interface.

Enumerator
NO_INFO 
JOIN 
PRUNE_PENDING 

Constructor & Destructor Documentation

◆ DownstreamInterface()

inet::PimSm::DownstreamInterface::DownstreamInterface ( Route owner,
NetworkInterface ie,
JoinPruneState  joinPruneState,
bool  show = true 
)
inline

◆ ~DownstreamInterface()

inet::PimSm::DownstreamInterface::~DownstreamInterface ( )
virtual
2047 {
2048  pimsm()->cancelAndDelete(prunePendingTimer);
2049 }

Member Function Documentation

◆ getInterfaceId()

int inet::PimSm::DownstreamInterface::getInterfaceId ( ) const
inline

◆ isInImmediateOlist()

bool inet::PimSm::DownstreamInterface::isInImmediateOlist ( ) const
2052 {
2053  // immediate_olist(*,*,RP) = joins(*,*,RP)
2054  // immediate_olist(*,G) = joins(*,G) (+) pim_include(*,G) (-) lost_assert(*,G)
2055  // immediate_olist(S,G) = joins(S,G) (+) pim_include(S,G) (-) lost_assert(S,G)
2056  switch (route()->type) {
2057  case RP:
2058  return joinPruneState != NO_INFO;
2059 
2060  case G:
2061  return assertState != I_LOST_ASSERT && (joinPruneState != NO_INFO || pimInclude());
2062 
2063  case SG:
2064  return assertState != I_LOST_ASSERT && (joinPruneState != NO_INFO || pimInclude());
2065 
2066  case SGrpt:
2067  ASSERT(false);
2068  break;
2069  }
2070  return false;
2071 }

◆ isInInheritedOlist()

bool inet::PimSm::DownstreamInterface::isInInheritedOlist ( ) const
2074 {
2075  // inherited_olist(S,G,rpt) = ( joins(*,*,RP(G)) (+) joins(*,G) (-) prunes(S,G,rpt) )
2076  // (+) ( pim_include(*,G) (-) pim_exclude(S,G))
2077  // (-) ( lost_assert(*,G) (+) lost_assert(S,G,rpt) )
2078  // inherited_olist(S,G) = inherited_olist(S,G,rpt) (+)
2079  // joins(S,G) (+) pim_include(S,G) (-) lost_assert(S,G)
2080  Route *route = this->route();
2081  int interfaceId = ie->getInterfaceId();
2082  bool include = false;
2083 
2084  switch (route->type) {
2085  case RP:
2086  // joins(*,*,RP(G))
2087  include |= joinPruneState != NO_INFO;
2088  break;
2089 
2090  case G: // inherited_olist(S,G,rpt) when there is not (S,G,rpt) state
2091  // joins(*,*,RP(G))
2092  if (route->rpRoute) {
2094  include |= downstream && downstream->joinPruneState != NO_INFO;
2095  }
2096  include |= joinPruneState != NO_INFO;
2097  include |= pimInclude();
2098  include &= assertState != I_LOST_ASSERT;
2099  break;
2100 
2101  case SGrpt:
2102  // joins(*,*,RP(G)
2103  if (route->rpRoute) {
2105  include |= downstream && downstream->joinPruneState != NO_INFO;
2106  }
2107  // (+) joins(*,G)
2108  if (route->gRoute) {
2110  include |= downstream && downstream->joinPruneState != NO_INFO;
2111  }
2112 
2113  // TODO (-) prunes(S,G,prt)
2114 
2115  if (route->gRoute) {
2117  // (+) ( pim_include(*,G) (-) pim_exclude(S,G))
2118  include |= (downstream && downstream->pimInclude()) && !pimExclude();
2119  // (-) lost_assert(*,G)
2120  include &= !downstream || downstream->assertState != I_LOST_ASSERT;
2121  }
2122 
2123  // (-) lost_assert(S,G)
2124  include &= assertState != I_LOST_ASSERT;
2125  break;
2126 
2127  case SG:
2128  // inherited_olist(S,G,rpt)
2129  if (route->sgrptRoute) {
2131  include |= downstream && downstream->isInInheritedOlist();
2132  }
2133  else if (route->gRoute) {
2135  include |= downstream && downstream->isInInheritedOlist();
2136  }
2137  // (+) joins(S,G)
2138  include |= joinPruneState != NO_INFO;
2139  // (+) pim_include(S,G)
2140  include |= pimInclude();
2141  // (-) lost_assert(S,G)
2142  include &= assertState != I_LOST_ASSERT;
2143  break;
2144  }
2145  return include;
2146 }

Referenced by inet::PimSm::PimSmOutInterface::isEnabled(), isInInheritedOlist(), and inet::PimSm::processRegisterPacket().

◆ startPrunePendingTimer()

void inet::PimSm::DownstreamInterface::startPrunePendingTimer ( double  joinPruneOverrideInterval)
2149 {
2150  ASSERT(!prunePendingTimer);
2151  prunePendingTimer = new cMessage("PIMPrunePendingTimer", PrunePendingTimer);
2152  prunePendingTimer->setContextPointer(this);
2154 }

Referenced by inet::PimSm::processPruneG(), and inet::PimSm::processPruneSG().

Member Data Documentation

◆ joinPruneState

◆ prunePendingTimer

cMessage* inet::PimSm::DownstreamInterface::prunePendingTimer

The documentation for this struct was generated from the following files:
inet::PimSm::PimsmInterface::pimsm
PimSm * pimsm() const
Definition: PimSm.h:58
inet::PimSm::PimsmInterface::pimInclude
bool pimInclude() const
Definition: PimSm.h:70
inet::PimSm::PimsmInterface::pimExclude
bool pimExclude() const
Definition: PimSm.h:76
inet::PimSm::DownstreamInterface::PRUNE_PENDING
@ PRUNE_PENDING
Definition: PimSm.h:95
inet::PimSm::Route::gRoute
Route * gRoute
Definition: PimSm.h:143
inet::PimSm::joinPruneOverrideInterval
double joinPruneOverrideInterval()
Definition: PimSm.h:280
inet::PimSm::DownstreamInterface::joinPruneState
JoinPruneState joinPruneState
Definition: PimSm.h:97
inet::PimBase::PrunePendingTimer
@ PrunePendingTimer
Definition: PimBase.h:127
inet::PimSm::RP
@ RP
Definition: PimSm.h:122
inet::PimSm::DownstreamInterface::JOIN
@ JOIN
Definition: PimSm.h:95
inet::PimSm::DownstreamInterface::NO_INFO
@ NO_INFO
Definition: PimSm.h:95
inet::PimSm::DownstreamInterface::prunePendingTimer
cMessage * prunePendingTimer
Definition: PimSm.h:98
inet::PimSm::SGrpt
@ SGrpt
Definition: PimSm.h:125
type
removed type
Definition: IUdp-gates.txt:7
inet::PimSm::Route::rpRoute
Route * rpRoute
Definition: PimSm.h:142
inet::PimSm::Route::type
RouteType type
Definition: PimSm.h:138
inet::PimSm::PimsmInterface::PimsmInterface
PimsmInterface(Route *owner, NetworkInterface *ie)
Definition: PimSm.cc:2028
inet::PimSm::DownstreamInterface::DownstreamInterface
DownstreamInterface(Route *owner, NetworkInterface *ie, JoinPruneState joinPruneState, bool show=true)
Definition: PimSm.h:100
inet::PimSm::Route::sgrptRoute
Route * sgrptRoute
Definition: PimSm.h:144
inet::PimSm::SG
@ SG
Definition: PimSm.h:124
inet::PimSm::DownstreamInterface::isInInheritedOlist
bool isInInheritedOlist() const
Definition: PimSm.cc:2073
inet::PimSm::PimsmInterface::route
Route * route() const
Definition: PimSm.h:57
inet::PimSm::Route::findDownstreamInterfaceByInterfaceId
DownstreamInterface * findDownstreamInterfaceByInterfaceId(int interfaceId)
Definition: PimSm.cc:1951
inet::PimSm::G
@ G
Definition: PimSm.h:123