INET Framework for OMNeT++/OMNEST
inet::Ted Class Reference

Contains the Traffic Engineering Database and provides public methods to access it from MPLS signalling protocols (LDP, RSVP-TE). More...

#include <Ted.h>

Inheritance diagram for inet::Ted:
inet::RoutingProtocolBase inet::OperationalBase inet::OperationalMixin< cSimpleModule > inet::ILifecycle

Classes

struct  edge_t
 Only used internally, during shortest path calculation: edge in the graph we build from links in TeLinkStateInfoVector. More...
 
struct  vertex_t
 Only used internally, during shortest path calculation: vertex in the graph we build from links in TeLinkStateInfoVector. More...
 

Public Member Functions

 Ted ()
 
virtual ~Ted ()
 
- Public Member Functions inherited from inet::RoutingProtocolBase
 RoutingProtocolBase ()
 
- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 

Public Attributes

TeLinkStateInfoVector ted
 The link state database. More...
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual int numInitStages () const override
 
virtual void handleMessageWhenUp (cMessage *msg) override
 
virtual void initializeTED ()
 
virtual Ipv4AddressVector calculateShortestPath (Ipv4AddressVector dest, const TeLinkStateInfoVector &topology, double req_bandwidth, int priority)
 
- Protected Member Functions inherited from inet::RoutingProtocolBase
virtual bool isInitializeStage (int stage) const override
 
virtual bool isModuleStartStage (int stage) const override
 
virtual bool isModuleStopStage (int stage) const override
 
- Protected Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void handleMessageWhenDown (cMessage *msg)
 
