Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Improved debugging and assert functions in GTNetS interface.
authorvelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sun, 4 Oct 2009 23:38:52 +0000 (23:38 +0000)
committervelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sun, 4 Oct 2009 23:38:52 +0000 (23:38 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6688 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/surf/gtnets/gtnets_interface.cc
src/surf/gtnets/gtnets_simulator.cc
src/surf/gtnets/gtnets_topology.cc

index 4207edb..f62dbdb 100644 (file)
@@ -4,17 +4,30 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+
 #include "gtnets_simulator.h"
 #include "gtnets_interface.h"
 #include "gtnets_simulator.h"
 #include "gtnets_interface.h"
+#ifdef DEBUG0
+       #undef DEBUG0
+#endif
+#include "xbt/log.h"
+#include "xbt/asserts.h"
 
 static GTSim* gtnets_sim = 0;
 
 
 static GTSim* gtnets_sim = 0;
 
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets_interface, surf_network_gtnets,
+                                "Logging specific to the SURF network GTNetS interface");
+
+
+
 // initialize the GTNetS interface and environment
 int gtnets_initialize(){
 // initialize the GTNetS interface and environment
 int gtnets_initialize(){
-  if (gtnets_sim){
-    fprintf(stderr, "gtnets already initialized.\n");
-    return -1;
-  }
+
+  DEBUG0("Using logging.");
+
+  xbt_assert0(!gtnets_sim, "gtnets already initialized");
+
   gtnets_sim = new GTSim();
   return 0;
 }
   gtnets_sim = new GTSim();
   return 0;
 }
@@ -54,30 +67,48 @@ int gtnets_create_flow(int src, int dst, long datasize, void* metadata){
 // if no flows exist, return -1.0
 double gtnets_get_time_to_next_flow_completion(){
   ofstream file;
 // if no flows exist, return -1.0
 double gtnets_get_time_to_next_flow_completion(){
   ofstream file;
+  streambuf* sbuf;
   double value;
   double value;
-  file.open ("/dev/null");
-  streambuf* sbuf = cout.rdbuf();
-  cout.rdbuf(file.rdbuf());
 
 
-  value = gtnets_sim->get_time_to_next_flow_completion();
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         file.open ("/dev/null");
+         sbuf = cout.rdbuf();
+         cout.rdbuf(file.rdbuf());
+         DEBUG0("Enable GTNetS library quite mode");
+  }else {
+         DEBUG0("Disable GTNetS library quite mode");
+  }
 
 
-  cout.rdbuf(sbuf);
+  value = gtnets_sim->get_time_to_next_flow_completion();
 
 
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         cout.rdbuf(sbuf);
+         file.close();
+  }
   return value;
 }
 
 // run until a flow completes (returns that flow's metadata)
 int gtnets_run_until_next_flow_completion(void ***metadata, int *number_of_flows){
   ofstream file;
   return value;
 }
 
 // run until a flow completes (returns that flow's metadata)
 int gtnets_run_until_next_flow_completion(void ***metadata, int *number_of_flows){
   ofstream file;
+  streambuf* sbuf;
   double value;
   double value;
-  file.open ("/dev/null");
-  streambuf* sbuf = cout.rdbuf();
-  cout.rdbuf(file.rdbuf());
 
 
-  value = gtnets_sim->run_until_next_flow_completion(metadata, number_of_flows);
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         file.open ("/dev/null");
+         sbuf = cout.rdbuf();
+         cout.rdbuf(file.rdbuf());
+         DEBUG0("Enable GTNetS library quite mode");
+  }else {
+         DEBUG0("Disable GTNetS library quite mode");
+  }
 
 
-  cout.rdbuf(sbuf);
+  value = gtnets_sim->run_until_next_flow_completion(metadata, number_of_flows);
 
 
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         cout.rdbuf(sbuf);
+         file.close();
+  }
   return value;
 }
 
   return value;
 }
 
index dafa668..505e4c5 100644 (file)
@@ -8,6 +8,15 @@
 #include "gtnets_topology.h"
 #include <map>
 #include <vector>
 #include "gtnets_topology.h"
 #include <map>
 #include <vector>
+#ifdef DEBUG0
+       #undef DEBUG0
+#endif
+#include "xbt/log.h"
+#include "xbt/asserts.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets_simulator, surf_network_gtnets,
+                                "Logging specific to the SURF network GTNetS simulator");
+
 
 using namespace std;
 
 
 using namespace std;
 
