INET Framework for OMNeT++/OMNEST
inet::visualizer::RoutingTableVisualizerBase Class Referenceabstract

#include <RoutingTableVisualizerBase.h>

Inheritance diagram for inet::visualizer::RoutingTableVisualizerBase:
inet::visualizer::VisualizerBase inet::visualizer::RoutingTableCanvasVisualizer inet::visualizer::RoutingTableOsgVisualizer

Classes

class  DirectiveResolver
 
class  RouteVisualization
 

Parameters

bool displayRoutingTables = false
 
bool displayRoutesIndividually = false
 
bool displayLabels = false
 
NetworkNodeFilter destinationFilter
 
NetworkNodeFilter nodeFilter
 
cFigure::Color lineColor
 
cFigure::LineStyle lineStyle
 
double lineShift = NaN
 
const char * lineShiftMode = nullptr
 
double lineWidth = NaN
 
double lineContactSpacing = NaN
 
const char * lineContactMode = nullptr
 
StringFormat labelFormat
 
cFigure::Font labelFont
 
cFigure::Color labelColor
 
LineManagerlineManager = nullptr
 
std::map< std::tuple< Ipv4Address, int, int >, const RouteVisualization * > routeVisualizations
 
virtual void initialize (int stage) override
 
virtual void handleParameterChange (const char *name) override
 
virtual void preDelete (cComponent *root) override
 
virtual void subscribe ()
 
virtual void unsubscribe ()
 
virtual const RouteVisualizationcreateRouteVisualization (Ipv4Route *route, cModule *node, cModule *nextHop) const =0
 
virtual const RouteVisualizationgetRouteVisualization (Ipv4Route *route, int nodeModuleId, int nextHopModuleId)
 
virtual void addRouteVisualization (const RouteVisualization *routeVisualization)
 
virtual void removeRouteVisualization (const RouteVisualization *routeVisualization)
 
virtual std::vector< Ipv4AddressgetDestinations ()
 
virtual void addRouteVisualizations (IIpv4RoutingTable *routingTable)
 
virtual void removeRouteVisualizations (IIpv4RoutingTable *routingTable)
 
virtual void removeAllRouteVisualizations ()
 
virtual void updateRouteVisualizations (IIpv4RoutingTable *routingTable)
 
virtual void updateAllRouteVisualizations ()
 
virtual std::string getRouteVisualizationText (const Ipv4Route *route) const
 
virtual void refreshRouteVisualization (const RouteVisualization *routeVisualization) const =0
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *obj, cObject *details) override
 

Additional Inherited Members

- Protected Member Functions inherited from inet::visualizer::VisualizerBase
virtual int numInitStages () const override
 
virtual Coord getPosition (const cModule *networkNode) const
 