virtual bool handleOperationStage (LifecycleOperation *operation, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual State getInitialOperationalState () const
 Returns initial operational state: OPERATING or NOT_OPERATING. More...
 
virtual void handleActiveOperationTimeout (cMessage *message)
 
virtual bool isUp () const
 utility functions More...
 
virtual bool isDown () const
 
virtual void setOperationalState (State newState)
 
virtual void scheduleOperationTimeout (simtime_t timeout)
 
virtual void setupActiveOperation (LifecycleOperation *operation, IDoneCallback *doneCallback, State)
 
virtual void delayActiveOperationFinish (simtime_t timeout)
 
virtual void startActiveOperationExtraTime (simtime_t delay=SIMTIME_ZERO)
 
virtual void startActiveOperationExtraTimeOrFinish (simtime_t extraTime)
 
virtual void finishActiveOperation ()
 

Public interface to the Traffic Engineering Database

ModuleRefByPar< IIpv4RoutingTablert
 
ModuleRefByPar< IInterfaceTableift
 
Ipv4Address routerId
 
Ipv4AddressVector interfaceAddrs
 
int maxMessageId = 0
 
virtual Ipv4Address getInterfaceAddrByPeerAddress (Ipv4Address peerIP)
 
virtual Ipv4Address peerRemoteInterface (Ipv4Address peerIP)
 
virtual Ipv4Address getPeerByLocalAddress (Ipv4Address localInf)
 
virtual Ipv4Address primaryAddress (Ipv4Address localInf)
 
virtual bool isLocalPeer (Ipv4Address inetAddr)
 
virtual bool isLocalAddress (Ipv4Address addr)
 
virtual unsigned int linkIndex (Ipv4Address localInf)
 
virtual unsigned int linkIndex (Ipv4Address advrouter, Ipv4Address linkid)
 
virtual Ipv4AddressVector getLocalAddress ()
 
virtual void rebuildRoutingTable ()
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
virtual bool checkLinkValidity (TeLinkStateInfo link, TeLinkStateInfo *&match)
 
virtual void updateTimestamp (TeLinkStateInfo *link)
 
virtual int assignIndex (std::vector< vertex_t > &vertices, Ipv4Address nodeAddr)
 
std::vector< vertex_tcalculateShortestPaths (const TeLinkStateInfoVector &topology, double req_bandwidth, int priority)
 

Additional Inherited Members

- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 
- Protected Attributes inherited from inet::OperationalMixin< cSimpleModule >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 

Detailed Description

Contains the Traffic Engineering Database and provides public methods to access it from MPLS signalling protocols (LDP, RSVP-TE).

See NED file for more info.

Constructor & Destructor Documentation

◆ Ted()

inet::Ted::Ted ( )
28 {
29 }

◆ ~Ted()

inet::Ted::~Ted ( )
virtual
32 {
33 }

Member Function Documentation

◆ assignIndex()

int inet::Ted::assignIndex ( std::vector< vertex_t > &  vertices,
Ipv4Address  nodeAddr 
)
protectedvirtual
159 {
160  // find node in vertices[] whose Ipv4 address is nodeAddr
161  for (unsigned int i = 0; i < vertices.size(); i++)
162  if (vertices[i].node == nodeAddr)
163  return i;
164 
165  // if not found, create
166  vertex_t newVertex;
167  newVertex.node = nodeAddr;
168  newVertex.dist = LS_INFINITY;
169  newVertex.parent = -1;
170 
171  vertices.push_back(newVertex);
172  return vertices.size() - 1;
173 }

Referenced by calculateShortestPaths().

◆ calculateShortestPath()

Ipv4AddressVector inet::Ted::calculateShortestPath ( Ipv4AddressVector  dest,
const TeLinkStateInfoVector topology,
double  req_bandwidth,
int  priority 
)
protectedvirtual
177 {
178  // FIXME comment: what do we do here?
179  std::vector<vertex_t> V = calculateShortestPaths(topology, req_bandwidth, priority);
180 
181  double minDist = LS_INFINITY;
182  int minIndex = -1;
183 
184  // FIXME comment: what do we do in this block?
185  for (unsigned int i = 0; i < V.size(); i++) {
186  if (V[i].dist >= minDist)
187  continue;
188 
189  if (!contains(dest, V[i].node))
190  continue;
191 
192  minDist = V[i].dist;
193  minIndex = i;
194  }
195 
196  Ipv4AddressVector result;
197 
198  if (minIndex < 0)
199  return result;
200 
201  result.push_back(V[minIndex].node);
202  while (V[minIndex].parent != -1) {
203  minIndex = V[minIndex].parent;
204  result.insert(result.begin(), V[minIndex].node);
205  }
206 
207  return result;
208 }

◆ calculateShortestPaths()

std::vector< Ted::vertex_t > inet::Ted::calculateShortestPaths ( const TeLinkStateInfoVector topology,
double  req_bandwidth,
int  priority 
)
protected
325 {
326  std::vector<vertex_t> vertices;
327  std::vector<edge_t> edges;
328 
329  // select edges that have enough bandwidth left, and store them into edges[].
330  // meanwhile, collect vertices in vectices[].
331  for (auto& elem : topology) {
332  if (!elem.state)
333  continue;
334 
335  if (elem.UnResvBandwidth[priority] < req_bandwidth)
336  continue;
337 
338  edge_t edge;
339  edge.src = assignIndex(vertices, elem.advrouter);
340  edge.dest = assignIndex(vertices, elem.linkid);
341  edge.metric = elem.metric;
342  edges.push_back(edge);
343  }
344 
345  Ipv4Address srcAddr = routerId;
346 
347  int srcIndex = assignIndex(vertices, srcAddr);
348  vertices[srcIndex].dist = 0.0;
349 
350  // FIXME comment: Dijkstra? just guessing...
351  for (unsigned int i = 1; i < vertices.size(); i++) {
352  bool mod = false;
353 
354  for (auto& edge : edges) {
355  int src = edge.src;
356  int dest = edge.dest;
357 
358  ASSERT(src >= 0);
359  ASSERT(dest >= 0);
360  ASSERT(src < (int)vertices.size());
361  ASSERT(dest < (int)vertices.size());
362  ASSERT(src != dest);
363 
364  if (vertices[src].dist + edge.metric >= vertices[dest].dist)
365  continue;
366 
367  vertices[dest].dist = vertices[src].dist + edge.metric;
368  vertices[dest].parent = src;
369 
370  mod = true;
371  }
372 
373  if (!mod)
374  break;
375  }
376 
377  return vertices;
378 }

Referenced by calculateShortestPath(), and rebuildRoutingTable().

◆ checkLinkValidity()

bool inet::Ted::checkLinkValidity ( TeLinkStateInfo  link,
TeLinkStateInfo *&  match 
)
virtual
381 {
382  match = nullptr;
383 
384  for (auto& elem : ted) {
385  if (elem.sourceId == link.sourceId && elem.messageId == link.messageId && elem.timestamp == link.timestamp) {
386  // we've already seen this message, ignore it
387  return false;
388  }
389 
390  if (elem.advrouter == link.advrouter && elem.linkid == link.linkid) {
391  // we've have info about this link
392 
393  if (elem.timestamp < link.timestamp || (elem.timestamp == link.timestamp && elem.messageId < link.messageId)) {
394  // but it's older, use this new
395  match = &(elem);
396  break;
397  }
398  else {
399  // and it's newer, forget this message
400  return false;
401  }
402  }
403  }
404 
405  // no or not up2date info, link is interesting
406  return true;
407 }

◆ getInterfaceAddrByPeerAddress()

Ipv4Address inet::Ted::getInterfaceAddrByPeerAddress ( Ipv4Address  peerIP)
virtual
296 {
297  for (auto& elem : ted)
298  if (elem.linkid == peerIP && elem.advrouter == routerId)
299  return elem.local;
300 
301  throw cRuntimeError("not a local peer: %s", peerIP.str().c_str());
302 }

Referenced by rebuildRoutingTable().

◆ getLocalAddress()

Ipv4AddressVector inet::Ted::getLocalAddress ( )
virtual
447 {
448  return interfaceAddrs;
449 }

◆ getPeerByLocalAddress()

Ipv4Address inet::Ted::getPeerByLocalAddress ( Ipv4Address  localInf)
virtual
465 {
466  unsigned int index = linkIndex(localInf);
467  return ted[index].linkid;
468 }

Referenced by rebuildRoutingTable().

◆ handleCrashOperation()

void inet::Ted::handleCrashOperation ( LifecycleOperation operation)
overridevirtual

Implements inet::OperationalMixin< cSimpleModule >.

482 {
483  ted.clear();
484  interfaceAddrs.clear();
485 }

◆ handleMessageWhenUp()

void inet::Ted::handleMessageWhenUp ( cMessage *  msg)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

138 {
139  throw cRuntimeError("Message not allowed");
140 }

◆ handleStartOperation()

void inet::Ted::handleStartOperation ( LifecycleOperation operation)
overridevirtual

Implements inet::OperationalMixin< cSimpleModule >.

471 {
472  initializeTED();
473 }

◆ handleStopOperation()

void inet::Ted::handleStopOperation ( LifecycleOperation operation)
overridevirtual

Implements inet::OperationalMixin< cSimpleModule >.

476 {
477  ted.clear();
478  interfaceAddrs.clear();
479 }

◆ initialize()

void inet::Ted::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::OperationalMixin< cSimpleModule >.

36 {
38  // TODO INITSTAGE
39  if (stage == INITSTAGE_LOCAL) {
40  maxMessageId = 0;
41 
42  WATCH_VECTOR(ted);
43 
44  rt.reference(this, "routingTableModule", true);
45  ift.reference(this, "interfaceTableModule", true);
46  }
47 }

◆ initializeTED()

void inet::Ted::initializeTED ( )
protectedvirtual
50 {
51  routerId = rt->getRouterId();
52  ASSERT(!routerId.isUnspecified());
53 
54  //
55  // Extract initial TED contents from the routing table.
56  //
57  // We need to create one TED entry (TeLinkStateInfo) for each link,
58  // i.e. for each physical interface.
59  //
60  for (int i = 0; i < ift->getNumInterfaces(); i++) {
61  NetworkInterface *ie = ift->getInterface(i);
62 
63  if (ie->getNodeOutputGateId() == -1) // ignore if it's not a physical interface
64  continue;
65 
66  //
67  // We'll need to fill in "linkid" and "remote" (ie. peer addr).
68  //
69  // Real link state protocols find the peer address by exchanging HELLO messages;
70  // in this model we haven't implemented HELLO but provide peer addresses via
71  // preconfigured static host routes in routing table.
72  //
73  // find bandwidth of the link
74  cGate *g = CHK(getParentModule()->gate(ie->getNodeOutputGateId()));
75  double linkBandwidth = g->getChannel()->getNominalDatarate();
76 
77  // find destination node for current interface
78  cModule *destNode = nullptr;
79  while (g) {
80  g = g->getNextGate();
81  cModule *mod = g->getOwnerModule();
82  cProperties *props = mod->getProperties();
83  if (props && props->getAsBool("networkNode")) {
84  destNode = mod;
85  break;
86  }
87  }
88  if (!g) // not connected
89  continue;
90  IIpv4RoutingTable *destRt = L3AddressResolver().findIpv4RoutingTableOf(destNode);
91  if (!destRt) // switch, hub, bus, accesspoint, etc
92  continue;
93  Ipv4Address destRouterId = destRt->getRouterId();
94  IInterfaceTable *destIft = L3AddressResolver().interfaceTableOf(destNode);
95  NetworkInterface *destIe = CHK(destIft->findInterfaceByNodeInputGateId(g->getId()));
96 
97  //
98  // fill in and insert TED entry
99  //
100  TeLinkStateInfo entry;
101  entry.advrouter = routerId;
102  entry.local = ie->getProtocolData<Ipv4InterfaceData>()->getIPAddress();
103  entry.linkid = destRouterId;
104  entry.remote = destIe->getProtocolData<Ipv4InterfaceData>()->getIPAddress();
105  entry.MaxBandwidth = linkBandwidth;
106  for (int j = 0; j < 8; j++)
107  entry.UnResvBandwidth[j] = entry.MaxBandwidth;
108  entry.state = true;
109 
110  // use g->getChannel()->par("delay") for shortest delay calculation
111  entry.metric = ie->getProtocolData<Ipv4InterfaceData>()->getMetric();
112 
113  EV_INFO << "metric set to=" << entry.metric << endl;
114 
115  entry.sourceId = routerId.getInt();
116  entry.messageId = ++maxMessageId;
117  entry.timestamp = simTime();
118 
119  ted.push_back(entry);
120  }
121 
122  // extract list of local interface addresses into interfaceAddrs[]
123  for (int i = 0; i < ift->getNumInterfaces(); i++) {
124  NetworkInterface *ie = ift->getInterface(i);
125  NetworkInterface *ie2 = rt->getInterfaceByAddress(ie->getProtocolData<Ipv4InterfaceData>()->getIPAddress());
126  if (ie2 != ie)
127  throw cRuntimeError("MPLS models assume interfaces to have unique addresses, "
128  "but address of '%s' (%s) is not unique",
129  ie->getInterfaceName(), ie->getProtocolData<Ipv4InterfaceData>()->getIPAddress().str().c_str());
130  if (!ie->isLoopback())
131  interfaceAddrs.push_back(ie->getProtocolData<Ipv4InterfaceData>()->getIPAddress());
132  }
133 
135 }

Referenced by handleStartOperation().

◆ isLocalAddress()

bool inet::Ted::isLocalAddress ( Ipv4Address  addr)
virtual
430 {
431  for (auto& elem : interfaceAddrs)
432  if (elem == addr)
433  return true;
434 
435  return false;
436 }

◆ isLocalPeer()

bool inet::Ted::isLocalPeer ( Ipv4Address  inetAddr)
virtual
315 {
316  for (auto& elem : ted)
317  if (elem.linkid == inetAddr && elem.advrouter == routerId)
318  return true;
319 
320  return false;
321 }

Referenced by peerRemoteInterface(), and rebuildRoutingTable().

◆ linkIndex() [1/2]

unsigned int inet::Ted::linkIndex ( Ipv4Address  advrouter,
Ipv4Address  linkid 
)
virtual
420 {
421  for (unsigned int i = 0; i < ted.size(); i++)
422  if (ted[i].advrouter == advrouter && ted[i].linkid == linkid)
423  return i;
424 
425  ASSERT(false);
426  return -1; // to eliminate warning
427 }

◆ linkIndex() [2/2]

unsigned int inet::Ted::linkIndex ( Ipv4Address  localInf)
virtual
410 {
411  for (unsigned int i = 0; i < ted.size(); i++)
412  if (ted[i].advrouter == routerId && ted[i].local == localInf)
413  return i;
414 
415  ASSERT(false);
416  return -1; // to eliminate warning
417 }

Referenced by getPeerByLocalAddress().

◆ numInitStages()

virtual int inet::Ted::numInitStages ( ) const
inlineoverrideprotectedvirtual
61 { return NUM_INIT_STAGES; }

◆ peerRemoteInterface()

Ipv4Address inet::Ted::peerRemoteInterface ( Ipv4Address  peerIP)
virtual
305 {
306  ASSERT(isLocalPeer(peerIP));
307  for (auto& elem : ted)
308  if (elem.linkid == peerIP && elem.advrouter == routerId)
309  return elem.remote;
310 
311  throw cRuntimeError("not a local peer: %s", peerIP.str().c_str());
312 }

◆ primaryAddress()

Ipv4Address inet::Ted::primaryAddress ( Ipv4Address  localInf)
virtual
452 {
453  for (auto& elem : ted) {
454  if (elem.local == localInf)
455  return elem.advrouter;
456 
457  if (elem.remote == localInf)
458  return elem.linkid;
459  }
460  ASSERT(false);
461  return Ipv4Address(); // to eliminate warning
462 }

◆ rebuildRoutingTable()

void inet::Ted::rebuildRoutingTable ( )
virtual
211 {
212  EV_INFO << "rebuilding routing table at " << routerId << endl;
213 
214  std::vector<vertex_t> V = calculateShortestPaths(ted, 0.0, 7);
215 
216  // remove all routing entries, except multicast ones (we don't care about them)
217  int n = rt->getNumRoutes();
218  int j = 0;
219  for (int i = 0; i < n; i++) {
220  Ipv4Route *entry = rt->getRoute(j);
221  if (entry->getDestination().isMulticast()) {
222  ++j;
223  }
224  else {
225  rt->deleteRoute(entry);
226  }
227  }
228 
229 // for (unsigned int i = 0; i < V.size(); i++)
230 // {
231 // EV << "V[" << i << "].node=" << V[i].node << endl;
232 // EV << "V[" << i << "].parent=" << V[i].parent << endl;
233 // EV << "V[" << i << "].dist=" << V[i].dist << endl;
234 // }
235 
236  // insert remote destinations
237 
238  for (unsigned int i = 0; i < V.size(); i++) {
239  if (V[i].node == routerId) // us
240  continue;
241 
242  if (V[i].parent == -1) // unreachable
243  continue;
244 
245  if (isLocalPeer(V[i].node)) // local peer
246  continue;
247 
248  int nHop = i;
249 
250  while (!isLocalPeer(V[nHop].node)) {
251  nHop = V[nHop].parent;
252  }
253 
254  ASSERT(isLocalPeer(V[nHop].node));
255 
256  Ipv4Route *entry = new Ipv4Route;
257  entry->setDestination(V[i].node);
258 
259  if (V[i].node == V[nHop].node) {
260  entry->setGateway(Ipv4Address());
261  }
262  else {
263  entry->setGateway(V[nHop].node);
264  }
265  entry->setInterface(rt->getInterfaceByAddress(getInterfaceAddrByPeerAddress(V[nHop].node)));
266  entry->setSourceType(IRoute::OSPF);
267 
268  entry->setNetmask(Ipv4Address::ALLONES_ADDRESS);
269  entry->setMetric(0);
270 
271  EV_DETAIL << " inserting route: dest=" << entry->getDestination() << " interface=" << entry->getInterfaceName() << " nexthop=" << entry->getGateway() << "\n";
272 
273  rt->addRoute(entry);
274  }
275 
276  // insert local peers
277 
278  for (auto& elem : interfaceAddrs) {
279  Ipv4Route *entry = new Ipv4Route;
280 
281  entry->setDestination(getPeerByLocalAddress(elem));
282  entry->setGateway(Ipv4Address());
283  entry->setInterface(rt->getInterfaceByAddress(elem));
284  entry->setSourceType(IRoute::OSPF);
285 
286  entry->setNetmask(Ipv4Address::ALLONES_ADDRESS);
287  entry->setMetric(0); // FIXME what's that?
288 
289  EV_DETAIL << " inserting route: local=" << elem << " peer=" << entry->getDestination() << " interface=" << entry->getInterfaceName() << "\n";
290 
291  rt->addRoute(entry);
292  }
293 }

Referenced by initializeTED().

◆ updateTimestamp()

void inet::Ted::updateTimestamp ( TeLinkStateInfo link)
virtual
439 {
440  ASSERT(link->advrouter == routerId);
441 
442  link->timestamp = simTime();
443  link->messageId = ++maxMessageId;
444 }

Member Data Documentation

◆ ift

ModuleRefByPar<IInterfaceTable> inet::Ted::ift
protected

Referenced by initialize(), and initializeTED().

◆ interfaceAddrs

◆ maxMessageId

int inet::Ted::maxMessageId = 0
protected

◆ routerId

◆ rt

◆ ted


The documentation for this class was generated from the following files:
inet::math::mod
double mod(double dividend, double divisor)
Returns the rest of a whole-numbered division.
Definition: INETMath.h:96
CHK
#define CHK(x)
Definition: INETDefs.h:87
inet::Ted::getInterfaceAddrByPeerAddress
virtual Ipv4Address getInterfaceAddrByPeerAddress(Ipv4Address peerIP)
Definition: Ted.cc:295
inet::Ipv4Address::getInt
uint32_t getInt() const
Returns the address as an uint32_t in host byte order (e.g.
Definition: Ipv4Address.h:186
inet::Ted::interfaceAddrs
Ipv4AddressVector interfaceAddrs
Definition: Ted.h:94
inet::Ted::linkIndex
virtual unsigned int linkIndex(Ipv4Address localInf)
Definition: Ted.cc:409
inet::Ted::ted
TeLinkStateInfoVector ted
The link state database.
Definition: Ted.h:53
inet::OperationalMixin< cSimpleModule >::initialize
virtual void initialize(int stage) override
Definition: OperationalMixinImpl.h:26
inet::units::units::V
compose< W, pow< A, -1 > > V
Definition: Units.h:942
inet::Ted::initializeTED
virtual void initializeTED()
Definition: Ted.cc:49
inet::Ted::rebuildRoutingTable
virtual void rebuildRoutingTable()
Definition: Ted.cc:210
inet::Ted::rt
ModuleRefByPar< IIpv4RoutingTable > rt
Definition: Ted.h:90
inet::Ipv4AddressVector
std::vector< Ipv4Address > Ipv4AddressVector
Definition: Ipv4Address_m.h:46
inet::Ipv4Address::ALLONES_ADDRESS
static const Ipv4Address ALLONES_ADDRESS
255.255.255.255
Definition: Ipv4Address.h:94
inet::units::units::g
milli< kg >::type g
Definition: Units.h:1071
inet::Ted::routerId
Ipv4Address routerId
Definition: Ted.h:92
inet::IRoute::OSPF
@ OSPF
managed by the given routing protocol
Definition: IRoute.h:35
inet::contains
bool contains(const std::vector< T > &v, const Tk &a)
Definition: stlutils.h:65
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::Ted::calculateShortestPaths
std::vector< vertex_t > calculateShortestPaths(const TeLinkStateInfoVector &topology, double req_bandwidth, int priority)
Definition: Ted.cc:323
inet::Ted::assignIndex
virtual int assignIndex(std::vector< vertex_t > &vertices, Ipv4Address nodeAddr)
Definition: Ted.cc:158
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::Ted::maxMessageId
int maxMessageId
Definition: Ted.h:96
inet::Ted::getPeerByLocalAddress
virtual Ipv4Address getPeerByLocalAddress(Ipv4Address localInf)
Definition: Ted.cc:464
LS_INFINITY
#define LS_INFINITY
Definition: Ted.cc:23
inet::Ted::ift
ModuleRefByPar< IInterfaceTable > ift
Definition: Ted.h:91
inet::Ipv4Address::isUnspecified
bool isUnspecified() const
True if all four address bytes are zero.
Definition: Ipv4Address.h:165
inet::Ted::isLocalPeer
virtual bool isLocalPeer(Ipv4Address inetAddr)
Definition: Ted.cc:314