diff --git a/daisi/src/natter-ns3/natter_application.cpp b/daisi/src/natter-ns3/natter_application.cpp index f93b14f1..cba09e31 100644 --- a/daisi/src/natter-ns3/natter_application.cpp +++ b/daisi/src/natter-ns3/natter_application.cpp @@ -67,13 +67,13 @@ void NatterApplication::logSelfToDB(std::pair level_number) number); } -void NatterApplication::addPeer(const std::string &topic, solanet::UUID uuid, const std::string &ip, - uint16_t port, uint32_t level, uint32_t number, uint32_t fanout) { +void NatterApplication::addPeer(const std::string &topic, + const natter::minhcast::NatterMinhcast::NodeInfo &info) { DAISI_CHECK(natter_minhcast_, "natter not initialized"); DAISI_CHECK(logger_, "Logger not initialized"); - natter_minhcast_->addPeer(topic, {{level, number, fanout}, {ip, port}, uuid}); - logger_->logNs3PeerConnection(Simulator::Now().GetMicroSeconds(), true, getUUID(), uuid); + natter_minhcast_->addPeer(topic, info); + logger_->logNs3PeerConnection(Simulator::Now().GetMicroSeconds(), true, getUUID(), info.uuid); } void NatterApplication::removePeer(const std::string & /*topic*/, const std::string & /*uuid*/) { @@ -94,10 +94,11 @@ void NatterApplication::publish(const std::string &topic, const std::string &msg logger_->logNatterEvent(2, res); } -void NatterApplication::subscribeTopic(const std::string &topic, uint32_t own_level, - uint32_t own_number, uint32_t own_fanout) { +void NatterApplication::subscribeTopic(const std::string &topic, + const natter::minhcast::NatterMinhcast::NodeInfo &info) { DAISI_CHECK(natter_minhcast_, "natter not initialized"); - natter_minhcast_->subscribeTopic(topic, {{own_level, own_number, own_fanout}}); + + natter_minhcast_->subscribeTopic(topic, info); } void NatterApplication::unsubscribeTopic(const std::string &topic) { diff --git a/daisi/src/natter-ns3/natter_application.h b/daisi/src/natter-ns3/natter_application.h index 98a17a30..288002e8 100644 --- a/daisi/src/natter-ns3/natter_application.h +++ b/daisi/src/natter-ns3/natter_application.h @@ -44,15 +44,14 @@ class NatterApplication : public ns3::Application { std::pair getLevelNumber() const { return level_number_; } // Natter functions wrapper - void addPeer(const std::string &topic, solanet::UUID uuid, const std::string &ip, uint16_t port, - uint32_t level, uint32_t number, uint32_t fanout); + void addPeer(const std::string &topic, const natter::minhcast::NatterMinhcast::NodeInfo &info); void removePeer(const std::string &topic, const std::string &uuid); solanet::UUID getUUID() const; void publish(const std::string &topic, const std::string &msg); - void subscribeTopic(const std::string &topic, uint32_t own_level, uint32_t own_number, - uint32_t own_fanout); + void subscribeTopic(const std::string &topic, + const natter::minhcast::NatterMinhcast::NodeInfo &info); void unsubscribeTopic(const std::string &topic); natter::NetworkInfoIPv4 getNetworkInfo() const; diff --git a/daisi/src/natter-ns3/natter_manager.cpp b/daisi/src/natter-ns3/natter_manager.cpp index 86ccc673..c96a09e6 100644 --- a/daisi/src/natter-ns3/natter_manager.cpp +++ b/daisi/src/natter-ns3/natter_manager.cpp @@ -59,8 +59,12 @@ NatterManager::NodeInfo NatterManager::getNodeInfo(uint32_t index) { } void NatterManager::addPeer(uint32_t other_id, const NodeInfo &info) { - getApplication(other_id)->addPeer(TOPIC, info.own_uuid, info.ip, info.port, info.own_level, - info.own_number, info.fanout); + natter::minhcast::NatterMinhcast::NodeInfo natter_info; + natter_info.position = {info.own_level, info.own_number, info.fanout}; + natter_info.network_info = {info.ip, info.port}; + natter_info.uuid = info.own_uuid; + + getApplication(other_id)->addPeer(TOPIC, natter_info); } void NatterManager::connectParent(const NodeInfo &info) { @@ -149,9 +153,12 @@ void NatterManager::connectRoutingTableNeighborChildren(const NodeInfo &info, const ns3::Ptr app_child = getApplication(child); const natter::NetworkInfoIPv4 child_net_info = app_child->getNetworkInfo(); - getApplication(neighbor)->addPeer(TOPIC, app_child->getUUID(), child_net_info.ip, - child_net_info.port, child_level, child_number, - info.fanout); + natter::minhcast::NatterMinhcast::NodeInfo natter_info; + natter_info.position = {child_level, child_number, info.fanout}; + natter_info.network_info = {child_net_info.ip, child_net_info.port}; + natter_info.uuid = app_child->getUUID(); + + getApplication(neighbor)->addPeer(TOPIC, natter_info); } } } @@ -163,7 +170,12 @@ void NatterManager::joinMinhton() { for (uint32_t i = 0; i < getNumberOfNodes(); i++) { NodeInfo info = getNodeInfo(i); - info.app->subscribeTopic(TOPIC, info.own_level, info.own_number, info.fanout); + // Only level, number and fanout of own peer is required. + // Other information of the NodeInfo struct only required for adding other peers. + natter::minhcast::NatterMinhcast::NodeInfo natter_info; + natter_info.position = {info.own_level, info.own_number, info.fanout}; + + info.app->subscribeTopic(TOPIC, natter_info); // Log all peers to database info.app->setLevelNumber({info.own_level, info.own_number});