168 for (
int i = 0; i < topo.getNumNodes(); i++) {
169 cTopology::Node *destNode = topo.getNode(i);
180 Ipv6RoutingTable *destRt = L3AddressResolver().findIpv6RoutingTableOf(destNode->getModule());
181 IInterfaceTable *destIft = L3AddressResolver().interfaceTableOf(destNode->getModule());
188 if (!destRt->par(
"isRouter"))
192 std::vector<const Ipv6InterfaceData::AdvPrefix *> destPrefixes;
193 for (
int x = 0; x < destIft->getNumInterfaces(); x++) {
194 NetworkInterface *destIf = destIft->getInterface(x);
196 if (destIf->isLoopback())
199 auto ipv6Data = destIf->getProtocolData<Ipv6InterfaceData>();
200 for (
int y = 0; y < ipv6Data->getNumAdvPrefixes(); y++)
201 if (ipv6Data->getAdvPrefix(y).prefix.isGlobal())
202 destPrefixes.push_back(&ipv6Data->getAdvPrefix(y));
205 std::string destModName = destNode->getModule()->getFullName();
208 topo.calculateUnweightedSingleShortestPathsTo(destNode);
211 for (
int j = 0; j < topo.getNumNodes(); j++) {
217 cTopology::Node *atNode = topo.getNode(j);
218 if (atNode->getNumPaths() == 0)
221 Ipv6RoutingTable *rt = L3AddressResolver().findIpv6RoutingTableOf(atNode->getModule());
222 IInterfaceTable *ift = L3AddressResolver().interfaceTableOf(atNode->getModule());
229 if (!rt->par(
"isRouter"))
233 cGate *localGate = atNode->getPath(0)->getLocalGate();
234 NetworkInterface *localIf =
CHK(ift->findInterfaceByNodeOutputGateId(localGate->getId()));
239 cTopology::Node *prevNode = atNode;
242 while (!
isIPNode(prevNode->getPath(0)->getRemoteNode()))
243 prevNode = prevNode->getPath(0)->getRemoteNode();
246 cGate *remoteGate = prevNode->getPath(0)->getRemoteGate();
247 cModule *nextHop = remoteGate->getOwnerModule();
248 IInterfaceTable *nextHopIft = L3AddressResolver().interfaceTableOf(nextHop);
249 NetworkInterface *nextHopOnlinkIf =
CHK(nextHopIft->findInterfaceByNodeInputGateId(remoteGate->getId()));
252 Ipv6Address nextHopLinkLocalAddr = nextHopOnlinkIf->getProtocolData<Ipv6InterfaceData>()->getLinkLocalAddress();
256 for (
auto& destPrefixe : destPrefixes) {
257 rt->addStaticRoute(destPrefixe->prefix, destPrefixe->prefixLength,
258 localIf->getInterfaceId(), nextHopLinkLocalAddr);