@@ -79,20 +88,15 @@ GTSim::~GTSim(){
 }
 
 int GTSim::add_router(int id){
 }
 
 int GTSim::add_router(int id){
-  if (topo_->add_router(id) < 0){
-    fprintf(stderr, "can't add router %d. already exists.\n", id);
-    return -1;
-  }
+  xbt_assert1(!(topo_->add_router(id) < 0), "can't add router %d. already exists", id);
 }
 
 //bandwidth: in bytes.
 //latency: in seconds.
 int GTSim::add_link(int id, double bandwidth, double latency){
   double bw = bandwidth * 8; //Bandwidth in bits (used in GTNETS).
 }
 
 //bandwidth: in bytes.
 //latency: in seconds.
 int GTSim::add_link(int id, double bandwidth, double latency){
   double bw = bandwidth * 8; //Bandwidth in bits (used in GTNETS).
-  if (topo_->add_link(id) < 0){
-    fprintf(stderr, "can't add link %d. already exists.\n", id);
-    return -1;
-  }
+  xbt_assert1(!(topo_->add_link(id) < 0),"Can't add link %d. already exists", id);
+  DEBUG3("Creating a new P2P, linkid %d, bandwidth %gl, latency %gl", id, bandwidth, latency);
   gtnets_links_[id] = new Linkp2p(bw, latency);
   return 0;
 }
   gtnets_links_[id] = new Linkp2p(bw, latency);
   return 0;
 }
@@ -110,17 +114,14 @@ bool GTSim::link_include(int id){
 }
 
 int GTSim::add_onehop_route(int src, int dst, int link){
 }
 
 int GTSim::add_onehop_route(int src, int dst, int link){
-  if (topo_->add_onehop_route(src, dst, link) < 0){
-    fprintf(stderr, "Cannot add a route, src: %d, dst: %d, link: %d\n",
-           src, dst, link);
-    return -1;
-  }
+  xbt_assert3(!(topo_->add_onehop_route(src, dst, link) < 0), "Cannot add a route, src: %d, dst: %d, link: %d", src, dst, link);
   return 0;
 }
 
 // Generate the gtnets nodes according to topo_.
 void GTSim::add_nodes(){
   static unsigned int address = IPAddr("192.168.0.1");
   return 0;
 }
 
 // Generate the gtnets nodes according to topo_.
 void GTSim::add_nodes(){
   static unsigned int address = IPAddr("192.168.0.1");
+  IPAddr helper = IPAddr();
   vector<GTNETS_Node*> nodes = topo_->nodes();
   vector<GTNETS_Node*>::iterator it;
   int id;
   vector<GTNETS_Node*> nodes = topo_->nodes();
   vector<GTNETS_Node*>::iterator it;
   int id;
@@ -128,7 +129,8 @@ void GTSim::add_nodes(){
     id = (*it)->id();
     gtnets_nodes_[id] = new Node();
     gtnets_nodes_[id]->SetIPAddr(address++);
     id = (*it)->id();
     gtnets_nodes_[id] = new Node();
     gtnets_nodes_[id]->SetIPAddr(address++);
-    //    printf("In GTSim, add_node: %d\n", id);
+    DEBUG2("In GTSim, add_node: %d, with IPAddr %s", id, helper.ToDotted(address-1));
+
   }
 }
 
   }
 }
 
@@ -147,6 +149,7 @@ void GTSim::node_connect(){
 
       gtnets_nodes_[srcid]->
        AddDuplexLink(gtnets_nodes_[dstid], *(gtnets_links_[linkid]));
 
       gtnets_nodes_[srcid]->
        AddDuplexLink(gtnets_nodes_[dstid], *(gtnets_links_[linkid]));
+    DEBUG3("Setting DuplexLink, src %d, dst %d, linkid %d", srcid, dstid, linkid);
     }
   }
 }
     }
   }
 }
