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

Public Types

enum  Flags {
  PRUNED = 0x01, REGISTER = 0x02, SPT_BIT = 0x04, JOIN_DESIRED = 0x08,
  SOURCE_DIRECTLY_CONNECTED = 0x10
}
 
enum  RegisterState { RS_NO_INFO, RS_JOIN, RS_PRUNE, RS_JOIN_PENDING }
 

Public Member Functions

 Route (PimSm *owner, RouteType type, Ipv4Address origin, Ipv4Address group)
 
virtual ~Route ()
 
PimSmpimsm () const
 
void addDownstreamInterface (DownstreamInterface *outInterface)
 
void removeDownstreamInterface (unsigned int i)
 
DownstreamInterfacefindDownstreamInterfaceByInterfaceId (int interfaceId)
 
DownstreamInterfacegetDownstreamInterfaceByInterfaceId (int interfaceId)
 
int findDownstreamInterface (NetworkInterface *ie)
 
bool isImmediateOlistNull ()
 
bool isInheritedOlistNull ()
 
bool joinDesired () const
 
bool isSourceDirectlyConnected () const
 
void startKeepAliveTimer (double keepAlivePeriod)
 
void startRegisterStopTimer (double interval)
 
void startJoinTimer (double joinPrunePeriod)
 

Public Attributes

RouteType type
 
Ipv4Address rpAddr
 
RouterpRoute
 
RoutegRoute
 
RoutesgrptRoute
 
unsigned int sequencenumber
 
simtime_t installtime
 
cMessage * keepAliveTimer
 
cMessage * joinTimer
 
RegisterState registerState
 
cMessage * registerStopTimer
 
UpstreamInterfaceupstreamInterface
 
DownstreamInterfaceVector downstreamInterfaces
 Out interfaces (downstream) More...
 

Member Enumeration Documentation

◆ Flags

Enumerator
PRUNED 
REGISTER 
SPT_BIT 
JOIN_DESIRED 
SOURCE_DIRECTLY_CONNECTED 
130  {
131  PRUNED = 0x01, // UpstreamJPState
132  REGISTER = 0x02, // Register flag
133  SPT_BIT = 0x04, // used to distinguish whether to forward on (*,*,RP)/(*,G) or on (S,G) state
134  JOIN_DESIRED = 0x08,
136  };

◆ RegisterState

Enumerator
RS_NO_INFO 
RS_JOIN 
RS_PRUNE 
RS_JOIN_PENDING 

Constructor & Destructor Documentation

◆ Route()

inet::PimSm::Route::Route ( PimSm owner,
RouteType  type,
Ipv4Address  origin,
Ipv4Address  group 
)
1912  : RouteEntry(owner, origin, group), type(type), rpAddr(Ipv4Address::UNSPECIFIED_ADDRESS),
1913  rpRoute(nullptr), gRoute(nullptr), sgrptRoute(nullptr),
1915  upstreamInterface(nullptr)
1916 {
1917 }

◆ ~Route()

inet::PimSm::Route::~Route ( )
virtual
1920 {
1921  owner->cancelAndDelete(keepAliveTimer);
1922  owner->cancelAndDelete(registerStopTimer);
1923  owner->cancelAndDelete(joinTimer);
1924  delete upstreamInterface;
1925  for (auto& elem : downstreamInterfaces)
1926  delete elem;
1927 }

Member Function Documentation

◆ addDownstreamInterface()

void inet::PimSm::Route::addDownstreamInterface ( DownstreamInterface outInterface)
1998 {
1999  ASSERT(outInterface);
2000 
2001  auto it = downstreamInterfaces.begin();
2002  for (; it != downstreamInterfaces.end(); ++it) {
2003  if ((*it)->ie == outInterface->ie)
2004  break;
2005  }
2006 
2007  if (it != downstreamInterfaces.end()) {
2008  delete *it;
2009  *it = outInterface;
2010  }
2011  else {
2012  downstreamInterfaces.push_back(outInterface);
2013  }
2014 }

Referenced by inet::PimSm::addNewRouteG(), and inet::PimSm::addNewRouteSG().

◆ findDownstreamInterface()

int inet::PimSm::Route::findDownstreamInterface ( NetworkInterface ie)
1970 {
1971  for (unsigned int i = 0; i < downstreamInterfaces.size(); i++) {
1972  DownstreamInterface *downstream = downstreamInterfaces[i];
1973  if (downstream->ie == ie)
1974  return i;
1975  }
1976  return -1;
1977 }

◆ findDownstreamInterfaceByInterfaceId()

