1 #include "network_gtnets.hpp"
3 static double time_to_next_flow_completion = -1;
5 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets, surf,
6 "Logging specific to the SURF network GTNetS module");
8 extern routing_platf_t routing_platf;
10 double sg_gtnets_jitter = 0.0;
11 int sg_gtnets_jitter_seed = 10;
17 void newRoute(int src_id, int dst_id,
18 xbt_dynar_t links, int nb_link)
21 NetworkGTNetsLinkPtr link;
26 XBT_IN("(src_id=%d, dst_id=%d, links=%p, nb_link=%d)",
27 src_id, dst_id, links, nb_link);
29 /* Build the list of gtnets link IDs */
30 gtnets_links = xbt_new0(int, nb_link);
32 xbt_dynar_foreach(links, cursor, _link) {
33 link = (NetworkGTNetsLinkPtr) _link;
34 gtnets_links[i++] = link->m_id;
37 if (gtnets_add_route(src_id, dst_id, gtnets_links, nb_link)) {
38 xbt_die("Cannot create GTNetS route");
43 void newRouteOnehop(int src_id, int dst_id,
44 NetworkGTNetsLinkPtr link)
46 if (gtnets_add_onehop_route(src_id, dst_id, link->m_id)) {
47 xbt_die("Cannot create GTNetS route");
51 int NetworkGTNetsModel::addLink(ind id, double bandwidth, double latency)
53 double bw = bandwidth * 8; //Bandwidth in bits (used in GTNETS).
55 map<int,GTNETS_Link*>::iterator iter = p_links.find(id);
56 xbt_assert((iter == p_links.end()), "Link %d already exists", id);
58 if(iter == p_links.end()) {
59 GTNETS_Link* link= new GTNETS_Link(id);
63 XBT_DEBUG("Creating a new P2P, linkid %d, bandwidth %gl, latency %gl", id, bandwidth, latency);
64 p_gtnetsLinks_[id] = new Linkp2p(bw, latency);
66 XBT_DEBUG("Using jitter %f, and seed %u", jitter_, jitter_seed_);
67 double min = -1*jitter_*latency;
68 double max = jitter_*latency;
69 uniform_jitter_generator_[id] = new Uniform(min,max);
70 gtnets_links_[id]->Jitter((const Random &) *(uniform_jitter_generator_[id]));
79 NetworkGTNetsLink::NetworkGTNetsLink(NetworkGTNetsModelPtr model, const char* name, double bw, double lat, xbt_dict_t properties)
80 :NetworkCm02Link(model, name, properties), m_bwCurrent(bw), m_latCurrent(lat)
83 static int link_count = -1;
85 if (xbt_lib_get_or_null(link_lib, name, SURF_LINK_LEVEL)) {
89 XBT_DEBUG("Scanning link name %s", name);
93 XBT_DEBUG("Adding new link, linkid %d, name %s, latency %g, bandwidth %g",
94 link_count, name, lat, bw);
98 if (gtnets_add_link(link_count, bw, lat)) {
99 xbt_die("Cannot create GTNetS link");
103 xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, this);