Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Throw unimplemented.
[simgrid.git] / src / surf / network_gtnets.cpp
1 #include "network_gtnets.hpp"
2
3 static double time_to_next_flow_completion = -1;
4
5 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets, surf,
6                                 "Logging specific to the SURF network GTNetS module");
7
8 extern routing_platf_t routing_platf;
9
10 double sg_gtnets_jitter = 0.0;
11 int sg_gtnets_jitter_seed = 10;
12
13 /*********
14  * Model *
15  *********/
16
17 void newRoute(int src_id, int dst_id,
18                       xbt_dynar_t links, int nb_link)
19 {
20   void *_link;
21   NetworkGTNetsLinkPtr link;
22   unsigned int cursor;
23   int i = 0;
24   int *gtnets_links;
25
26   XBT_IN("(src_id=%d, dst_id=%d, links=%p, nb_link=%d)",
27           src_id, dst_id, links, nb_link);
28
29   /* Build the list of gtnets link IDs */
30   gtnets_links = xbt_new0(int, nb_link);
31   i = 0;
32   xbt_dynar_foreach(links, cursor, _link) {
33         link = (NetworkGTNetsLinkPtr) _link;
34     gtnets_links[i++] = link->m_id;
35   }
36
37   if (gtnets_add_route(src_id, dst_id, gtnets_links, nb_link)) {
38     xbt_die("Cannot create GTNetS route");
39   }
40   XBT_OUT();
41 }
42
43 void newRouteOnehop(int src_id, int dst_id,
44                     NetworkGTNetsLinkPtr link)
45 {
46   if (gtnets_add_onehop_route(src_id, dst_id, link->m_id)) {
47     xbt_die("Cannot create GTNetS route");
48   }
49 }
50
51 int NetworkGTNetsModel::addLink(ind id, double bandwidth, double latency)
52 {
53   double bw = bandwidth * 8; //Bandwidth in bits (used in GTNETS).
54
55   map<int,GTNETS_Link*>::iterator iter = p_links.find(id);
56   xbt_assert((iter == p_links.end()), "Link %d already exists", id);
57
58   if(iter == p_links.end()) {
59     GTNETS_Link* link= new GTNETS_Link(id);
60     p_links[id] = link;
61   }
62
63   XBT_DEBUG("Creating a new P2P, linkid %d, bandwidth %gl, latency %gl", id, bandwidth, latency);
64   p_gtnetsLinks_[id] = new Linkp2p(bw, latency);
65           if(jitter_ > 0){
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]));
71           }
72
73           return 0;
74 }
75
76 /************
77  * Resource *
78  ************/
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)
81 {
82
83   static int link_count = -1;
84
85   if (xbt_lib_get_or_null(link_lib, name, SURF_LINK_LEVEL)) {
86     return;
87   }
88
89   XBT_DEBUG("Scanning link name %s", name);
90
91   link_count++;
92
93   XBT_DEBUG("Adding new link, linkid %d, name %s, latency %g, bandwidth %g",
94            link_count, name, lat, bw);
95
96
97
98   if (gtnets_add_link(link_count, bw, lat)) {
99     xbt_die("Cannot create GTNetS link");
100   }
101   m_id = link_count;
102
103   xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, this);
104 }
105
106 /**********
107  * Action *
108  **********/