PimSm::DownstreamInterface * inet::PimSm::Route::findDownstreamInterfaceByInterfaceId ( int  interfaceId)
1952 {
1953  for (auto& elem : downstreamInterfaces) {
1954  DownstreamInterface *downstream = elem;
1955  if (downstream->getInterfaceId() == interfaceId)
1956  return downstream;
1957  }
1958  return nullptr;
1959 }

Referenced by inet::PimSm::DownstreamInterface::isInInheritedOlist(), inet::PimSm::multicastPacketArrivedOnNonRpfInterface(), inet::PimSm::processJoinG(), inet::PimSm::processJoinSG(), inet::PimSm::processPruneG(), and inet::PimSm::processPruneSG().

◆ getDownstreamInterfaceByInterfaceId()

PimSm::DownstreamInterface * inet::PimSm::Route::getDownstreamInterfaceByInterfaceId ( int  interfaceId)
1962 {
1963  DownstreamInterface *downstream = findDownstreamInterfaceByInterfaceId(interfaceId);
1964  if (!downstream)
1965  throw cRuntimeError("getDownstreamInterfaceByInterfaceId(): interface %d not found", interfaceId);
1966  return downstream;
1967 }

Referenced by inet::PimSm::multicastReceiverAdded(), inet::PimSm::multicastReceiverRemoved(), and inet::PimSm::processAssertPacket().

◆ isImmediateOlistNull()

bool inet::PimSm::Route::isImmediateOlistNull ( )
1980 {
1981  for (auto& elem : downstreamInterfaces)
1982  if (elem->isInImmediateOlist())
1983  return false;
1984 
1985  return true;
1986 }

Referenced by inet::PimSm::updateJoinDesired().

◆ isInheritedOlistNull()

bool inet::PimSm::Route::isInheritedOlistNull ( )
1989 {
1990  for (auto& elem : downstreamInterfaces)
1991  if (elem->isInInheritedOlist())
1992  return false;
1993 
1994  return true;
1995 }

Referenced by inet::PimSm::multicastPacketArrivedOnRpfInterface(), inet::PimSm::processJoinTimer(), inet::PimSm::processRegisterPacket(), and inet::PimSm::updateJoinDesired().

◆ isSourceDirectlyConnected()

bool inet::PimSm::Route::isSourceDirectlyConnected ( ) const
inline
178 { return isFlagSet(SOURCE_DIRECTLY_CONNECTED); }

Referenced by inet::PimSm::joinDesiredChanged().

◆ joinDesired()

bool inet::PimSm::Route::joinDesired ( ) const
inline
177 { return isFlagSet(JOIN_DESIRED); }

Referenced by inet::PimSm::joinDesiredChanged(), and inet::PimSm::updateJoinDesired().

◆ pimsm()

PimSm* inet::PimSm::Route::pimsm ( ) const
inline
166 { return check_and_cast<PimSm *>(owner); }

◆ removeDownstreamInterface()

void inet::PimSm::Route::removeDownstreamInterface ( unsigned int  i)
2017 {
2018  // remove corresponding out interface from the Ipv4 route,
2019  // because it refers to the downstream interface to be deleted
2020  Ipv4MulticastRoute *ipv4Route = pimsm()->findIpv4Route(source, group);
2021  ipv4Route->removeOutInterface(i);
2022 
2023  DownstreamInterface *outInterface = downstreamInterfaces[i];
2024  downstreamInterfaces.erase(downstreamInterfaces.begin() + i);
2025  delete outInterface;
2026 }

◆ startJoinTimer()

void inet::PimSm::Route::startJoinTimer ( double  joinPrunePeriod)
1945 {
1946  joinTimer = new cMessage("PIMJoinTimer", JoinTimer);
1947  joinTimer->setContextPointer(this);
1948  owner->scheduleAfter(joinPrunePeriod, joinTimer);
1949 }

Referenced by inet::PimSm::joinDesiredChanged().

◆ startKeepAliveTimer()

void inet::PimSm::Route::startKeepAliveTimer ( double  keepAlivePeriod)
1930 {
1931  ASSERT(this->type == SG);
1932  keepAliveTimer = new cMessage("PIMKeepAliveTimer", KeepAliveTimer);
1933  keepAliveTimer->setContextPointer(this);
1934  owner->scheduleAfter(keepAlivePeriod, keepAliveTimer);
1935 }

Referenced by inet::PimSm::multicastPacketArrivedOnRpfInterface(), inet::PimSm::processJoinSG(), inet::PimSm::processRegisterPacket(), and inet::PimSm::unroutableMulticastPacketArrived().

◆ startRegisterStopTimer()

void inet::PimSm::Route::startRegisterStopTimer ( double  interval)
1938 {
1939  registerStopTimer = new cMessage("PIMRegisterStopTimer", RegisterStopTimer);
1940  registerStopTimer->setContextPointer(this);
1941  owner->scheduleAfter(interval, registerStopTimer);
1942 }

