XBT_PUBLIC(void) TRACE_link_variable_sub_with_time (double time, const char *link, const char *variable, double value);
/* for link variables, but with src and dst used for get_route */
-XBT_PUBLIC(void) TRACE_link_srcdst_variable_set (const char *src, const char *dst, const char *variable, double value);
-XBT_PUBLIC(void) TRACE_link_srcdst_variable_add (const char *src, const char *dst, const char *variable, double value);
-XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub (const char *src, const char *dst, const char *variable, double value);
-XBT_PUBLIC(void) TRACE_link_srcdst_variable_set_with_time (double time, const char *src, const char *dst, const char *variable, double value);
-XBT_PUBLIC(void) TRACE_link_srcdst_variable_add_with_time (double time, const char *src, const char *dst, const char *variable, double value);
-XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub_with_time (double time, const char *src, const char *dst, const char *variable, double value);
+XBT_PUBLIC(void) TRACE_link_srcdst_variable_set (void *src, void *dst, const char *variable, double value);
+XBT_PUBLIC(void) TRACE_link_srcdst_variable_add (void *src, void *dst, const char *variable, double value);
+XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub (void *src, void *dst, const char *variable, double value);
+XBT_PUBLIC(void) TRACE_link_srcdst_variable_set_with_time (double time, void *src, void *dst, const char *variable, double value);
+XBT_PUBLIC(void) TRACE_link_srcdst_variable_add_with_time (double time, void *src, void *dst, const char *variable, double value);
+XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub_with_time (double time, void *src, void *dst, const char *variable, double value);
#else /* HAVE_TRACING */
}
static void instr_user_srcdst_variable(double time,
- const char *src,
- const char *dst,
+ void *src,
+ void *dst,
const char *variable,
const char *father_type,
double value,
}
/* for link variables, but with src and dst used for get_route */
-void TRACE_link_srcdst_variable_set (const char *src, const char *dst, const char *variable, double value)
+void TRACE_link_srcdst_variable_set (void *src, void *dst, const char *variable, double value)
{
TRACE_link_srcdst_variable_set_with_time (MSG_get_clock(), src, dst, variable, value);
}
-void TRACE_link_srcdst_variable_add (const char *src, const char *dst, const char *variable, double value)
+void TRACE_link_srcdst_variable_add (void *src, void *dst, const char *variable, double value)
{
TRACE_link_srcdst_variable_add_with_time (MSG_get_clock(), src, dst, variable, value);
}
-void TRACE_link_srcdst_variable_sub (const char *src, const char *dst, const char *variable, double value)
+void TRACE_link_srcdst_variable_sub (void *src, void *dst, const char *variable, double value)
{
TRACE_link_srcdst_variable_sub_with_time (MSG_get_clock(), src, dst, variable, value);
}
-void TRACE_link_srcdst_variable_set_with_time (double time, const char *src, const char *dst, const char *variable, double value)
+void TRACE_link_srcdst_variable_set_with_time (double time, void *src, void *dst, const char *variable, double value)
{
instr_user_srcdst_variable (time, src, dst, variable, "LINK", value, INSTR_US_SET);
}
-void TRACE_link_srcdst_variable_add_with_time (double time, const char *src, const char *dst, const char *variable, double value)
+void TRACE_link_srcdst_variable_add_with_time (double time, void *src, void *dst, const char *variable, double value)
{
instr_user_srcdst_variable (time, src, dst, variable, "LINK", value, INSTR_US_ADD);
}
-void TRACE_link_srcdst_variable_sub_with_time (double time, const char *src, const char *dst, const char *variable, double value)
+void TRACE_link_srcdst_variable_sub_with_time (double time, void *src, void *dst, const char *variable, double value)
{
instr_user_srcdst_variable (time, src, dst, variable, "LINK", value, INSTR_US_SUB);
}
new->name = xbt_strdup (name); // name of the container
new->id = xbt_strdup (id_str); // id (or alias) of the container
new->father = father;
+
+ //Search for network_element_t
+ switch (kind){
+ case INSTR_HOST:
+ new->net_elm = xbt_lib_get_or_null(host_lib,name,ROUTING_HOST_LEVEL);
+ if(!new->net_elm) xbt_die("Element '%s' not found",name);
+ break;
+ case INSTR_ROUTER:
+ new->net_elm = xbt_lib_get_or_null(as_router_lib,name,ROUTING_ASR_LEVEL);
+ if(!new->net_elm) xbt_die("Element '%s' not found",name);
+ break;
+ case INSTR_AS:
+ new->net_elm = xbt_lib_get_or_null(as_router_lib,name,ROUTING_ASR_LEVEL);
+ if(!new->net_elm) xbt_die("Element '%s' not found",name);
+ break;
+ default:
+ new->net_elm = NULL;
+ break;
+ }
+
// level depends on level of father
if (new->father){
new->level = new->father->level+1;
if (xbt_dict_get_or_null(allContainers, new->name) != NULL){
THROWF(tracing_error, 1, "container %s already present in allContainers data structure", new->name);
}
+
xbt_dict_set (allContainers, new->name, new, NULL);
+ XBT_DEBUG("Add container name '%s'",new->name);
//register NODE types for triva configuration
if (new->kind == INSTR_HOST || new->kind == INSTR_LINK || new->kind == INSTR_ROUTER) {
xbt_dict_set (trivaNodeTypes, new->type->name, xbt_strdup("1"), NULL);
}
+
return new;
}
typedef struct s_container *container_t;
typedef struct s_container {
+ void *net_elm; /* network_element_t */
char *name; /* Unique name of this container */
char *id; /* Unique id of this container */
type_t type; /* Type of this container */
xbt_ex_t e;
TRY {
- routing_get_route_and_latency(child1_name, child2_name, &route, NULL);
+ routing_get_route_and_latency((network_element_t)(child1->net_elm),
+ (network_element_t)(child2->net_elm),
+ &route, NULL);
} CATCH(e) {
xbt_ex_free(e);
}
route_t route = xbt_new0(s_route_t,1);
route->link_list = xbt_dynar_new(global_routing->size_of_link,NULL);
- rc->get_route_and_latency (rc, child1_name, child2_name, route,NULL);
+ rc->get_route_and_latency (rc,
+ (network_element_t)(child1->net_elm),
+ (network_element_t)(child2->net_elm), route,NULL);
unsigned int cpt;
void *link;
- container_t previous = PJ_container_get(route->src_gateway);
+ container_t previous = PJ_container_get(route->src_gateway->name);
xbt_dynar_foreach (route->link_list, cpt, link) {
char *link_name = ((link_CM02_t)link)->lmm_resource.generic_resource.name;
container_t current = PJ_container_get(link_name);
linkContainers (previous, current, filter);
previous = current;
}
- container_t last = PJ_container_get(route->dst_gateway);
+ container_t last = PJ_container_get(route->dst_gateway->name);
linkContainers (previous, last, filter);
generic_free_route(route);
}
// FIXME factorize route creation with else branch below (once possible)
xbt_dynar_t route=NULL;
- routing_get_route_and_latency (child1_name, child2_name,&route,NULL);
+ routing_get_route_and_latency ((network_element_t)(child1->net_elm),
+ (network_element_t)(child2->net_elm),
+ &route,NULL);
if (TRACE_onelink_only()){
if (xbt_dynar_length (route) > 1) continue;
}
route_t route = xbt_new0(s_route_t,1);
route->link_list = xbt_dynar_new(global_routing->size_of_link,NULL);
- rc->get_route_and_latency (rc, child1_name, child2_name,route, NULL);
+ rc->get_route_and_latency (rc,
+ (network_element_t)(child1->net_elm),
+ (network_element_t)(child2->net_elm),route, NULL);
unsigned int cpt;
void *link;
- xbt_node_t current, previous = new_xbt_graph_node(graph, route->src_gateway, nodes);
+ xbt_node_t current, previous = new_xbt_graph_node(graph, route->src_gateway->name, nodes);
xbt_dynar_foreach (route->link_list, cpt, link) {
char *link_name = ((link_CM02_t)link)->lmm_resource.generic_resource.name;
current = new_xbt_graph_node(graph, link_name, nodes);
//previous -> current
previous = current;
}
- current = new_xbt_graph_node(graph, route->dst_gateway, nodes);
+ current = new_xbt_graph_node(graph, route->dst_gateway->name, nodes);
new_xbt_graph_edge (graph, previous, current, edges);
generic_free_route(route);
}
double data_delta_sent = data_sent - action->last_sent;
xbt_dynar_t route = NULL;
- routing_get_route_and_latency (action->src_name, action->dst_name, &route, NULL);
+
+ routing_get_route_and_latency (action->src_elm, action->dst_elm, &route, NULL);
unsigned int i;
for (i = 0; i < xbt_dynar_length (route); i++){
surf_ns3_link_t *link = ((surf_ns3_link_t*)xbt_dynar_get_ptr (route, i));
#ifdef HAVE_TRACING
action->last_sent = 0;
- action->src_name = xbt_strdup (src_name);
- action->dst_name = xbt_strdup (dst_name);
+ action->src_elm = src_elm;
+ action->dst_elm = dst_elm;
#endif
return (surf_action_t) action;
xbt_swag_remove(action, action->state_set);
#ifdef HAVE_TRACING
- xbt_free(((surf_action_network_ns3_t)action)->src_name);
- xbt_free(((surf_action_network_ns3_t)action)->dst_name);
xbt_free(action->category);
#endif
XBT_DEBUG ("Removing action %p", action);
s_surf_action_t generic_action;
#ifdef HAVE_TRACING
double last_sent;
- char *src_name;
- char *dst_name;
+ network_element_t src_elm;
+ network_element_t dst_elm;
#endif //HAVE_TRACING
} s_surf_action_network_ns3_t, *surf_action_network_ns3_t;
-
#endif /* _SURF_NETWORK_NS3_PRIVATE_H */