X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bdf1e8354f898d50fc3ca7b01afdb12140f0ab0e..2c8e75834bbb63acef15c560c3de978ab3cb6fbf:/src/surf/gtnets/gtnets_topology.cc diff --git a/src/surf/gtnets/gtnets_topology.cc b/src/surf/gtnets/gtnets_topology.cc index 7978192c4e..dcdee61699 100644 --- a/src/surf/gtnets/gtnets_topology.cc +++ b/src/surf/gtnets/gtnets_topology.cc @@ -9,6 +9,15 @@ //Temporary classes for generating GTNetS topology #include "gtnets_topology.h" +#ifdef DEBUG0 + #undef DEBUG0 +#endif +#include "xbt/log.h" +#include "xbt/asserts.h" +#include //for fflush in print_topology + +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets_topology, surf_network_gtnets, + "Logging specific to the SURF network GTNetS simulator"); // // GTNETS_Node @@ -29,10 +38,7 @@ GTNETS_Node::~GTNETS_Node(){ // 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; } @@ -40,17 +46,10 @@ 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){ - 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"); + if (hosts_.size() == 1){ + xbt_assert1((hosts_.find(routerid) != hosts_.end()), "Node %d is a different router", routerid); + return 0; } is_router_ = true; hosts_.insert(routerid); @@ -68,11 +67,9 @@ bool GTNETS_Node::include(int hostid){ void GTNETS_Node::print_hosts(){ set::iterator it; - printf("["); for (it = hosts_.begin(); it != hosts_.end(); it++){ - printf(" %d", *it); + DEBUG1("host id %d", *it); } - printf("]"); } // @@ -99,19 +96,13 @@ GTNETS_Link::~GTNETS_Link(){ } void GTNETS_Link::print_link_status(){ - printf("== LINKID: %d\n", ID_); + DEBUG1("****** link id: %d", ID_); if (src_node_){ - printf(" [SRC] ID: %d, router?: %d, hosts[]: ", - src_node_->id(), src_node_->is_router()); - src_node_->print_hosts(); - printf("\n"); + DEBUG2("[src] id: %d, is it router?: %d",src_node_->id(), src_node_->is_router()); } if (dst_node_){ - printf(" [DST] ID: %d, router?: %d, hosts[]: ", - dst_node_->id(), dst_node_->is_router()); - dst_node_->print_hosts(); - printf("\n"); + DEBUG2("[dst] id: %d, is it router?: %d",dst_node_->id(), dst_node_->is_router()); } } @@ -130,12 +121,10 @@ bool GTNETS_Link::route_exists(){ // 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(); - else { - fprintf(stderr, "node not found\n"); - return -1; - } } int GTNETS_Link::add_src(GTNETS_Node* src){ @@ -179,30 +168,23 @@ int GTNETS_Topology::node_size(){ int GTNETS_Topology::add_link(int id){ map::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); - //printf("link %d is added: %d\n", id, link->id()); - //links_.insert(make_pair(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::iterator iter = routers_.find(id); - - if(iter == routers_.end()) { - //printf("router %d is inserted\n", id); - routers_.insert(id); - return 0; + if(iter == routers_.end()){ + routers_.insert(id); }else{ - fprintf(stderr, "Router %d already exists.\n", id); - return -1; + DEBUG1("Router (#%d) already exists", id); } + return 0; } bool GTNETS_Topology::is_router(int id){ @@ -213,21 +195,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){ - //printf("linkid: %d, cur_id: %d\n", linkid, cur_id); 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()); - if (peer < 0){ - fprintf(stderr, "peer not found\n"); - return -1; - } + xbt_assert0(!(peer < 0), "Peer not found"); + return peer; } @@ -236,24 +210,18 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){ map::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(); - // If not exists a route, add one. if (!link->route_exists()){ - //check whether there exists a node for the src host/router. + //check whether there exists a node for the src. int s_node_id = nodeid_from_hostid(src); int node_id; @@ -289,11 +257,8 @@ 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]); - - // other: has either src or dst (error) - }else if (!src_node || !dst_node){ - fprintf(stderr, "Either src or dst is null\n"); - return -1; + }else if (!(src_node && dst_node)){ + xbt_assert0((src_node && dst_node), "Either src or dst is null"); } // case 1: link has two routers @@ -302,39 +267,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); - 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; + 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; - }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. - - 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); @@ -343,29 +296,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; + 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; - }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. - - 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); @@ -375,40 +318,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()){ - - 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)){ - //nothing + //nothing }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)){ - //nothing + //nothing }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)){ - //nothing + //nothing }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)){ - //nothing + //nothing }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); @@ -419,9 +358,9 @@ int GTNETS_Topology::add_onehop_route(int src, int dst, int linkid){ } else{ - fprintf(stderr, "Shouldn't be here\n"); - return -1; + xbt_assert0(0, "Shouldn't be here"); } + return 0; } @@ -433,13 +372,13 @@ int GTNETS_Topology::nodeid_from_hostid(int hostid){ } void GTNETS_Topology::print_topology(){ - printf("<<<<<================================>>>>>\n"); - printf("Dumping GTNETS topollogy information\n"); + DEBUG0("<<<<<================================>>>>>"); + DEBUG0("Dumping GTNETS topollogy information"); map::iterator it; for (it = links_.begin(); it != links_.end(); it++){ it->second->print_link_status(); } - printf(">>>>>================================<<<<<\n"); + DEBUG0(">>>>>================================<<<<<"); fflush(NULL); }