Referenced by inet::PimSm::processRegisterStopPacket(), and inet::PimSm::processRegisterStopTimer().

Member Data Documentation

◆ downstreamInterfaces

DownstreamInterfaceVector inet::PimSm::Route::downstreamInterfaces

◆ gRoute

◆ installtime

simtime_t inet::PimSm::Route::installtime

◆ joinTimer

cMessage* inet::PimSm::Route::joinTimer

◆ keepAliveTimer

◆ registerState

◆ registerStopTimer

cMessage* inet::PimSm::Route::registerStopTimer

◆ rpAddr

◆ rpRoute

Route* inet::PimSm::Route::rpRoute

◆ sequencenumber

unsigned int inet::PimSm::Route::sequencenumber

◆ sgrptRoute

◆ type

◆ upstreamInterface


The documentation for this struct was generated from the following files:
inet::PimSm::Route::downstreamInterfaces
DownstreamInterfaceVector downstreamInterfaces
Out interfaces (downstream)
Definition: PimSm.h:161
inet::PimBase::JoinTimer
@ JoinTimer
Definition: PimBase.h:140
inet::PimSm::Route::RS_JOIN
@ RS_JOIN
Definition: PimSm.h:155
inet::PimSm::Route::sequencenumber
unsigned int sequencenumber
Definition: PimSm.h:147
inet::PimSm::Route::gRoute
Route * gRoute
Definition: PimSm.h:143
inet::PimSm::Route::REGISTER
@ REGISTER
Definition: PimSm.h:132
inet::PimBase::KeepAliveTimer
@ KeepAliveTimer
Definition: PimBase.h:137
inet::PimSm::Route::registerState
RegisterState registerState
Definition: PimSm.h:156
inet::PimSm::Route::SOURCE_DIRECTLY_CONNECTED
@ SOURCE_DIRECTLY_CONNECTED
Definition: PimSm.h:135
inet::PimSm::Route::pimsm
PimSm * pimsm() const
Definition: PimSm.h:166
inet::PimSm::Route::rpAddr
Ipv4Address rpAddr
Definition: PimSm.h:139
inet::PimSm::Route::SPT_BIT
@ SPT_BIT
Definition: PimSm.h:133
inet::PimSm::joinPrunePeriod
double joinPrunePeriod
Definition: PimSm.h:191
inet::PimSm::Route::RS_NO_INFO
@ RS_NO_INFO
Definition: PimSm.h:155
inet::PimSm::Route::registerStopTimer
cMessage * registerStopTimer
Definition: PimSm.h:157
inet::PimSm::Route::PRUNED
@ PRUNED
Definition: PimSm.h:131
inet::Ipv4MulticastRoute::removeOutInterface
virtual bool removeOutInterface(const NetworkInterface *ie) override
Definition: Ipv4Route.cc:212
inet::PimSm::Route::upstreamInterface
UpstreamInterface * upstreamInterface
Definition: PimSm.h:160
inet::PimSm::Route::rpRoute
Route * rpRoute
Definition: PimSm.h:142
inet::PimSm::findIpv4Route
Ipv4MulticastRoute * findIpv4Route(Ipv4Address source, Ipv4Address group)
Definition: PimSm.cc:1889
inet::PimSm::Route::type
RouteType type
Definition: PimSm.h:138
inet::Ipv4Address::UNSPECIFIED_ADDRESS
static const Ipv4Address UNSPECIFIED_ADDRESS
0.0.0.0
Definition: Ipv4Address.h:91
inet::PimSm::Route::sgrptRoute
Route * sgrptRoute
Definition: PimSm.h:144
inet::PimSm::Route::keepAliveTimer
cMessage * keepAliveTimer
Definition: PimSm.h:151
inet::PimSm::Route::RS_JOIN_PENDING
@ RS_JOIN_PENDING
Definition: PimSm.h:155
inet::PimBase::RegisterStopTimer
@ RegisterStopTimer
Definition: PimBase.h:138
inet::PimSm::SG
@ SG
Definition: PimSm.h:124
inet::PimSm::Route::RS_PRUNE
@ RS_PRUNE
Definition: PimSm.h:155
inet::PimSm::Route::findDownstreamInterfaceByInterfaceId
DownstreamInterface * findDownstreamInterfaceByInterfaceId(int interfaceId)
Definition: PimSm.cc:1951
inet::PimSm::keepAlivePeriod
double keepAlivePeriod
Definition: PimSm.h:194
inet::PimSm::Route::JOIN_DESIRED
@ JOIN_DESIRED
Definition: PimSm.h:134
inet::PimSm::Route::joinTimer
cMessage * joinTimer
Definition: PimSm.h:152