virtual Coord getContactPosition (const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
 
virtual Quaternion getOrientation (const cModule *networkNode) const
 
virtual void mapChunks (const Ptr< const Chunk > &chunk, const std::function< void(const Ptr< const Chunk > &, int)> &thunk) const
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Member Function Documentation

◆ addRouteVisualization()

void inet::visualizer::RoutingTableVisualizerBase::addRouteVisualization ( const RouteVisualization routeVisualization)
protectedvirtual

Reimplemented in inet::visualizer::RoutingTableCanvasVisualizer, and inet::visualizer::RoutingTableOsgVisualizer.

152 {
153  Ipv4Address routerId;
154  if (routeVisualization->route != nullptr)
155  routerId = routeVisualization->route->getRoutingTable()->getRouterId();
156  auto key = std::make_tuple(routerId, routeVisualization->sourceModuleId, routeVisualization->destinationModuleId);
157  routeVisualizations[key] = routeVisualization;
158 }

Referenced by inet::visualizer::RoutingTableOsgVisualizer::addRouteVisualization(), inet::visualizer::RoutingTableCanvasVisualizer::addRouteVisualization(), and addRouteVisualizations().

◆ addRouteVisualizations()

void inet::visualizer::RoutingTableVisualizerBase::addRouteVisualizations ( IIpv4RoutingTable routingTable)
protectedvirtual
189 {
190  L3AddressResolver addressResolver;
191  auto node = getContainingNode(check_and_cast<cModule *>(routingTable));
192  for (auto destination : getDestinations()) {
193  if (!routingTable->isLocalAddress(destination)) {
194  auto route = routingTable->findBestMatchingRoute(destination);
195  if (route != nullptr) {
196  auto gateway = route->getGateway();
197  auto nextHop = addressResolver.findHostWithAddress(gateway.isUnspecified() ? destination : gateway);
198  if (nextHop != nullptr) {
199  auto routeVisualization = getRouteVisualization(displayRoutesIndividually ? route : nullptr, node->getId(), nextHop->getId());
200  if (routeVisualization == nullptr)
202  else {
203  routeVisualization->numRoutes++;
204  refreshRouteVisualization(routeVisualization);
205  }
206  }
207  }
208  }
209  }
210 }

Referenced by updateAllRouteVisualizations(), and updateRouteVisualizations().

◆ createRouteVisualization()

virtual const RouteVisualization* inet::visualizer::RoutingTableVisualizerBase::createRouteVisualization ( Ipv4Route route,
cModule *  node,
cModule *  nextHop 
) const
protectedpure virtual

◆ getDestinations()

std::vector< Ipv4Address > inet::visualizer::RoutingTableVisualizerBase::getDestinations ( )
protectedvirtual
170 {
171  L3AddressResolver addressResolver;
172  std::vector<Ipv4Address> destinations;
173  for (cModule::SubmoduleIterator it(visualizationSubjectModule); !it.end(); it++) {
174  auto networkNode = *it;
175  if (isNetworkNode(networkNode) && destinationFilter.matches(networkNode)) {
176  auto interfaceTable = addressResolver.findInterfaceTableOf(networkNode);
177  for (int i = 0; i < interfaceTable->getNumInterfaces(); i++) {
178  auto interface = interfaceTable->getInterface(i);
179  auto address = interface->getIpv4Address();
180  if (!address.isUnspecified())
181  destinations.push_back(address);
182  }
183  }
184  }
185  return destinations;
186 }

Referenced by addRouteVisualizations().

◆ getRouteVisualization()

const RoutingTableVisualizerBase::RouteVisualization * inet::visualizer::RoutingTableVisualizerBase::getRouteVisualization ( Ipv4Route route,
int  nodeModuleId,
int  nextHopModuleId 
)
protectedvirtual
142 {
143  Ipv4Address routerId;
144  if (route != nullptr)
145  routerId = route->getRoutingTable()->getRouterId();
146  auto key = std::make_tuple(routerId, nodeModuleId, nextHopModuleId);
147  auto it = routeVisualizations.find(key);
148  return it == routeVisualizations.end() ? nullptr : it->second;
149 }

Referenced by addRouteVisualizations().

◆ getRouteVisualizationText()

std::string inet::visualizer::RoutingTableVisualizerBase::getRouteVisualizationText ( const Ipv4Route route) const
protectedvirtual
257 {
258  DirectiveResolver directiveResolver(route);
259  return labelFormat.formatString(&directiveResolver);
260 }

Referenced by inet::visualizer::RoutingTableCanvasVisualizer::refreshRouteVisualization().

◆ handleParameterChange()

void inet::visualizer::RoutingTableVisualizerBase::handleParameterChange ( const char *  name)
overrideprotectedvirtual
92 {
93  if (!hasGUI()) return;
94  if (name != nullptr) {
95  if (!strcmp(name, "destinationFilter"))
96  destinationFilter.setPattern(par("destinationFilter"));
97  else if (!strcmp(name, "nodeFilter"))
98  nodeFilter.setPattern(par("nodeFilter"));
99  else if (!strcmp(name, "labelFormat"))
100  labelFormat.parseFormat(par("labelFormat"));
102  }
103 }

◆ initialize()

void inet::visualizer::RoutingTableVisualizerBase::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::visualizer::VisualizerBase.

Reimplemented in inet::visualizer::RoutingTableCanvasVisualizer, and inet::visualizer::RoutingTableOsgVisualizer.

67 {
69  if (!hasGUI()) return;
70  if (stage == INITSTAGE_LOCAL) {
71  displayRoutingTables = par("displayRoutingTables");
72  displayRoutesIndividually = par("displayRoutesIndividually");
73  displayLabels = par("displayLabels");
74  destinationFilter.setPattern(par("destinationFilter"));
75  nodeFilter.setPattern(par("nodeFilter"));
76  lineColor = cFigure::Color(par("lineColor"));
77  lineStyle = cFigure::parseLineStyle(par("lineStyle"));
78  lineWidth = par("lineWidth");
79  lineShift = par("lineShift");
80  lineShiftMode = par("lineShiftMode");
81  lineContactSpacing = par("lineContactSpacing");
82  lineContactMode = par("lineContactMode");
83  labelFormat.parseFormat(par("labelFormat"));
84  labelFont = cFigure::parseFont(par("labelFont"));
85  labelColor = cFigure::Color(par("labelColor"));
87  subscribe();
88  }
89 }

Referenced by inet::visualizer::RoutingTableOsgVisualizer::initialize(), and inet::visualizer::RoutingTableCanvasVisualizer::initialize().

◆ preDelete()

void inet::visualizer::RoutingTableVisualizerBase::preDelete ( cComponent *  root)
overrideprotectedvirtual
59 {
61  unsubscribe();
63  }
64 }

