1 /* Copyright (c) 2013-2014. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
7 #include "network_gtnets.hpp"
9 static double time_to_next_flow_completion = -1;
11 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets, surf,
12 "Logging specific to the SURF network GTNetS module");
14 extern routing_platf_t routing_platf;
16 double sg_gtnets_jitter = 0.0;
17 int sg_gtnets_jitter_seed = 10;
23 void newRoute(int src_id, int dst_id,
24 xbt_dynar_t links, int nb_link)
27 NetworkGTNetsLinkPtr link;
32 XBT_IN("(src_id=%d, dst_id=%d, links=%p, nb_link=%d)",
33 src_id, dst_id, links, nb_link);
35 /* Build the list of gtnets link IDs */
36 gtnets_links = xbt_new0(int, nb_link);
38 xbt_dynar_foreach(links, cursor, _link) {
39 link = (NetworkGTNetsLinkPtr) _link;
40 gtnets_links[i++] = link->m_id;
43 if (gtnets_add_route(src_id, dst_id, gtnets_links, nb_link)) {
44 xbt_die("Cannot create GTNetS route");
49 void newRouteOnehop(int src_id, int dst_id,
50 NetworkGTNetsLinkPtr link)
52 if (gtnets_add_onehop_route(src_id, dst_id, link->m_id)) {
53 xbt_die("Cannot create GTNetS route");
57 int NetworkGTNetsModel::addLink(ind id, double bandwidth, double latency)
59 double bw = bandwidth * 8; //Bandwidth in bits (used in GTNETS).
61 map<int,GTNETS_Link*>::iterator iter = p_links.find(id);
62 xbt_assert((iter == p_links.end()), "Link %d already exists", id);
64 if(iter == p_links.end()) {
65 GTNETS_Link* link= new GTNETS_Link(id);
69 XBT_DEBUG("Creating a new P2P, linkid %d, bandwidth %gl, latency %gl", id, bandwidth, latency);
70 p_gtnetsLinks_[id] = new Linkp2p(bw, latency);
72 XBT_DEBUG("Using jitter %f, and seed %u", jitter_, jitter_seed_);
73 double min = -1*jitter_*latency;
74 double max = jitter_*latency;
75 uniform_jitter_generator_[id] = new Uniform(min,max);
76 gtnets_links_[id]->Jitter((const Random &) *(uniform_jitter_generator_[id]));
85 NetworkGTNetsLink::NetworkGTNetsLink(NetworkGTNetsModelPtr model, const char* name, double bw, double lat, xbt_dict_t properties)
86 :NetworkCm02Link(model, name, properties), m_bwCurrent(bw), m_latCurrent(lat)
89 static int link_count = -1;
91 if (xbt_lib_get_or_null(link_lib, name, SURF_LINK_LEVEL)) {
95 XBT_DEBUG("Scanning link name %s", name);
99 XBT_DEBUG("Adding new link, linkid %d, name %s, latency %g, bandwidth %g",
100 link_count, name, lat, bw);
104 if (gtnets_add_link(link_count, bw, lat)) {
105 xbt_die("Cannot create GTNetS link");
109 xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, this);