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::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 ()
 
virtual bool handleOperationStage (LifecycleOperation *operation, int stage, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual bool checkLinkValidity (TELinkStateInfo link, TELinkStateInfo *&match)
 
virtual void updateTimestamp (TELinkStateInfo *link)
 
Public interface to the Traffic Engineering Database
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 IPAddressVector getLocalAddress ()
 
virtual void rebuildRoutingTable ()
 
- 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 handleMessage (cMessage *msg) override
 
virtual void initializeTED ()
 
virtual IPAddressVector calculateShortestPath (IPAddressVector dest, const TELinkStateInfoVector &topology, double req_bandwidth, int priority)
 
virtual int assignIndex (std::vector< vertex_t > &vertices, IPv4Address nodeAddr)
 
std::vector< vertex_tcalculateShortestPaths (const TELinkStateInfoVector &topology, double req_bandwidth, int priority)
 

Protected Attributes

IIPv4RoutingTablert = nullptr
 
IInterfaceTableift = nullptr
 
IPv4Address routerId
 
IPAddressVector interfaceAddrs
 
int maxMessageId = 0
 

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

inet::TED::TED ( )
37 {
38 }
inet::TED::~TED ( )
virtual
41 {
42 }

Member Function Documentation

int inet::TED::assignIndex ( std::vector< vertex_t > &  vertices,
IPv4Address  nodeAddr 
)
protectedvirtual

Referenced by calculateShortestPaths().

178 {
179  // find node in vertices[] whose IPv4 address is nodeAddr
180  for (unsigned int i = 0; i < vertices.size(); i++)
181  if (vertices[i].node == nodeAddr)
182  return i;
183 
184 
185  // if not found, create
186  vertex_t newVertex;
187  newVertex.node = nodeAddr;
188  newVertex.dist = LS_INFINITY;
189  newVertex.parent = -1;
190 
191  vertices.push_back(newVertex);
192  return vertices.size() - 1;
193 }
#define LS_INFINITY
Definition: TED.cc:32
IPAddressVector inet::TED::calculateShortestPath ( IPAddressVector  dest,
const TELinkStateInfoVector topology,
double  req_bandwidth,
int  priority 
)
protectedvirtual
197 {
198  // FIXME comment: what do we do here?
199  std::vector<vertex_t> V = calculateShortestPaths(topology, req_bandwidth, priority);
200 
201  double minDist = LS_INFINITY;
202  int minIndex = -1;
203 
204  // FIXME comment: what do we do in this block?
205  for (unsigned int i = 0; i < V.size(); i++) {
206  if (V[i].dist >= minDist)
207  continue;
208 
209  if (find(dest.begin(), dest.end(), V[i].node) == dest.end())
210  continue;
211 
212  minDist = V[i].dist;
213  minIndex = i;
214  }
215 
216  IPAddressVector result;
217 
218  if (minIndex < 0)
219  return result;
220 
221  result.push_back(V[minIndex].node);
222  while (V[minIndex].parent != -1) {
223  minIndex = V[minIndex].parent;
224  result.insert(result.begin(), V[minIndex].node);
225  }
226 
227  return result;
228 }
#define LS_INFINITY
Definition: TED.cc:32
compose< W, pow< A,-1 > > V
Definition: Units.h:772
std::vector< IPv4Address > IPAddressVector
Definition: IntServ_m.h:38
std::vector< vertex_t > calculateShortestPaths(const TELinkStateInfoVector &topology, double req_bandwidth, int priority)
Definition: TED.cc:343
std::vector< T >::iterator find(std::vector< T > &v, const T &a)
Definition: stlutils.h:48
std::vector< TED::vertex_t > inet::TED::calculateShortestPaths ( const TELinkStateInfoVector topology,
double  req_bandwidth,
int  priority 
)
protected

Referenced by calculateShortestPath(), and rebuildRoutingTable().

345 {
346  std::vector<vertex_t> vertices;
347  std::vector<edge_t> edges;
348 
349  // select edges that have enough bandwidth left, and store them into edges[].
350  // meanwhile, collect vertices in vectices[].
351  for (auto & elem : topology) {
352  if (!elem.state)
353  continue;
354 
355  if (elem.UnResvBandwidth[priority] < req_bandwidth)
356  continue;
357 
358  edge_t edge;
359  edge.src = assignIndex(vertices, elem.advrouter);
360  edge.dest = assignIndex(vertices, elem.linkid);
361  edge.metric = elem.metric;
362  edges.push_back(edge);
363  }
364 
365  IPv4Address srcAddr = routerId;
366 
367  int srcIndex = assignIndex(vertices, srcAddr);
368  vertices[srcIndex].dist = 0.0;
369 
370  // FIXME comment: Dijkstra? just guessing...
371  for (unsigned int i = 1; i < vertices.size(); i++) {
372  bool mod = false;
373 
374  for (auto & edge : edges) {
375  int src = edge.src;
376  int dest = edge.dest;
377 
378  ASSERT(src >= 0);
379  ASSERT(dest >= 0);
380  ASSERT(src < (int)vertices.size());
381  ASSERT(dest < (int)vertices.size());
382  ASSERT(src != dest);
383 
384  if (vertices[src].dist + edge.metric >= vertices[dest].dist)
385  continue;
386 
387  vertices[dest].dist = vertices[src].dist + edge.metric;
388  vertices[dest].parent = src;
389 
390  mod = true;
391  }
392 
393  if (!mod)
394  break;
395  }
396 
397  return vertices;
398 }
virtual int assignIndex(std::vector< vertex_t > &vertices, IPv4Address nodeAddr)
Definition: TED.cc:177
double mod(double dividend, double divisor)
Returns the rest of a whole-numbered division.
Definition: INETMath.h:108
IPv4Address routerId
Definition: TED.h:101
bool inet::TED::checkLinkValidity ( TELinkStateInfo  link,
TELinkStateInfo *&  match 
)
virtual

Referenced by inet::LinkStateRouting::processLINK_STATE_MESSAGE().

401 {
402  match = nullptr;
403 
404  for (auto & elem : ted) {
405  if (elem.sourceId == link.sourceId && elem.messageId == link.messageId && elem.timestamp == link.timestamp) {
406  // we've already seen this message, ignore it
407  return false;
408  }
409 
410  if (elem.advrouter == link.advrouter && elem.linkid == link.linkid) {
411  // we've have info about this link
412 
413  if (elem.timestamp < link.timestamp || (elem.timestamp == link.timestamp && elem.messageId < link.messageId)) {
414  // but it's older, use this new
415  match = &(elem);
416  break;
417  }
418  else {
419  // and it's newer, forget this message
420  return false;
421  }
422  }
423  }
424 
425  // no or not up2date info, link is interesting
426  return true;
427 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address inet::TED::getInterfaceAddrByPeerAddress ( IPv4Address  peerIP)
virtual

Referenced by rebuildRoutingTable().

316 {
317  for (auto & elem : ted)
318  if (elem.linkid == peerIP && elem.advrouter == routerId)
319  return elem.local;
320 
321  throw cRuntimeError("not a local peer: %s", peerIP.str().c_str());
322 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address routerId
Definition: TED.h:101
IPAddressVector inet::TED::getLocalAddress ( )
virtual
467 {
468  return interfaceAddrs;
469 }
IPAddressVector interfaceAddrs
Definition: TED.h:103
IPv4Address inet::TED::getPeerByLocalAddress ( IPv4Address  localInf)
virtual

Referenced by rebuildRoutingTable().

485 {
486  unsigned int index = linkIndex(localInf);
487  return ted[index].linkid;
488 }
virtual unsigned int linkIndex(IPv4Address localInf)
Definition: TED.cc:429
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
void inet::TED::handleMessage ( cMessage *  msg)
overrideprotectedvirtual
157 {
158  ASSERT(false);
159 }
bool inet::TED::handleOperationStage ( LifecycleOperation operation,
int  stage,
IDoneCallback doneCallback 
)
overridevirtual

Perform one stage of a lifecycle operation.

Processing may be done entirely within this method, or may be a longer process that involves nonzero simulation time or several events, and is triggered by this method call.

Return value: true = "done"; false = "not yet done, will invoke doneCallback when done"

Implements inet::ILifecycle.

491 {
492  Enter_Method_Silent();
493  if (dynamic_cast<NodeStartOperation *>(operation)) {
495  initializeTED();
496  }
497  else if (dynamic_cast<NodeShutdownOperation *>(operation)) {
499  ted.clear();
500  interfaceAddrs.clear();
501  }
502  }
503  else if (dynamic_cast<NodeCrashOperation *>(operation)) {
505  ted.clear();
506  interfaceAddrs.clear();
507  }
508  }
509  return true;
510 }
virtual void initializeTED()
Definition: TED.cc:66
Stage
Definition: NodeOperations.h:71
Stage
Definition: NodeOperations.h:126
IPAddressVector interfaceAddrs
Definition: TED.h:103
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
Stage
Definition: NodeOperations.h:46
Definition: NodeOperations.h:127
void inet::TED::initialize ( int  stage)
overrideprotectedvirtual
45 {
46  cSimpleModule::initialize(stage);
47 
48  if (stage == INITSTAGE_ROUTING_PROTOCOLS) {
49  maxMessageId = 0;
50 
51  WATCH_VECTOR(ted);
52 
53  rt = getModuleFromPar<IIPv4RoutingTable>(par("routingTableModule"), this);
54  ift = getModuleFromPar<IInterfaceTable>(par("interfaceTableModule"), this);
55  routerId = rt->getRouterId();
56  ASSERT(!routerId.isUnspecified());
57 
58  bool isOperational;
59  NodeStatus *nodeStatus = dynamic_cast<NodeStatus *>(findContainingNode(this)->getSubmodule("status"));
60  isOperational = (!nodeStatus) || nodeStatus->getState() == NodeStatus::UP;
61  if (isOperational)
62  initializeTED();
63  }
64 }
IInterfaceTable * ift
Definition: TED.h:100
int maxMessageId
Definition: TED.h:105
Initialization of routing protocols.
Definition: InitStages.h:101
virtual void initializeTED()
Definition: TED.cc:66
cModule * findContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:56
virtual IPv4Address getRouterId() const =0
Returns routerId.
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address routerId
Definition: TED.h:101
IIPv4RoutingTable * rt
Definition: TED.h:99
Definition: NodeStatus.h:40
void inet::TED::initializeTED ( )
protectedvirtual

Referenced by handleOperationStage(), and initialize().

67 {
68  //
69  // Extract initial TED contents from the routing table.
70  //
71  // We need to create one TED entry (TELinkStateInfo) for each link,
72  // i.e. for each physical interface.
73  //
74  for (int i = 0; i < ift->getNumInterfaces(); i++) {
75  InterfaceEntry *ie = ift->getInterface(i);
76 
77  if (ie->getNodeOutputGateId() == -1) // ignore if it's not a physical interface
78  continue;
79 
80  //
81  // We'll need to fill in "linkid" and "remote" (ie. peer addr).
82  //
83  // Real link state protocols find the peer address by exchanging HELLO messages;
84  // in this model we haven't implemented HELLO but provide peer addresses via
85  // preconfigured static host routes in routing table.
86  //
87  // find bandwidth of the link
88  cGate *g = getParentModule()->gate(ie->getNodeOutputGateId());
89  ASSERT(g);
90  double linkBandwidth = g->getChannel()->getNominalDatarate();
91 
92  // find destination node for current interface
93  cModule *destNode = nullptr;
94  while (g) {
95  g = g->getNextGate();
96  cModule *mod = g->getOwnerModule();
97  cProperties *props = mod->getProperties();
98  if (props && props->getAsBool("networkNode")) {
99  destNode = mod;
100  break;
101  }
102  }
103  if (!g) // not connected
104  continue;
105  IIPv4RoutingTable *destRt = L3AddressResolver().findIPv4RoutingTableOf(destNode);
106  if (!destRt) // switch, hub, bus, accesspoint, etc
107  continue;
108  IPv4Address destRouterId = destRt->getRouterId();
109  IInterfaceTable *destIft = L3AddressResolver().findInterfaceTableOf(destNode);
110  ASSERT(destIft);
111  InterfaceEntry *destIe = destIft->getInterfaceByNodeInputGateId(g->getId());
112  ASSERT(destIe);
113 
114  //
115  // fill in and insert TED entry
116  //
117  TELinkStateInfo entry;
118  entry.advrouter = routerId;
119  ASSERT(ie->ipv4Data());
120  entry.local = ie->ipv4Data()->getIPAddress();
121  entry.linkid = destRouterId;
122  ASSERT(destIe->ipv4Data());
123  entry.remote = destIe->ipv4Data()->getIPAddress();
124  entry.MaxBandwidth = linkBandwidth;
125  for (int j = 0; j < 8; j++)
126  entry.UnResvBandwidth[j] = entry.MaxBandwidth;
127  entry.state = true;
128 
129  // use g->getChannel()->par("delay").doubleValue() for shortest delay calculation
130  entry.metric = ie->ipv4Data()->getMetric();
131 
132  EV_INFO << "metric set to=" << entry.metric << endl;
133 
134  entry.sourceId = routerId.getInt();
135  entry.messageId = ++maxMessageId;
136  entry.timestamp = simTime();
137 
138  ted.push_back(entry);
139  }
140 
141  // extract list of local interface addresses into interfaceAddrs[]
142  for (int i = 0; i < ift->getNumInterfaces(); i++) {
143  InterfaceEntry *ie = ift->getInterface(i);
144  InterfaceEntry *ie2 = rt->getInterfaceByAddress(ie->ipv4Data()->getIPAddress());
145  if (ie2 != ie)
146  throw cRuntimeError("MPLS models assume interfaces to have unique addresses, "
147  "but address of '%s' (%s) is not unique",
148  ie->getName(), ie->ipv4Data()->getIPAddress().str().c_str());
149  if (!ie->isLoopback())
150  interfaceAddrs.push_back(ie->ipv4Data()->getIPAddress());
151  }
152 
154 }
IInterfaceTable * ift
Definition: TED.h:100
virtual InterfaceEntry * getInterfaceByAddress(const IPv4Address &address) const =0
Returns an interface given by its address.
int maxMessageId
Definition: TED.h:105
virtual void rebuildRoutingTable()
Definition: TED.cc:230
double mod(double dividend, double divisor)
Returns the rest of a whole-numbered division.
Definition: INETMath.h:108
virtual int getNumInterfaces() const =0
Returns the number of interfaces.
IPAddressVector interfaceAddrs
Definition: TED.h:103
uint32 getInt() const
Returns the address as an int.
Definition: IPv4Address.h:197
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address routerId
Definition: TED.h:101
virtual InterfaceEntry * getInterface(int pos) const =0
Returns the InterfaceEntry specified by an index 0..numInterfaces-1.
milli< kg >::type g
Definition: Units.h:900
IIPv4RoutingTable * rt
Definition: TED.h:99
bool inet::TED::isLocalAddress ( IPv4Address  addr)
virtual
450 {
451  for (auto & elem : interfaceAddrs)
452  if (elem == addr)
453  return true;
454 
455  return false;
456 }
IPAddressVector interfaceAddrs
Definition: TED.h:103
bool inet::TED::isLocalPeer ( IPv4Address  inetAddr)
virtual

Referenced by peerRemoteInterface(), and rebuildRoutingTable().

335 {
336  for (auto & elem : ted)
337  if (elem.linkid == inetAddr && elem.advrouter == routerId)
338  return true;
339 
340  return false;
341 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address routerId
Definition: TED.h:101
unsigned int inet::TED::linkIndex ( IPv4Address  localInf)
virtual

Referenced by getPeerByLocalAddress(), inet::LDP::processHelloTimeout(), and inet::LDP::processLDPHello().

430 {
431  for (unsigned int i = 0; i < ted.size(); i++)
432  if (ted[i].advrouter == routerId && ted[i].local == localInf)
433  return i;
434 
435  ASSERT(false);
436  return -1; // to eliminate warning
437 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address routerId
Definition: TED.h:101
unsigned int inet::TED::linkIndex ( IPv4Address  advrouter,
IPv4Address  linkid 
)
virtual
440 {
441  for (unsigned int i = 0; i < ted.size(); i++)
442  if (ted[i].advrouter == advrouter && ted[i].linkid == linkid)
443  return i;
444 
445  ASSERT(false);
446  return -1; // to eliminate warning
447 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
virtual int inet::TED::numInitStages ( ) const
inlineoverrideprotectedvirtual
72 { return NUM_INIT_STAGES; }
The number of initialization stages.
Definition: InitStages.h:116
IPv4Address inet::TED::peerRemoteInterface ( IPv4Address  peerIP)
virtual
325 {
326  ASSERT(isLocalPeer(peerIP));
327  for (auto & elem : ted)
328  if (elem.linkid == peerIP && elem.advrouter == routerId)
329  return elem.remote;
330 
331  throw cRuntimeError("not a local peer: %s", peerIP.str().c_str());
332 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
IPv4Address routerId
Definition: TED.h:101
virtual bool isLocalPeer(IPv4Address inetAddr)
Definition: TED.cc:334
IPv4Address inet::TED::primaryAddress ( IPv4Address  localInf)
virtual
472 {
473  for (auto & elem : ted) {
474  if (elem.local == localInf)
475  return elem.advrouter;
476 
477  if (elem.remote == localInf)
478  return elem.linkid;
479  }
480  ASSERT(false);
481  return IPv4Address(); // to eliminate warning
482 }
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
void inet::TED::rebuildRoutingTable ( )
virtual

Referenced by initializeTED(), inet::LDP::processHelloTimeout(), inet::LDP::processLDPHello(), and inet::LinkStateRouting::processLINK_STATE_MESSAGE().

231 {
232  EV_INFO << "rebuilding routing table at " << routerId << endl;
233 
234  std::vector<vertex_t> V = calculateShortestPaths(ted, 0.0, 7);
235 
236  // remove all routing entries, except multicast ones (we don't care about them)
237  int n = rt->getNumRoutes();
238  int j = 0;
239  for (int i = 0; i < n; i++) {
240  IPv4Route *entry = rt->getRoute(j);
241  if (entry->getDestination().isMulticast()) {
242  ++j;
243  }
244  else {
245  rt->deleteRoute(entry);
246  }
247  }
248 
249 // for (unsigned int i = 0; i < V.size(); i++)
250 // {
251 // EV << "V[" << i << "].node=" << V[i].node << endl;
252 // EV << "V[" << i << "].parent=" << V[i].parent << endl;
253 // EV << "V[" << i << "].dist=" << V[i].dist << endl;
254 // }
255 
256  // insert remote destinations
257 
258  for (unsigned int i = 0; i < V.size(); i++) {
259  if (V[i].node == routerId) // us
260  continue;
261 
262  if (V[i].parent == -1) // unreachable
263  continue;
264 
265  if (isLocalPeer(V[i].node)) // local peer
266  continue;
267 
268  int nHop = i;
269 
270  while (!isLocalPeer(V[nHop].node)) {
271  nHop = V[nHop].parent;
272  }
273 
274  ASSERT(isLocalPeer(V[nHop].node));
275 
276  IPv4Route *entry = new IPv4Route;
277  entry->setDestination(V[i].node);
278 
279  if (V[i].node == V[nHop].node) {
280  entry->setGateway(IPv4Address());
281  }
282  else {
283  entry->setGateway(V[nHop].node);
284  }
285  entry->setInterface(rt->getInterfaceByAddress(getInterfaceAddrByPeerAddress(V[nHop].node)));
286  entry->setSourceType(IRoute::OSPF);
287 
288  entry->setNetmask(IPv4Address::ALLONES_ADDRESS);
289  entry->setMetric(0);
290 
291  EV_DETAIL << " inserting route: dest=" << entry->getDestination() << " interface=" << entry->getInterfaceName() << " nexthop=" << entry->getGateway() << "\n";
292 
293  rt->addRoute(entry);
294  }
295 
296  // insert local peers
297 
298  for (auto & elem : interfaceAddrs) {
299  IPv4Route *entry = new IPv4Route;
300 
301  entry->setDestination(getPeerByLocalAddress(elem));
302  entry->setGateway(IPv4Address());
303  entry->setInterface(rt->getInterfaceByAddress(elem));
304  entry->setSourceType(IRoute::OSPF);
305 
306  entry->setNetmask(IPv4Address::ALLONES_ADDRESS);
307  entry->setMetric(0); // XXX FIXME what's that?
308 
309  EV_DETAIL << " inserting route: local=" << elem << " peer=" << entry->getDestination() << " interface=" << entry->getInterfaceName() << "\n";
310 
311  rt->addRoute(entry);
312  }
313 }
virtual InterfaceEntry * getInterfaceByAddress(const IPv4Address &address) const =0
Returns an interface given by its address.
managed by the given routing protocol
Definition: IRoute.h:46
virtual IPv4Route * getRoute(int k) const override=0
Returns the kth route.
virtual int getNumRoutes() const =0
Returns the total number of unicast routes.
virtual bool deleteRoute(IPv4Route *entry)=0
Deletes the given route from the routing table.
virtual IPv4Address getPeerByLocalAddress(IPv4Address localInf)
Definition: TED.cc:484
virtual void addRoute(IPv4Route *entry)=0
Adds a route to the routing table.
compose< W, pow< A,-1 > > V
Definition: Units.h:772
IPAddressVector interfaceAddrs
Definition: TED.h:103
TELinkStateInfoVector ted
The link state database.
Definition: TED.h:64
std::vector< vertex_t > calculateShortestPaths(const TELinkStateInfoVector &topology, double req_bandwidth, int priority)
Definition: TED.cc:343
IPv4Address routerId
Definition: TED.h:101
virtual bool isLocalPeer(IPv4Address inetAddr)
Definition: TED.cc:334
static const IPv4Address ALLONES_ADDRESS
255.255.255.255
Definition: IPv4Address.h:105
IIPv4RoutingTable * rt
Definition: TED.h:99
virtual IPv4Address getInterfaceAddrByPeerAddress(IPv4Address peerIP)
Definition: TED.cc:315
void inet::TED::updateTimestamp ( TELinkStateInfo link)
virtual

Referenced by inet::LinkStateRouting::receiveSignal().

459 {
460  ASSERT(link->advrouter == routerId);
461 
462  link->timestamp = simTime();
463  link->messageId = ++maxMessageId;
464 }
int maxMessageId
Definition: TED.h:105
IPv4Address routerId
Definition: TED.h:101

Member Data Documentation

IInterfaceTable* inet::TED::ift = nullptr
protected

Referenced by initialize(), and initializeTED().

int inet::TED::maxMessageId = 0
protected
IIPv4RoutingTable* inet::TED::rt = nullptr
protected

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