◆ receiveSignal()

void inet::visualizer::RoutingTableVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
cObject *  obj,
cObject *  details 
)
overridevirtual
126 {
127  Enter_Method("%s", cComponent::getSignalName(signal));
128 
129  if (signal == routeAddedSignal || signal == routeDeletedSignal || signal == routeChangedSignal) {
130  auto routingTable = check_and_cast<IIpv4RoutingTable *>(source);
131  auto networkNode = getContainingNode(check_and_cast<cModule *>(source));
132  if (nodeFilter.matches(networkNode))
133  updateRouteVisualizations(routingTable);
134  }
135  else if (signal == interfaceIpv4ConfigChangedSignal)
137  else
138  throw cRuntimeError("Unknown signal");
139 }

◆ refreshRouteVisualization()

virtual void inet::visualizer::RoutingTableVisualizerBase::refreshRouteVisualization ( const RouteVisualization routeVisualization) const
protectedpure virtual

◆ removeAllRouteVisualizations()

void inet::visualizer::RoutingTableVisualizerBase::removeAllRouteVisualizations ( )
protectedvirtual
226 {
227  std::vector<const RouteVisualization *> removedRouteVisualizations;
228  for (auto it : routeVisualizations)
229  removedRouteVisualizations.push_back(it.second);
230  for (auto it : removedRouteVisualizations) {
232  delete it;
233  }
234 }

Referenced by preDelete(), and updateAllRouteVisualizations().

◆ removeRouteVisualization()

void inet::visualizer::RoutingTableVisualizerBase::removeRouteVisualization ( const RouteVisualization routeVisualization)
protectedvirtual

Reimplemented in inet::visualizer::RoutingTableCanvasVisualizer, and inet::visualizer::RoutingTableOsgVisualizer.

161 {
162  Ipv4Address routerId;
163  if (routeVisualization->route != nullptr)
164  routerId = routeVisualization->route->getRoutingTable()->getRouterId();
165  auto key = std::make_tuple(routerId, routeVisualization->sourceModuleId, routeVisualization->destinationModuleId);
166  routeVisualizations.erase(routeVisualizations.find(key));
167 }

Referenced by removeAllRouteVisualizations(), inet::visualizer::RoutingTableOsgVisualizer::removeRouteVisualization(), inet::visualizer::RoutingTableCanvasVisualizer::removeRouteVisualization(), and removeRouteVisualizations().

◆ removeRouteVisualizations()

void inet::visualizer::RoutingTableVisualizerBase::removeRouteVisualizations ( IIpv4RoutingTable routingTable)
protectedvirtual
213 {
214  auto networkNode = getContainingNode(check_and_cast<cModule *>(routingTable));
215  std::vector<const RouteVisualization *> removedRouteVisualizations;
216  for (auto it : routeVisualizations)
217  if (std::get<1>(it.first) == networkNode->getId() && it.second)
218  removedRouteVisualizations.push_back(it.second);
219  for (auto it : removedRouteVisualizations) {
221  delete it;
222  }
223 }

Referenced by updateRouteVisualizations().

◆ subscribe()

void inet::visualizer::RoutingTableVisualizerBase::subscribe ( )
protectedvirtual

Referenced by initialize().

◆ unsubscribe()

void inet::visualizer::RoutingTableVisualizerBase::unsubscribe ( )
protectedvirtual
114 {
115  // NOTE: lookup the module again because it may have been deleted first
116  auto visualizationSubjectModule = findModuleFromPar<cModule>(par("visualizationSubjectModule"), this);
117  if (visualizationSubjectModule != nullptr) {
118  visualizationSubjectModule->unsubscribe(routeAddedSignal, this);
122  }
123 }

Referenced by preDelete().

◆ updateAllRouteVisualizations()

void inet::visualizer::RoutingTableVisualizerBase::updateAllRouteVisualizations ( )
protectedvirtual
243 {
245  for (cModule::SubmoduleIterator it(visualizationSubjectModule); !it.end(); it++) {
246  auto networkNode = *it;
247  if (isNetworkNode(networkNode) && nodeFilter.matches(networkNode)) {
248  L3AddressResolver addressResolver;
249  auto routingTable = addressResolver.findIpv4RoutingTableOf(networkNode);
250  if (routingTable != nullptr)
251  addRouteVisualizations(routingTable);
252  }
253  }
254 }

