Skip to content

Commit

Permalink
refactor(daisi): Pass arguments as MINHCAST NodeInfo
Browse files Browse the repository at this point in the history
This avoids having many parameters, many of them having
the same type and could be accidentially swapped.
  • Loading branch information
ltoenning committed Aug 30, 2023
1 parent 22ee0b8 commit 4177d35
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 17 deletions.
15 changes: 8 additions & 7 deletions daisi/src/natter-ns3/natter_application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,13 @@ void NatterApplication::logSelfToDB(std::pair<uint32_t, uint32_t> 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*/) {
Expand All @@ -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) {
Expand Down
7 changes: 3 additions & 4 deletions daisi/src/natter-ns3/natter_application.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,14 @@ class NatterApplication : public ns3::Application {
std::pair<uint32_t, uint32_t> 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;
Expand Down
24 changes: 18 additions & 6 deletions daisi/src/natter-ns3/natter_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -149,9 +153,12 @@ void NatterManager::connectRoutingTableNeighborChildren(const NodeInfo &info,
const ns3::Ptr<NatterApplication> 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);
}
}
}
Expand All @@ -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});
Expand Down

0 comments on commit 4177d35

Please sign in to comment.