A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
directly store the ns3Node, don't rely on a num ID to find it later on
[simgrid.git]
/
src
/
surf
/
network_ns3.cpp
diff --git
a/src/surf/network_ns3.cpp
b/src/surf/network_ns3.cpp
index
7c30095
..
8cd88b5
100644
(file)
--- a/
src/surf/network_ns3.cpp
+++ b/
src/surf/network_ns3.cpp
@@
-8,6
+8,7
@@
#include "xbt/config.hpp"
#include "xbt/string.hpp"
#include "xbt/config.hpp"
#include "xbt/string.hpp"
+#include "xbt/utility.hpp"
#include "ns3/core-module.h"
#include "ns3/node.h"
#include "ns3/core-module.h"
#include "ns3/node.h"
@@
-18,6
+19,7
@@
#include "src/instr/instr_private.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
#include "src/kernel/routing/NetPoint.hpp"
#include "src/instr/instr_private.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
#include "src/kernel/routing/NetPoint.hpp"
+#include "simgrid/plugins/energy.h"
#include "simgrid/s4u/Engine.hpp"
#include "simgrid/s4u/NetZone.hpp"
#include "simgrid/s4u/Engine.hpp"
#include "simgrid/s4u/NetZone.hpp"
@@
-46,9
+48,9
@@
simgrid::xbt::Extension<simgrid::kernel::routing::NetPoint, NetPointNs3> NetPoin
NetPointNs3::NetPointNs3()
{
NetPointNs3::NetPointNs3()
{
- ns3
::Ptr<ns3::Node> node
= ns3::CreateObject<ns3::Node>(0);
- stack.Install(n
ode
);
- nodes.Add(n
ode
);
+ ns3
Node_
= ns3::CreateObject<ns3::Node>(0);
+ stack.Install(n
s3Node_
);
+ nodes.Add(n
s3Node_
);
node_num = number_of_nodes++;
}
node_num = number_of_nodes++;
}
@@
-142,6
+144,9
@@
namespace simgrid {
namespace surf {
NetworkNS3Model::NetworkNS3Model() : NetworkModel() {
namespace surf {
NetworkNS3Model::NetworkNS3Model() : NetworkModel() {
+ xbt_assert(not sg_link_energy_is_inited(),
+ "LinkEnergy plugin and NS3 network models are not compatible. Are you looking for Ecofen, maybe?");
+
NetPointNs3::EXTENSION_ID = simgrid::kernel::routing::NetPoint::extension_create<NetPointNs3>();
ns3_initialize(ns3_tcp_model.get().c_str());
NetPointNs3::EXTENSION_ID = simgrid::kernel::routing::NetPoint::extension_create<NetPointNs3>();
ns3_initialize(ns3_tcp_model.get().c_str());
@@
-151,6
+156,7
@@
NetworkNS3Model::NetworkNS3Model() : NetworkModel() {
XBT_VERB("SimGrid's %s is known as node %d within NS3", pt->getCname(), pt->extension<NetPointNs3>()->node_num);
});
simgrid::surf::on_cluster.connect(&clusterCreation_cb);
XBT_VERB("SimGrid's %s is known as node %d within NS3", pt->getCname(), pt->extension<NetPointNs3>()->node_num);
});
simgrid::surf::on_cluster.connect(&clusterCreation_cb);
+
simgrid::s4u::onPlatformCreated.connect(&postparse_cb);
simgrid::s4u::NetZone::onRouteCreation.connect(&routeCreation_cb);
}
simgrid::s4u::onPlatformCreated.connect(&postparse_cb);
simgrid::s4u::NetZone::onRouteCreation.connect(&routeCreation_cb);
}
@@
-229,8
+235,11
@@
void NetworkNS3Model::updateActionsState(double now, double delta)
if(sgFlow->finished_){
socket_to_destroy.push_back(ns3Socket);
if(sgFlow->finished_){
socket_to_destroy.push_back(ns3Socket);
- XBT_DEBUG("Destroy socket %p of action %p", ns3Socket, action);
+ XBT_DEBUG("Destroy socket %p of action %p", ns3Socket
.c_str()
, action);
action->finish(Action::State::done);
action->finish(Action::State::done);
+ } else {
+ XBT_DEBUG("Socket %p sent %u bytes out of %u (%u remaining)", ns3Socket.c_str(), sgFlow->sentBytes_,
+ sgFlow->totalBytes_, sgFlow->remaining_);
}
}
}
}
@@
-239,7
+248,7
@@
void NetworkNS3Model::updateActionsState(double now, double delta)
socket_to_destroy.pop_back();
SgFlow* flow = flowFromSock.at(ns3Socket);
if (XBT_LOG_ISENABLED(ns3, xbt_log_priority_debug)) {
socket_to_destroy.pop_back();
SgFlow* flow = flowFromSock.at(ns3Socket);
if (XBT_LOG_ISENABLED(ns3, xbt_log_priority_debug)) {
- XBT_DEBUG
("Removing socket %p of action %p", ns3Socket
, flow->action_);
+ XBT_DEBUG
("Removing socket %p of action %p", ns3Socket.c_str()
, flow->action_);
}
delete flow;
flowFromSock.erase(ns3Socket);
}
delete flow;
flowFromSock.erase(ns3Socket);
@@
-312,7
+321,7
@@
int NetworkNS3Action::unref()
refcount_--;
if (not refcount_) {
if (action_hook.is_linked())
refcount_--;
if (not refcount_) {
if (action_hook.is_linked())
- s
tateSet_->erase(stateSet_->iterator_to(*this)
);
+ s
imgrid::xbt::intrusive_erase(*stateSet_, *this
);
XBT_DEBUG ("Removing action %p", this);
delete this;
return 1;
XBT_DEBUG ("Removing action %p", this);
delete this;
return 1;
@@
-337,8
+346,8
@@
void ns3_create_flow(simgrid::s4u::Host* src, simgrid::s4u::Host* dst,
unsigned int node1 = src->pimpl_netpoint->extension<NetPointNs3>()->node_num;
unsigned int node2 = dst->pimpl_netpoint->extension<NetPointNs3>()->node_num;
unsigned int node1 = src->pimpl_netpoint->extension<NetPointNs3>()->node_num;
unsigned int node2 = dst->pimpl_netpoint->extension<NetPointNs3>()->node_num;
- ns3::Ptr<ns3::Node> src_node =
nodes.Get(node1)
;
- ns3::Ptr<ns3::Node> dst_node =
nodes.Get(node2)
;
+ ns3::Ptr<ns3::Node> src_node =
src->pimpl_netpoint->extension<NetPointNs3>()->ns3Node_
;
+ ns3::Ptr<ns3::Node> dst_node =
dst->pimpl_netpoint->extension<NetPointNs3>()->ns3Node_
;
xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?",
dst->pimpl_netpoint->getCname());
xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?",
dst->pimpl_netpoint->getCname());
@@
-392,7
+401,7
@@
void ns3_initialize(const char* TcpProtocol){
return;
}
return;
}
- xbt_die("The ns3/TcpModel must be
: NewReno or Reno or Tahoe");
+ xbt_die("The ns3/TcpModel must be: NewReno or Reno or Tahoe");
}
void ns3_add_cluster(const char* id, double bw, double lat) {
}
void ns3_add_cluster(const char* id, double bw, double lat) {
@@
-409,7
+418,7
@@
void ns3_add_cluster(const char* id, double bw, double lat) {
xbt_assert(Nodes.GetN() <= 65000, "Cluster with NS3 is limited to 65000 nodes");
ns3::CsmaHelper csma;
xbt_assert(Nodes.GetN() <= 65000, "Cluster with NS3 is limited to 65000 nodes");
ns3::CsmaHelper csma;
- csma.Set
DeviceAttribute("DataRate", ns3::DataRateValue(ns3::DataRate(bw*8)));
// NS3 takes bps, but we provide Bps
+ csma.Set
ChannelAttribute("DataRate", ns3::DataRateValue(ns3::DataRate(bw * 8)));
// NS3 takes bps, but we provide Bps
csma.SetChannelAttribute("Delay", ns3::TimeValue(ns3::Seconds(lat)));
ns3::NetDeviceContainer devices = csma.Install(Nodes);
XBT_DEBUG("Create CSMA");
csma.SetChannelAttribute("Delay", ns3::TimeValue(ns3::Seconds(lat)));
ns3::NetDeviceContainer devices = csma.Install(Nodes);
XBT_DEBUG("Create CSMA");
@@
-445,18
+454,14
@@
void ns3_add_link(NetPointNs3* src, NetPointNs3* dst, double bw, double lat) {
int srcNum = src->node_num;
int dstNum = dst->node_num;
int srcNum = src->node_num;
int dstNum = dst->node_num;
- ns3::Ptr<ns3::Node> a =
nodes.Get(srcNum)
;
- ns3::Ptr<ns3::Node> b =
nodes.Get(dstNum)
;
+ ns3::Ptr<ns3::Node> a =
src->ns3Node_
;
+ ns3::Ptr<ns3::Node> b =
dst->ns3Node_
;
XBT_DEBUG("\tAdd PTP from %d to %d bw:'%f Bps' lat:'%fs'", srcNum, dstNum, bw, lat);
XBT_DEBUG("\tAdd PTP from %d to %d bw:'%f Bps' lat:'%fs'", srcNum, dstNum, bw, lat);
- pointToPoint.SetDeviceAttribute("DataRate", ns3::DataRateValue(ns3::DataRate(bw*8)));// NS3 takes bps, but we provide Bps
+ pointToPoint.SetDeviceAttribute("DataRate",
+ ns3::DataRateValue(ns3::DataRate(bw * 8))); // NS3 takes bps, but we provide Bps
pointToPoint.SetChannelAttribute("Delay", ns3::TimeValue(ns3::Seconds(lat)));
pointToPoint.SetChannelAttribute("Delay", ns3::TimeValue(ns3::Seconds(lat)));
- std::string filename = simgrid::xbt::string_printf("link-%d-%d.tr", srcNum, dstNum);
- ns3::AsciiTraceHelper ascii;
- pointToPoint.EnableAsciiAll(ascii.CreateFileStream(filename));
- pointToPoint.EnablePcapAll ("tcp-bulk-send", false);
-
ns3::NetDeviceContainer netA;
netA.Add(pointToPoint.Install (a, b));
ns3::NetDeviceContainer netA;
netA.Add(pointToPoint.Install (a, b));