Referenced by handleParameterChange(), and receiveSignal().

◆ updateRouteVisualizations()

void inet::visualizer::RoutingTableVisualizerBase::updateRouteVisualizations ( IIpv4RoutingTable routingTable)
protectedvirtual
237 {
238  removeRouteVisualizations(routingTable);
239  addRouteVisualizations(routingTable);
240 }

Referenced by receiveSignal().

Member Data Documentation

◆ destinationFilter

NetworkNodeFilter inet::visualizer::RoutingTableVisualizerBase::destinationFilter
protected

◆ displayLabels

bool inet::visualizer::RoutingTableVisualizerBase::displayLabels = false
protected

◆ displayRoutesIndividually

bool inet::visualizer::RoutingTableVisualizerBase::displayRoutesIndividually = false
protected

◆ displayRoutingTables

bool inet::visualizer::RoutingTableVisualizerBase::displayRoutingTables = false
protected

Referenced by initialize(), and preDelete().

◆ labelColor

cFigure::Color inet::visualizer::RoutingTableVisualizerBase::labelColor
protected

◆ labelFont

cFigure::Font inet::visualizer::RoutingTableVisualizerBase::labelFont
protected

◆ labelFormat

StringFormat inet::visualizer::RoutingTableVisualizerBase::labelFormat
protected

◆ lineColor

cFigure::Color inet::visualizer::RoutingTableVisualizerBase::lineColor
protected

◆ lineContactMode

const char* inet::visualizer::RoutingTableVisualizerBase::lineContactMode = nullptr
protected

◆ lineContactSpacing

double inet::visualizer::RoutingTableVisualizerBase::lineContactSpacing = NaN
protected

◆ lineManager

◆ lineShift

double inet::visualizer::RoutingTableVisualizerBase::lineShift = NaN
protected

◆ lineShiftMode

const char* inet::visualizer::RoutingTableVisualizerBase::lineShiftMode = nullptr
protected

◆ lineStyle

cFigure::LineStyle inet::visualizer::RoutingTableVisualizerBase::lineStyle
protected

◆ lineWidth

◆ nodeFilter

NetworkNodeFilter inet::visualizer::RoutingTableVisualizerBase::nodeFilter
protected

◆ routeVisualizations

std::map<std::tuple<Ipv4Address, int, int>, const RouteVisualization *> inet::visualizer::RoutingTableVisualizerBase::routeVisualizations
protected