@@ -175,14 +178,8 @@ int GTSim::add_route(int src, int dst, int* links, int nlink){
   int src_node = topo_->nodeid_from_hostid(src);
   int dst_node = topo_->nodeid_from_hostid(dst);
 
   int src_node = topo_->nodeid_from_hostid(src);
   int dst_node = topo_->nodeid_from_hostid(dst);
 
-  if (gtnets_nodes_.find(src_node) == gtnets_nodes_.end()){
-    fprintf(stderr, "node %d not found\n", src_node);
-    return -1;
-  }
-  if (gtnets_nodes_.find(dst_node) == gtnets_nodes_.end()){
-    fprintf(stderr, "node %d not found\n", dst_node);
-    return -1;
-  }
+  xbt_assert1(!(gtnets_nodes_.find(src_node) == gtnets_nodes_.end()), "Node %d not found", src_node);
+  xbt_assert1(!(gtnets_nodes_.find(dst_node) == gtnets_nodes_.end()), "Node %d not found", dst_node);
 
   Node* tmpsrc = gtnets_nodes_[src_node];
   Node* tmpdst = gtnets_nodes_[dst_node];
 
   Node* tmpsrc = gtnets_nodes_[src_node];
   Node* tmpdst = gtnets_nodes_[dst_node];
@@ -191,19 +188,10 @@ int GTSim::add_route(int src, int dst, int* links, int nlink){
   
   cur_node = src_node;
   for (int i = 0; i < nlink; i++){
   
   cur_node = src_node;
   for (int i = 0; i < nlink; i++){
-    if (gtnets_nodes_.find(cur_node) == gtnets_nodes_.end()){
-      fprintf(stderr, "node %d not found\n", cur_node);
-      return -1;
-    }
+       xbt_assert1(!(gtnets_nodes_.find(cur_node) == gtnets_nodes_.end()), "Node %d not found", cur_node);
     next_node = topo_->peer_node_id(links[i], cur_node);
     next_node = topo_->peer_node_id(links[i], cur_node);
-    if (next_node < 0){
-      fprintf(stderr, "peer node not found\n");
-      return -1;
-    }
-    if (gtnets_nodes_.find(next_node) == gtnets_nodes_.end()){
-      fprintf(stderr, "node %d not found\n", next_node);
-      return -1;
-    }
+    xbt_assert0(!(next_node < 0), "Peer node not found");
+    xbt_assert1(!(gtnets_nodes_.find(next_node) == gtnets_nodes_.end()), "Node %d not found", next_node);
     
     //add route
     Node* tmpcur = gtnets_nodes_[cur_node];
     
     //add route
     Node* tmpcur = gtnets_nodes_[cur_node];
@@ -222,11 +210,7 @@ int GTSim::add_route(int src, int dst, int* links, int nlink){
     cur_node = next_node;
   }
 
     cur_node = next_node;
   }
 
-  if (cur_node != dst_node){
-    fprintf(stderr, "Route inconsistency, last: %d, dst: %d\n",
-           cur_node, dst_node);
-    return -1;
-  }
+  xbt_assert2(!(cur_node != dst_node), "Route inconsistency, last: %d, dst: %d",cur_node, dst_node);
 
   return 0;
 }
 
   return 0;
 }
@@ -242,15 +226,10 @@ int GTSim::create_flow(int src, int dst, long datasize, void* metadata){
   }
 
   int src_node = topo_->nodeid_from_hostid(src);
   }
 
   int src_node = topo_->nodeid_from_hostid(src);
-  if (src_node < 0){
-    fprintf(stderr, "src %d not found\n");
-    return -1;
-  }
+  xbt_assert1(!(src_node < 0), "Src %d not found", src_node);
+
   int dst_node = topo_->nodeid_from_hostid(dst);
   int dst_node = topo_->nodeid_from_hostid(dst);
-  if (dst_node < 0){
-    fprintf(stderr, "dst %d not found\n");
-    return -1;
-  }
+  xbt_assert1(!(dst_node < 0), "Dst %d not found", dst_node);
 
   gtnets_servers_[nflow_] = (TCPServer*) gtnets_nodes_[dst_node]->
        AddApplication(TCPServer(TCPReno()));
 
   gtnets_servers_[nflow_] = (TCPServer*) gtnets_nodes_[dst_node]->
        AddApplication(TCPServer(TCPReno()));
index 7978192..05c1f65 100644 (file)
@@ -9,6 +9,14 @@
 //Temporary classes for generating GTNetS topology
 
 #include "gtnets_topology.h"
 //Temporary classes for generating GTNetS topology
 
 #include "gtnets_topology.h"
