54 "m=m,50,50,50,50;ls=magenta,3",
55 "m=m,50,50,50,50;ls=red,4",
56 "m=m,50,50,50,50;ls=orange,5",
57 "m=m,50,50,50,50;ls=green,6",
58 "m=m,50,50,50,50;ls=aquamarine,7",
59 "m=m,50,50,50,50;ls=cyan,8",
60 "m=m,50,50,50,50;ls=blue,9",
61 "m=m,50,50,50,50;ls=navy,10",
62 "m=m,50,50,50,50;ls=yellow,11"
74 numInconsistencies(0),
77 numTempPeerTimeouts(0),
78 numStructurePartitions(0),
79 numOwnMessagesReceived(0),
84 totalReceivedBytes(0),
86 totalHeartbeatBytes(0)
107 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.begin();
131 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i", 0,
"device/pc_vs");
132 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 0,
"block/circle_vs");
162 pimp = par(
"enhancedMode");
238 opp_error(
"The NICE Rendevouz Point is being churned out and the simulation cannot continue. "
239 "Please, check your config and make sure that the Chrun Generator's configuration is correct. "
240 "Specifically, the Rendevouz Point must not get churned out during the simulation.");
256 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 1,
"red");
302 getParentModule()->getParentModule()->getDisplayString().setTagArg
323 if (msg->isName(
"visualizationTimer")) {
329 else if (msg->isName(
"heartbeatTimer")) {
335 else if (msg->isName(
"maintenanceTimer")) {
342 else if (msg->isName(
"queryTimer")) {
355 else if (msg->isName(
"rpPollTimer")) {
372 if (dynamic_cast<NiceMessage*>(msg) != NULL) {
377 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(niceMsg->
getSrcNode());
597 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : Query()" << endl;
617 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : Query() finished." << endl;
627 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleNiceQuery()" << endl;
632 EV <<
"Layer " << layer <<
" >= max layer " <<
maxLayers <<
" ! Returning." << endl;
638 EV <<
" layer before: " << layer << endl;
665 EV <<
" I am RP." << endl;
672 EV <<
" I am not RP. Return." << endl;
690 EV <<
" layer after: " << layer << endl;
692 if (!
clusters[layer].getLeader().isUnspecified()) {
704 EV <<
" I am not leader of this cluster. return." << endl;
735 EV <<
" Response: " << i <<
" : " <<
clusters[layer].
get(i) << endl;
747 EV <<
" Sent response to: " << queryMsg->
getSrcNode() << endl;
750 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleNiceQuery() finished." << endl;
757 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NICE_CLUSTER_MERGE_REQUEST" << endl;
763 if (
clusters[layer].getLeader().isUnspecified()) {
765 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NO LEADER! BREAK. NICE_CLUSTER_MERGE_REQUEST finished" << endl;
779 if (oldLeader.isUnspecified() || oldLeader !=
thisNode) {
791 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(mergeMsg->
getMembers(i));
826 getParentModule()->getParentModule()->getDisplayString().setTagArg
859 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NICE_CLUSTER_MERGE_REQUEST finished" << endl;
875 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(hbMsg->
getSrcNode());
883 it->second->set_last_HB_arrival(simTime().dbl());
885 if (it->second->get_backHB(hbMsg->
getSeqRspNo()) > 0) {
888 double oldDistance = it->second->get_distance();
891 double newDistance = (simTime().dbl() - it->second->get_backHB(hbMsg->
getSeqRspNo()) - hbMsg->
getHb_delay())/2.0;
893 if (oldDistance > 0) {
895 it->second->set_distance((0.1 * newDistance) + (0.9 * oldDistance));
900 it->second->set_distance(newDistance);
906 it->second->set_last_recv_HB(hbMsg->
getSeqNo());
925 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleHeartbeat() finished. " << endl;
931 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NICE_LEADERHEARTBEAT from " << lhbMsg->
getSrcNode() << endl;
936 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(lhbMsg->
getSrcNode());
940 it->second->set_last_HB_arrival(simTime().dbl());
942 if (it->second->get_backHB(lhbMsg->
getSeqRspNo()) > 0) {
945 it->second->set_distance((simTime().dbl() - it->second->get_backHB(lhbMsg->
getSeqRspNo()) - lhbMsg->
getHb_delay())/2);
949 it->second->set_last_recv_HB(lhbMsg->
getSeqNo());
973 EV <<
"Node is not part of this cluster (" << lhbMsg->
getLayer() <<
"), removing it..." << endl;
984 EV <<
"Leader collision...";
989 EV <<
"...making other leader." << endl;
997 for (TaSet::iterator itn =
clusters[hbLayer].begin(); itn !=
clusters[hbLayer].
end(); ++itn) {
1007 EV <<
"...remaining leader." << endl;
1015 EV <<
"Possible multiple leaders detected... sending remove to " <<
clusters[lhbMsg->
getLayer()].
getLeader() <<
" leader.\n";
1035 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(lhbMsg->
getMembers(i));
1112 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleNiceLeaderHeartbeat() finished. " << endl;
1121 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NICE_LEADERTRANSFER from " << transferMsg->
getSrcNode() <<
" for " << transferMsg->
getLayer() << endl;
1129 EV <<
"I am not already leader of this cluster layer." << endl;
1141 EV <<
"Adding: " << transferMsg->
getMembers(i) << endl;
1146 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(transferMsg->
getMembers(i));
1151 it->second->touch();
1183 it->second->touch();
1236 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 1,
clustercolors[i]);
1249 EV <<
"Adding: " << transferMsg->
getMembers(i) << endl;
1254 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(transferMsg->
getMembers(i));
1277 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleNiceLeaderTransfer() finished. " << endl;
1285 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleNiceJoinCluster()" << endl;
1290 std::cout <<
" From : " << joinMsg->
getSrcNode() <<
", Layer: " << layer << endl;
1292 if (!
clusters[layer].getLeader().isUnspecified()) {
1313 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(joinMsg->
getSrcNode());
1338 EV <<
"Leader unspecified. Ignoring request." << endl;
1343 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : handleNiceJoinCluster() finished." << endl;
1397 unsigned int hopCount = multicastMsg->
getHopCount();
1408 send(multicastMsg->decapsulate(),
"appOut");
1413 delete multicastMsg;
1462 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(msg->
getSrcNode());
1466 double distance = simTime().dbl() - it->second->getDES();
1468 it->second->set_distance(distance);
1469 it->second->touch();
1511 short layer = queryRspMsg->
getLayer();
1575 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NICE_REMOVE" << endl;
1579 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : received remove from self. Disregard.";
1587 if (!
clusters[layer].getLeader().isUnspecified()) {
1599 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : removing " << msg->
getSrcNode() <<
" from layer " << layer << endl;
1618 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : NICE_REMOVE finished." << endl;
1634 else if (layer == -1) {
1652 !
clusters[highest].getLeader().isUnspecified() &&
1674 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : JoinCluster()" << endl;
1686 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(leader);
1695 peerInfos.insert(std::make_pair(leader, pi));
1712 getParentModule()->getParentModule()->getDisplayString().setTagArg
1749 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : JoinCluster() finished." << endl;
1765 if (!
clusters[i].getLeader().isUnspecified()) {
1793 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[i].
get(j));
1831 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[i].
get(j));
1835 unsigned int seqNo = it->second->get_last_sent_HB();
1839 it->second->set_backHB(it->second->get_backHBPointer(), seqNo, simTime().dbl());
1840 it->second->set_last_sent_HB(seqNo);
1841 it->second->set_backHBPointer(!it->second->get_backHBPointer());
1843 copy->
setSeqRspNo(it->second->get_last_recv_HB());
1845 if (it->second->get_last_HB_arrival() > 0) {
1847 copy->
setHb_delay(simTime().dbl() - it->second->get_last_HB_arrival());
1901 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[i].
get(j));
1924 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[i].
get(j));
1928 unsigned int seqNo = it->second->get_last_sent_HB();
1932 it->second->set_backHB(it->second->get_backHBPointer(), seqNo, simTime().dbl());
1933 it->second->set_backHBPointer(!it->second->get_backHBPointer());
1934 it->second->set_last_sent_HB(seqNo);
1936 copy->
setSeqRspNo(it->second->get_last_recv_HB());
1938 copy->
setHb_delay(simTime().dbl() - it->second->get_last_HB_arrival());
1981 it->second->set_distance_estimation_start(simTime().dbl());
2024 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[layer].
get(j));
2040 if (
clusters[layer+1].getSize() > 0) {
2055 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(node);
2059 unsigned int seqNo = it->second->get_last_sent_HB();
2063 it->second->set_backHB(it->second->get_backHBPointer(), seqNo, simTime().dbl());
2064 it->second->set_last_sent_HB(seqNo);
2065 it->second->set_backHBPointer(!it->second->get_backHBPointer());
2069 msg->
setHb_delay(simTime().dbl() - it->second->get_last_HB_arrival());
2102 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[layer].
get(j));
2153 std::vector<TransportAddress> deadTempPeers;
2155 std::map<TransportAddress, simtime_t>::iterator itTempPeer;
2159 deadTempPeers.push_back(itTempPeer->first);
2163 std::vector<TransportAddress>::iterator itDead;
2164 for (itDead = deadTempPeers.begin(); itDead != deadTempPeers.end(); ++itDead) {
2170 std::vector<TransportAddress> deadPeers;
2172 std::map<TransportAddress, NicePeerInfo*>::iterator itPeer =
peerInfos.begin();
2176 if (itPeer->first !=
thisNode && simTime() > (itPeer->second->getActivity() + offset)) {
2179 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : PEER TIMED OUT! : " << itPeer->first << endl;
2180 EV <<
"Activity : " << itPeer->second->getActivity() << endl;
2185 deadPeers.push_back(itPeer->first);
2193 for (itDead = deadPeers.begin(); itDead != deadPeers.end(); ++itDead) {
2210 bool splitMade =
false;
2216 if (
clusters[i].getSize() > 3 *
k + 1 &&
2243 for (mergeLayer= 0; mergeLayer <= highestLeaderLayer && mergeLayer <
maxLayers - 1; ++mergeLayer) {
2245 if (
clusters[mergeLayer].getSize() <
k &&
clusters[mergeLayer].isLeaderConfirmed() &&
2246 clusters[mergeLayer + 1].isLeaderConfirmed()) {
2266 bool collisionDetected =
false;
2274 EV << simTime() <<
"leaderHeartbeats.size() > 3 : " <<
leaderHeartbeats.size() << endl;
2279 EV << simTime() <<
"predecessor : " << predecessor << endl;
2285 EV << simTime() <<
"simTime() < (predecessor + heartbeatInterval)" << endl;
2290 EV << simTime() <<
"(leaderHeartbeats.at(leaderHeartbeats.size()-2).first != hbMsg->getSrcNode())" << endl;
2297 EV << simTime() <<
"(leaderHeartbeats.at(leaderHeartbeats.size()-3).first == hbMsg->getSrcNode())" << endl;
2305 EV << simTime() <<
"(leaderHeartbeats.at(leaderHeartbeats.size()-4).first == leaderHeartbeats.at(leaderHeartbeats.size()-2).first" << endl;
2312 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : CONFLICTING LEADERS!" << endl;
2323 collisionDetected =
true;
2346 return collisionDetected;
2357 EV <<
"No RendevouzPoint! " << endl;
2362 bool leaderDied =
false;
2396 for (
int i = highestLayer + 1; i <
maxLayers; ++i) {
2398 EV <<
"Stale data for cluster " << i << endl;
2411 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : Look for better parent node in cluster : " << highestLayer + 1 <<
" ..."<< endl;
2414 std::map<TransportAddress, NicePeerInfo*>::iterator it;
2422 if (it !=
peerInfos.end() && it->second->get_distance() > 0) {
2426 double smallest = 10000.0;
2433 std::map<TransportAddress, NicePeerInfo*>::iterator it2 =
peerInfos.find(
clusters[highestLayer+1].
get(i));
2437 if ((it2->second->get_distance() < smallest) && (it2->second->get_distance() > 0)) {
2438 smallest = it2->second->get_distance();
2439 candidate = it2->first;
2448 std::set<TransportAddress> clusterset;
2462 if (minCompare < 0.005)
2465 if ((smallest < distance) && ((distance - smallest) > minCompare.dbl())) {
2469 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
": Change SuperCluster! to " << candidate.
getIp() << endl;
2470 EV <<
"Old distance (): " << it->second->get_distance() << endl;
2472 EV <<
"Compare distance: " << distance << endl;
2473 EV <<
"New distance: " << smallest << endl;
2502 bool allDistancesKnown =
true;
2505 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : Find better cluster leader in ..." << i << endl;
2508 for (
int j = 0; j <
clusters[i].
getSize() && allDistancesKnown; j++) {
2511 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(
clusters[i].
get(j));
2515 simtime_t
distance = it->second->get_distance();
2520 allDistancesKnown =
false;
2528 if (it->second->getDistanceTo(
clusters[i].
get(
k)) < 0) {
2529 allDistancesKnown =
false;
2539 allDistancesKnown =
false;
2545 if (allDistancesKnown) {
2548 EV <<
"Complete distance knowledge available." << endl;
2554 EV <<
"NEW LEADER laut " <<
thisNode.
getIp() <<
" --> " << new_leader.
getIp() << endl;
2556 std::set<TransportAddress> clusterset;
2560 clusterset.insert(
clusters[i].
get(m));
2572 if (minCompare < 0.005)
2575 if ((newDistance.dbl() < compareDistance.dbl()) && ((compareDistance.dbl() - newDistance.dbl()) > minCompare.dbl())) {
2594 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 0,
"block/circle_vs");
2601 EV <<
"MaxDistance " << new_leader.
getIp() <<
" : " <<
getMaxDistance(new_leader, clusterset) << endl;
2624 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : ClusterSplit in Layer " << layer << endl;
2630 std::vector<TransportAddress> vec1;
2631 std::vector<TransportAddress> vec2;
2632 std::vector<TransportAddress> cl1;
2633 std::vector<TransportAddress> cl2;
2634 TaSet cl1set, cl2set;
2637 simtime_t min_delay = 999;
2639 for (
int i=0; i<cluster.
getSize(); i++) {
2645 vec1.push_back(cluster.
get(i));
2649 if (i < cluster.
getSize()/2) {
2650 vec2.push_back(cluster.
get(i));
2656 int combinations = 0;
2658 TaSet::iterator sit;
2672 std::vector<TransportAddress> vec3;
2675 std::set_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), inserter(vec3, vec3.begin()));
2677 simtime_t min_q1_delay = 999;
2678 simtime_t min_q2_delay = 999;
2679 simtime_t max_delay = 0;
2685 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(q1_center);
2689 min_q1_delay = it->second->get_distance();
2706 min_q2_delay = it->second->get_distance();
2715 max_delay = std::max(min_q1_delay, min_q2_delay);
2717 if (min_delay == 0) min_delay = max_delay;
2721 min_delay = max_delay;
2724 cl1_center = q1_center;
2725 cl2_center = q2_center;
2728 }
while (
next_combination(vec1.begin(), vec1.end(), vec2.begin(), vec2.end()));
2731 cl1set.insert(cl1.begin(), cl1.end());
2732 cl2set.insert(cl2.begin(), cl2.end());
2739 for (
int i=0; i<cluster.
getSize(); i++) {
2740 if (i < cluster.
getSize()/2) {
2741 cl1set.insert(cluster.
get(i));
2744 cl2set.insert(cluster.
get(i));
2777 scLeader = cl1_center;
2779 opp_error(
"Something went wrong in Nice::ClusterSplit and the RendevouzPoint is trying to give up leadership. This is a bug in OverSim's implementation of Nice. Please fix it, or file a bug.");
2784 LeaderTransfer(layer, cl1_center, cl1set, scLeader, superCluster);
2785 LeaderTransfer(layer, cl2_center, cl2set, scLeader, superCluster);
2788 for (TaSet::iterator itn =
clusters[layer + 1].begin(); itn !=
clusters[layer + 1].
end(); ++itn) {
2794 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 0,
"block/circle_vs");
2801 if (
clusters[layer + 1].getSize() == 0) {
2834 TaSet::iterator cit = cl1set.begin();
2835 while (cit != cl1set.end()) {
2845 TaSet::iterator cit = cl2set.begin();
2846 while (cit != cl2set.end()) {
2873 simtime_t min_delay = 999;
2883 std::map<TransportAddress, NicePeerInfo*>::iterator it =
peerInfos.find(node);
2886 simtime_t delay = it->second->get_distance();
2888 if ((delay > 0) && (delay < min_delay)) {
2919 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 1,
clustercolors[i]);
2939 ASSERT(!
clusters[layer+1].getLeader().isUnspecified());
2961 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 0,
"block/circle_vs");
2973 return findCenter(cluster.begin(), cluster.end(), allowRandom);
2980 std::pair<TransportAddress, simtime_t>
Nice::findCenter(std::vector<TransportAddress> cluster,
bool allowRandom)
2982 return findCenter(cluster.begin(), cluster.end(), allowRandom);
2997 template <
class ConstIter>
2998 std::pair<TransportAddress, simtime_t>
Nice::findCenter(ConstIter begin, ConstIter end,
bool allowRandom)
3002 simtime_t min_delay = 1000;
3004 for (ConstIter it = begin; it != end; ++it) {
3008 if ((delay > 0) && (delay < min_delay)) {
3022 return std::make_pair(center, min_delay);
3030 template <
class ConstIter>
3033 simtime_t maxDelay = 0;
3034 simtime_t delay = 0;
3038 for (ConstIter it = neighborsBegin; it != neighborsEnd; ++it) {
3040 std::map<TransportAddress, NicePeerInfo*>::iterator itInfo =
peerInfos.find(*it);
3044 delay = itInfo->second->get_distance();
3045 maxDelay = std::max(delay, maxDelay);
3054 std::map<TransportAddress, NicePeerInfo*>::iterator itInfo =
peerInfos.find(member);
3058 for (ConstIter it = neighborsBegin; it != neighborsEnd; ++it) {
3061 delay = itInfo->second->getDistanceTo(*it);
3063 maxDelay = std::max(delay, maxDelay);
3077 return getMaxDistance(member, neighbors.begin(), neighbors.end());
3085 simtime_t meanDelay = 0;
3086 simtime_t delay = 0;
3087 unsigned int number = 0;
3089 std::set<TransportAddress>::iterator it = neighbors.begin();
3091 while (it != neighbors.end()) {
3095 std::map<TransportAddress, NicePeerInfo*>::iterator it2 =
peerInfos.find(*it);
3099 delay = it2->second->get_distance();
3119 return meanDelay/number;
3146 TaSet::iterator it = cluster.begin();
3148 while (it != cluster.end()) {
3158 it = superCluster.begin();
3160 while (it != superCluster.end()) {
3173 ASSERT(
clusters[layer].contains(leader));
3176 opp_error(
"The RendevouzPoint is handing off leadership and the simulation cannot continue. This is a bug in the Nice implementation in OverSim, please check the backtrace and fix it or submit a bug report.");
3193 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : Remove()" << endl;
3196 ASSERT(layer <= highestLayer);
3215 getParentModule()->getParentModule()->getDisplayString().setTagArg
3225 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : Remove() finished." << endl;
3236 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : gracefulLeave()" << endl;
3240 ASSERT(layer >= bottomLayer);
3243 opp_error(
"The RendevouzPoint is trying to leave a layer and the simulation cannot continue. This is a bug in the Nice implementation in OverSim, please check the backtrace and fix it or submit a bug report.");
3248 EV <<
"removing " <<
thisNode.
getIp() <<
" from " << layer << endl;
3249 if (!
clusters[layer].getLeader().isUnspecified()) {
3257 EV <<
"REPAIR: " << layer << endl;
3259 for (TaSet::const_iterator itNode =
clusters[layer].begin(); itNode !=
clusters[layer].
end(); ++itNode) {
3261 EV <<
"rest: " << itNode->getIp() << endl;
3267 EV <<
"remove from: " << layer << endl;
3270 if (
clusters[layer].getSize() > 0) {
3273 EV <<
"NEW LEADER (GL): " << layer <<
" --> " << new_sc_center.
getIp() << endl;
3279 EV <<
"UNSPECIFIED! instead choose: " << new_sc_center.
getIp() << endl;
3291 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : gracefulLeave() finished." << endl;
3305 <<
" Anycast message for group " << anycastMsg->getGroupId() <<
"\n"
3306 <<
" ignored: Not implemented yet!"
3309 else if (
ALMCreateMessage* createMsg = dynamic_cast<ALMCreateMessage*>(msg) ) {
3312 <<
" Create message for group " << createMsg->getGroupId() <<
"\n"
3313 <<
" ignored: Not implemented yet!"
3316 else if (
ALMDeleteMessage* deleteMsg = dynamic_cast<ALMDeleteMessage*>(msg) ) {
3319 <<
" Delete message for group " << deleteMsg->getGroupId() <<
"\n"
3320 <<
" ignored: Not implemented yet!"
3323 else if (
ALMLeaveMessage* leaveMsg = dynamic_cast<ALMLeaveMessage*>(msg) ) {
3326 <<
" Leave message for group " << leaveMsg->getGroupId() <<
"\n"
3327 <<
" ignored: Not implemented yet!"
3340 niceMsg->encapsulate(multicastMsg);
3349 <<
" Subscribe message for group " << subscribeMsg->getGroupId() <<
"\n"
3350 <<
" ignored: Not implemented yet!"
3370 if ( appMsg->
getLayer() != layer ) {
3398 std::map<TransportAddress, simtime_t>::iterator it =
tempPeers.begin();
3424 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : updateVisualization" << endl;
3427 getParentModule()->getParentModule()
3428 ->getDisplayString().setTagArg(
"i2", 0,
"block/circle_vs");
3432 getParentModule()->getParentModule()->getDisplayString().setTagArg(
"i2", 0,
"block/star_vs");
3440 getParentModule()->getParentModule()
3446 if (!(
clusters[i].getLeader().isUnspecified())) {
3471 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : pollRP()" << endl;
3487 EV << simTime() <<
" : " <<
thisNode.
getIp() <<
" : pollRP() finished." << endl;