The documentation for this class was generated from the following files:
inet::visualizer::RoutingTableVisualizerBase::labelFont
cFigure::Font labelFont
Definition: RoutingTableVisualizerBase.h:63
inet::visualizer::RoutingTableVisualizerBase::lineWidth
double lineWidth
Definition: RoutingTableVisualizerBase.h:59
inet::StringFormat::parseFormat
void parseFormat(const char *format)
Definition: StringFormat.cc:12
inet::visualizer::RoutingTableVisualizerBase::destinationFilter
NetworkNodeFilter destinationFilter
Definition: RoutingTableVisualizerBase.h:53
inet::visualizer::RoutingTableVisualizerBase::addRouteVisualizations
virtual void addRouteVisualizations(IIpv4RoutingTable *routingTable)
Definition: RoutingTableVisualizerBase.cc:188
inet::getContainingNode
cModule * getContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:40
inet::visualizer::RoutingTableVisualizerBase::displayLabels
bool displayLabels
Definition: RoutingTableVisualizerBase.h:52
inet::visualizer::RoutingTableVisualizerBase::nodeFilter
NetworkNodeFilter nodeFilter
Definition: RoutingTableVisualizerBase.h:54
inet::routeChangedSignal
simsignal_t routeChangedSignal
Definition: Simsignals.cc:43
inet::visualizer::RoutingTableVisualizerBase::lineContactSpacing
double lineContactSpacing
Definition: RoutingTableVisualizerBase.h:60
inet::visualizer::RoutingTableVisualizerBase::lineShiftMode
const char * lineShiftMode
Definition: RoutingTableVisualizerBase.h:58
inet::visualizer::RoutingTableVisualizerBase::displayRoutingTables
bool displayRoutingTables
Definition: RoutingTableVisualizerBase.h:50
inet::visualizer::NetworkNodeFilter::matches
bool matches(const cModule *module) const
Definition: NetworkNodeFilter.cc:19
inet::visualizer::RoutingTableVisualizerBase::lineContactMode
const char * lineContactMode
Definition: RoutingTableVisualizerBase.h:61
inet::visualizer::RoutingTableVisualizerBase::lineShift
double lineShift
Definition: RoutingTableVisualizerBase.h:57
inet::visualizer::RoutingTableVisualizerBase::getDestinations
virtual std::vector< Ipv4Address > getDestinations()
Definition: RoutingTableVisualizerBase.cc:169
inet::visualizer::RoutingTableVisualizerBase::createRouteVisualization
virtual const RouteVisualization * createRouteVisualization(Ipv4Route *route, cModule *node, cModule *nextHop) const =0
inet::visualizer::RoutingTableVisualizerBase::removeRouteVisualization
virtual void removeRouteVisualization(const RouteVisualization *routeVisualization)
Definition: RoutingTableVisualizerBase.cc:160
inet::visualizer::RoutingTableVisualizerBase::refreshRouteVisualization
virtual void refreshRouteVisualization(const RouteVisualization *routeVisualization) const =0
inet::visualizer::RoutingTableVisualizerBase::routeVisualizations
std::map< std::tuple< Ipv4Address, int, int >, const RouteVisualization * > routeVisualizations
Definition: RoutingTableVisualizerBase.h:70
inet::visualizer::NetworkNodeFilter::setPattern
void setPattern(const char *pattern)
Definition: NetworkNodeFilter.cc:14
inet::visualizer::RoutingTableVisualizerBase::unsubscribe
virtual void unsubscribe()
Definition: RoutingTableVisualizerBase.cc:113
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::isNetworkNode
bool isNetworkNode(const cModule *mod)
Returns true if the given module is a network node, i.e.
Definition: ModuleAccess.cc:18
inet::routeAddedSignal
simsignal_t routeAddedSignal
Definition: Simsignals.cc:41
inet::visualizer::RoutingTableVisualizerBase::getRouteVisualization
virtual const RouteVisualization * getRouteVisualization(Ipv4Route *route, int nodeModuleId, int nextHopModuleId)
Definition: RoutingTableVisualizerBase.cc:141
inet::visualizer::RoutingTableVisualizerBase::lineColor
cFigure::Color lineColor
Definition: RoutingTableVisualizerBase.h:55
inet::visualizer::RoutingTableVisualizerBase::displayRoutesIndividually
bool displayRoutesIndividually
Definition: RoutingTableVisualizerBase.h:51
inet::StringFormat::formatString
const char * formatString(IDirectiveResolver *resolver) const
Definition: StringFormat.cc:17
inet::visualizer::RoutingTableVisualizerBase::subscribe
virtual void subscribe()
Definition: RoutingTableVisualizerBase.cc:105
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::routeDeletedSignal
simsignal_t routeDeletedSignal
Definition: Simsignals.cc:42
inet::interfaceIpv4ConfigChangedSignal
simsignal_t interfaceIpv4ConfigChangedSignal
Definition: Simsignals.cc:35
inet::DiffservUtil::Color
Color
Definition: DiffservUtil.h:17
inet::visualizer::VisualizerBase::visualizationSubjectModule
cModule * visualizationSubjectModule
Definition: VisualizerBase.h:26
inet::visualizer::RoutingTableVisualizerBase::removeAllRouteVisualizations
virtual void removeAllRouteVisualizations()
Definition: RoutingTableVisualizerBase.cc:225
inet::visualizer::RoutingTableVisualizerBase::removeRouteVisualizations
virtual void removeRouteVisualizations(IIpv4RoutingTable *routingTable)
Definition: RoutingTableVisualizerBase.cc:212
inet::visualizer::RoutingTableVisualizerBase::lineStyle
cFigure::LineStyle lineStyle
Definition: RoutingTableVisualizerBase.h:56
inet::visualizer::RoutingTableVisualizerBase::labelFormat
StringFormat labelFormat
Definition: RoutingTableVisualizerBase.h:62
inet::visualizer::RoutingTableVisualizerBase::updateAllRouteVisualizations
virtual void updateAllRouteVisualizations()
Definition: RoutingTableVisualizerBase.cc:242
inet::visualizer::RoutingTableVisualizerBase::updateRouteVisualizations
virtual void updateRouteVisualizations(IIpv4RoutingTable *routingTable)
Definition: RoutingTableVisualizerBase.cc:236
inet::visualizer::RoutingTableVisualizerBase::labelColor
cFigure::Color labelColor
Definition: RoutingTableVisualizerBase.h:64
inet::visualizer::RoutingTableVisualizerBase::addRouteVisualization
virtual void addRouteVisualization(const RouteVisualization *routeVisualization)
Definition: RoutingTableVisualizerBase.cc:151
inet::visualizer::VisualizerBase::initialize
virtual void initialize(int stage) override
Definition: VisualizerBase.cc:23