+#ifdef DEBUG0
+       #undef DEBUG0
+#endif
+#include "xbt/log.h"
+#include "xbt/asserts.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets_topology, surf_network_gtnets,
+                                "Logging specific to the SURF network GTNetS simulator");
 
 // 
 //  GTNETS_Node
 
 // 
 //  GTNETS_Node
@@ -29,10 +37,7 @@ GTNETS_Node::~GTNETS_Node(){
 
 // hostid = network_card_id
 int GTNETS_Node::add_host(int hostid){
 
 // hostid = network_card_id
 int GTNETS_Node::add_host(int hostid){
-  if (is_router_){
-    fprintf(stderr, "Cannot add a host to a router node.\n");
-    return -1;
-  }
+  xbt_assert0(!(is_router_), "Cannot add a host to a router node");
   hosts_.insert(hostid);
   return 0;
 }
   hosts_.insert(hostid);
   return 0;
 }
@@ -40,18 +45,8 @@ int GTNETS_Node::add_host(int hostid){
 // Add a router. If this node already has a router/host,
 // return -1.
 int GTNETS_Node::add_router(int routerid){
 // Add a router. If this node already has a router/host,
 // return -1.
 int GTNETS_Node::add_router(int routerid){
-  if (hosts_.size() > 1){
-    fprintf(stderr, "Router node should have only one router.\n");
-    return -1;
-  }else if (hosts_.size() == 1){
-    if (hosts_.find(routerid) != hosts_.end()){
-      //printf("the router already exists\n");
-      return 0;
-    }else{
-      fprintf(stderr, "Node %d is a different router.\n");
-      return -1;
-    }
-  }
+  xbt_assert0(!(hosts_.size() > 1), "Router node should have only one router");
+  xbt_assert1(((hosts_.size() == 1)&&(hosts_.find(routerid) != hosts_.end())), "Node %d is a different router", routerid);
   is_router_ = true;
   hosts_.insert(routerid);
   return 0;
   is_router_ = true;
   hosts_.insert(routerid);
   return 0;
@@ -68,11 +63,9 @@ bool GTNETS_Node::include(int hostid){
 
 void GTNETS_Node::print_hosts(){
   set<int>::iterator it;
 
 void GTNETS_Node::print_hosts(){
   set<int>::iterator it;
-  printf("[");
   for (it = hosts_.begin(); it != hosts_.end(); it++){
   for (it = hosts_.begin(); it != hosts_.end(); it++){
-    printf(" %d", *it);
+    DEBUG1("      host id %d", *it);
   }
   }
-  printf("]");
 }
 
 //
 }
 
 //
@@ -99,19 +92,15 @@ GTNETS_Link::~GTNETS_Link(){
 }
 
 void GTNETS_Link::print_link_status(){
 }
 
 void GTNETS_Link::print_link_status(){
-  printf("== LINKID: %d\n", ID_);
+  DEBUG1("  link id: %d", ID_);
   if (src_node_){
   if (src_node_){
-    printf("  [SRC] ID: %d, router?: %d, hosts[]: ",
-          src_node_->id(), src_node_->is_router());
+    DEBUG2("    [src] id: %d, is it router?: %d, host list: ",src_node_->id(), src_node_->is_router());
     src_node_->print_hosts();
     src_node_->print_hosts();
-    printf("\n");
   }
 
   if (dst_node_){
   }
 
   if (dst_node_){
-    printf("  [DST] ID: %d, router?: %d, hosts[]: ", 
-          dst_node_->id(), dst_node_->is_router());
+    DEBUG2("    [dst] id: %d, is it router?: %d, host list: ",dst_node_->id(), dst_node_->is_router());
     dst_node_->print_hosts();
     dst_node_->print_hosts();
-    printf("\n");
   }
 }
 
   }
 }
 
@@ -130,12 +119,10 @@ bool GTNETS_Link::route_exists(){
 
 // return the peer node id
 int GTNETS_Link::peer_node(int cur_id){
 
 // return the peer node id
 int GTNETS_Link::peer_node(int cur_id){
+  xbt_assert0(((cur_id ==  src_node_->id())||(cur_id == dst_node_->id())), "Node not found");
+
   if (cur_id ==  src_node_->id()) return dst_node_->id();
   else if (cur_id == dst_node_->id()) return src_node_->id();
   if (cur_id ==  src_node_->id()) return dst_node_->id();
   else if (cur_id == dst_node_->id()) return src_node_->id();
-  else {
-    fprintf(stderr, "node not found\n");
-    return -1;
-  }
 }
 
 int GTNETS_Link::add_src(GTNETS_Node* src){
 }
 
 int GTNETS_Link::add_src(GTNETS_Node* src){
@@ -179,30 +166,20 @@ int GTNETS_Topology::node_size(){
 
 int GTNETS_Topology::add_link(int id){
   map<int,GTNETS_Link*>::iterator iter = links_.find(id);
 
 int GTNETS_Topology::add_link(int id){
   map<int,GTNETS_Link*>::iterator iter = links_.find(id);
+  xbt_assert1((iter == links_.end()), "Link %d already exists", id);
 
   if(iter == links_.end()) {
     GTNETS_Link* link= new GTNETS_Link(id);
 
   if(iter == links_.end()) {
     GTNETS_Link* link= new GTNETS_Link(id);
-    //printf("link %d is added: %d\n", id, link->id());
-    //links_.insert(make_pair(id, link));
     links_[id] = link;
     links_[id] = link;
-    return 0;
-  }else{
-    fprintf(stderr, "Link %d already exists.\n", id);
-    return -1;
   }
   }
+  return 0;
 }
 
 int GTNETS_Topology::add_router(int id){
   set<int>::iterator iter = routers_.find(id);
 }
 
 int GTNETS_Topology::add_router(int id){
   set<int>::iterator iter = routers_.find(id);
-
-  if(iter == routers_.end()) {
-    //printf("router %d is inserted\n", id);
-    routers_.insert(id);
-    return 0;
-  }else{
-    fprintf(stderr, "Router %d already exists.\n", id);
-    return -1;
-  }
+  xbt_assert1((iter == routers_.end()), "Router %d already exists", id);
+  routers_.insert(id);
+  return 0;
 }
 
 bool GTNETS_Topology::is_router(int id){
 }
 
 bool GTNETS_Topology::is_router(int id){
@@ -213,21 +190,13 @@ bool GTNETS_Topology::is_router(int id){
 
 //return the node id of the peer of cur_id by linkid.
 int GTNETS_Topology::peer_node_id(int linkid, int cur_id){
 
 //return the node id of the peer of cur_id by linkid.
 int GTNETS_Topology::peer_node_id(int linkid, int cur_id){
-  //printf("linkid: %d, cur_id: %d\n", linkid, cur_id);
   GTNETS_Link* link = links_[linkid];
   GTNETS_Link* link = links_[linkid];
-  if (!link) {
-    fprintf(stderr, "link %d not found\n", linkid);
-    return -1;
-  }
-  if ((cur_id < 0) || (cur_id > nodes_.size()-1)){
-    fprintf(stderr, "node %d not found\n", cur_id);
-    return -1;
-  }
+  xbt_assert1((link), "Link %d not found", linkid);
+  xbt_assert1(!((cur_id < 0) || (cur_id > nodes_.size()-1)), "Node %d not found", cur_id);
+
   int peer  = link->peer_node(nodes_[cur_id]->id());
   int peer  = link->peer_node(nodes_[cur_id]->id());
-  if (peer < 0){
-    fprintf(stderr, "peer not found\n");
-    return -1;
-  }
+  xbt_assert0(!(peer < 0), "Peer not found");
+
   return peer;
 }
 
   return peer;
 }
 
@@ -236,20 +205,22 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){
 
   map<int, GTNETS_Link*>::iterator iter = links_.find(linkid);
 
 
   map<int, GTNETS_Link*>::iterator iter = links_.find(linkid);
 
-  if(iter == links_.end()) {
-    fprintf(stderr, "Link %d not found.\n", linkid);
-    return -1;
-  }else{
-    link = iter->second;
-  }
+  xbt_assert1(!(iter == links_.end()), "Link %d not found", linkid);
+  link = iter->second;
 
 
-  //  printf("add_onehop_route: src: %d, dst: %d, linkid: %d, %d\n",
-  //    src, dst, linkid, link->id());
+  DEBUG4("Add onehop route, src: %d, dst: %d, linkid: %d, %d",src, dst, linkid, link->id());
 
   GTNETS_Node *src_node, *dst_node;
   src_node = link->src_node();
   dst_node = link->dst_node();
 
 
   GTNETS_Node *src_node, *dst_node;
   src_node = link->src_node();
   dst_node = link->dst_node();
 
+  if (XBT_LOG_ISENABLED(surf_network_gtnets_topology, xbt_log_priority_debug)) {
+    link->print_link_status();
+    src_node->print_hosts();
+    dst_node->print_hosts();
+  }
+
+  xbt_assert0((src_node && dst_node), "Either src or dst is null");
 
   // If not exists a route, add one.
   if (!link->route_exists()){
 
   // If not exists a route, add one.
   if (!link->route_exists()){
@@ -289,11 +260,6 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){
       nodes_[d_node_id]->add_host(dst);
 
     link->add_dst(nodes_[d_node_id]);
       nodes_[d_node_id]->add_host(dst);
 
     link->add_dst(nodes_[d_node_id]);
-
-  // other: has either src or dst (error)
-  }else if (!src_node || !dst_node){
-    fprintf(stderr, "Either src or dst is null\n");
-    return -1;
   }
 
   // case 1: link has two routers
   }
 
   // case 1: link has two routers
@@ -302,39 +268,27 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){
     int tmpsrc2 = nodeid_from_hostid(src);
     int tmpdst1 = dst_node->id();
     int tmpdst2 = nodeid_from_hostid(dst);
     int tmpsrc2 = nodeid_from_hostid(src);
     int tmpdst1 = dst_node->id();
     int tmpdst2 = nodeid_from_hostid(dst);
-    if (((tmpsrc1 == tmpsrc2) && (tmpdst1 == tmpdst2)) ||
-       ((tmpsrc1 == tmpdst2) && (tmpdst1 == tmpsrc2))){
-      //fprintf(stderr, "Route already exists\n");
-    }else{
-      fprintf(stderr, "Different one hop route defined\n");
-      return -1;
-    }
+    xbt_assert0( (((tmpsrc1 == tmpsrc2) && (tmpdst1 == tmpdst2)) ||
+       ((tmpsrc1 == tmpdst2) && (tmpdst1 == tmpsrc2))), "Different one hop route defined");
   }
   }
+
   // case 2: link has one router and one host
   else if (src_node->is_router() && !dst_node->is_router()){
     int newsrc, newdst;
   // case 2: link has one router and one host
   else if (src_node->is_router() && !dst_node->is_router()){
     int newsrc, newdst;
+    xbt_assert0( ((is_router(src))||(is_router(dst))), "one of nodes should be a router");
+
     if (is_router(src)){
       newsrc = src;
       newdst = dst;
     }else if (is_router(dst)){
       newsrc = dst;
       newdst = src;
     if (is_router(src)){
       newsrc = src;
       newdst = dst;
     }else if (is_router(dst)){
       newsrc = dst;
       newdst = src;
-    }else{
-      fprintf(stderr, "one of nodes should be a router\n");
-      return -1;
     }
 
     }
 
-    if (src_node->id() != nodeid_from_hostid(newsrc)){
-      fprintf(stderr, "The router should be identical\n");
-      return -1;
-    }
+    xbt_assert0(!(src_node->id() != nodeid_from_hostid(newsrc)), "The router should be identical");
 
     //now, to add dst to dst_node, dst should be a host.
 
     //now, to add dst to dst_node, dst should be a host.
-
-    if (is_router(newdst)){
-      fprintf(stderr, "dst %d is not an endpoint. cannot add it to dst_node\n");
-      return -1;
-    }
+    xbt_assert1(!(is_router(newdst)), "Dst %d is not an endpoint. cannot add it to dst_node", newdst);
 
     if (!dst_node->include(newdst)){
       dst_node->add_host(newdst);
 
     if (!dst_node->include(newdst)){
       dst_node->add_host(newdst);
@@ -343,29 +297,19 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){
   }
   else if (!src_node->is_router() && dst_node->is_router()){
     int newsrc, newdst;
   }
   else if (!src_node->is_router() && dst_node->is_router()){
     int newsrc, newdst;
+    xbt_assert0(((is_router(src))||(is_router(dst))), "One of nodes should be a router");
+
     if (is_router(src)){
       newsrc = dst;
       newdst = src;
     }else if (is_router(dst)){
       newsrc = src;
       newdst = dst;
     if (is_router(src)){
       newsrc = dst;
       newdst = src;
     }else if (is_router(dst)){
       newsrc = src;
       newdst = dst;
-    }else{
-      fprintf(stderr, "one of nodes should be a router\n");
-      return -1;
-    }
-
-
-    if (dst_node->id() != hosts_[newdst]){
-      fprintf(stderr, "The router should be identical\n");
-      return -1;
     }
 
     }
 
+    xbt_assert0(!(dst_node->id() != hosts_[newdst]), "The router should be identical");
     //now, to add dst to src_node, dst should be a host.
     //now, to add dst to src_node, dst should be a host.
-
-    if (is_router(newsrc)){
-      fprintf(stderr, "dst %d is not an endpoint. cannot add it to src_node\n");
-      return -1;
-    }
+    xbt_assert1(!(is_router(newsrc)), "Src %d is not an endpoint. cannot add it to src_node", newsrc);
 
     if (!src_node->include(newsrc)){
       src_node->add_host(newsrc);
 
     if (!src_node->include(newsrc)){
       src_node->add_host(newsrc);
@@ -375,40 +319,36 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){
 
   // case 3: link has two hosts
   else if (!src_node->is_router() && !dst_node->is_router()){
 
   // case 3: link has two hosts
   else if (!src_node->is_router() && !dst_node->is_router()){
-
-    if (is_router(src) || is_router(dst)){
-      fprintf(stderr, "Cannot add a router to host-host link\n");
-      return -1;
-    }
+       xbt_assert0(!(is_router(src) || is_router(dst)), "Cannot add a router to host-host link");
 
     //if both are hosts, the order doesn't matter.
     if (src_node->include(src)){
       if (dst_node->include(dst)){
 
     //if both are hosts, the order doesn't matter.
     if (src_node->include(src)){
       if (dst_node->include(dst)){
-       //nothing
+           //nothing
       }else{
       }else{
-       dst_node->add_host(dst);
-       hosts_[dst] = dst_node->id();
+           dst_node->add_host(dst);
+           hosts_[dst] = dst_node->id();
       }
     }else if (src_node->include(dst)){
       if (dst_node->include(src)){
       }
     }else if (src_node->include(dst)){
       if (dst_node->include(src)){
-       //nothing
+           //nothing
       }else{
       }else{
-       dst_node->add_host(src);
-       hosts_[src] = dst_node->id();
+           dst_node->add_host(src);
+           hosts_[src] = dst_node->id();
       }
     }else if (dst_node->include(src)){
       if (src_node->include(dst)){
       }
     }else if (dst_node->include(src)){
       if (src_node->include(dst)){
-       //nothing
+           //nothing
       }else{
       }else{
-       src_node->add_host(dst);
-       hosts_[dst] = src_node->id();
+           src_node->add_host(dst);
+           hosts_[dst] = src_node->id();
       }
     }else if (dst_node->include(dst)){
       if (src_node->include(src)){
       }
     }else if (dst_node->include(dst)){
       if (src_node->include(src)){
-       //nothing
+           //nothing
       }else{
       }else{
-       src_node->add_host(src);
-       hosts_[src] = src_node->id();
+           src_node->add_host(src);
+           hosts_[src] = src_node->id();
       }
     }else{
       src_node->add_host(src);
       }
     }else{
       src_node->add_host(src);
@@ -419,8 +359,7 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){
       
   }
   else{
       
   }
   else{
-    fprintf(stderr, "Shouldn't be here\n");
-    return -1;
+    xbt_assert0(0, "Shouldn't be here");
   }
   return 0;
 }
   }
   return 0;
 }
@@ -433,13 +372,13 @@ int GTNETS_Topology::nodeid_from_hostid(int hostid){
 }
 
 void GTNETS_Topology::print_topology(){
 }
 
 void GTNETS_Topology::print_topology(){
-  printf("<<<<<================================>>>>>\n");
-  printf("Dumping GTNETS topollogy information\n");
+  DEBUG0("<<<<<================================>>>>>");
+  DEBUG0("Dumping GTNETS topollogy information");
   map<int, GTNETS_Link*>::iterator it;
   for (it = links_.begin(); it != links_.end(); it++){
     it->second->print_link_status();
   }
   map<int, GTNETS_Link*>::iterator it;
   for (it = links_.begin(); it != links_.end(); it++){
     it->second->print_link_status();
   }
-  printf(">>>>>================================<<<<<\n");
+  DEBUG0(">>>>>================================<<<<<");
   fflush(NULL);
 }
 
   fflush(NULL);
 }