Index: trunk/src/plugins/rt_topo/crbs.h =================================================================== --- trunk/src/plugins/rt_topo/crbs.h (revision 1344) +++ trunk/src/plugins/rt_topo/crbs.h (revision 1345) @@ -50,6 +50,8 @@ gdl_list_t twonets; /* of crbs_2net_t */ htad_t addrs; + unsigned disable_concave:1; /* when set to 1, do an all-convex routing */ + /* routing */ grbs_detached_addr_t *first; /* the address the twonet is starting from */ grbs_detached_addr_t *target; /* the address we are trying to reach */ Index: trunk/src/plugins/rt_topo/crbs_route.c =================================================================== --- trunk/src/plugins/rt_topo/crbs_route.c (revision 1344) +++ trunk/src/plugins/rt_topo/crbs_route.c (revision 1345) @@ -276,6 +276,11 @@ while(a->grbs_idx < 4) { printf(" try from %s P%ld to P%ld", from_type, curr->pt->uid, pt->gpt->uid); + if (crbs->disable_concave) { + if (a->grbs_idx < 2) + a->grbs_idx = 2; + } + /* prefer concave over convex; order matters when reaching target: first valid solution will stop the search */ switch(a->grbs_idx) { @@ -572,6 +577,7 @@ memset(&crbs, 0, sizeof(crbs_t)); rt_topo_crbs_cdt_init(ctx, ly, &crbs); + crbs.disable_concave = 1; crbs_init(&crbs, ctx); rtrnd_layer_init(&ly_cdt, "laa");