Also, make this type visible from simgrid/platf.h since we need to
manipulate it to create routes efficiently
23 files changed:
#include <xbt.h>
typedef void *sg_routing_link_t; /* The actual type is model-dependent so use void* instead*/
#include <xbt.h>
typedef void *sg_routing_link_t; /* The actual type is model-dependent so use void* instead*/
+typedef struct s_routing_edge *sg_routing_edge_t;
+
typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */
typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */
void (*add_traces) (void);
} s_surf_model_extension_cpu_t;
void (*add_traces) (void);
} s_surf_model_extension_cpu_t;
-typedef struct s_network_element_info *network_element_t;
-
/* Network model */
/** \ingroup SURF_models
/* Network model */
/** \ingroup SURF_models
* Public functions specific to the network model
*/
typedef struct surf_network_model_extension_public {
* Public functions specific to the network model
*/
typedef struct surf_network_model_extension_public {
- surf_action_t (*communicate) (network_element_t src,
- network_element_t dst,
+ surf_action_t (*communicate) (sg_routing_edge_t src,
+ sg_routing_edge_t dst,
double size, double rate);
xbt_dynar_t(*get_route) (void *src, void *dst); //FIXME: kill field? That is done by the routing nowadays
double (*get_link_bandwidth) (const void *link);
double size, double rate);
xbt_dynar_t(*get_route) (void *src, void *dst); //FIXME: kill field? That is done by the routing nowadays
double (*get_link_bandwidth) (const void *link);
return xbt_lib_get_or_null(host_lib, name, SURF_WKS_LEVEL);
}
static inline void *surf_network_resource_by_name(const char *name){
return xbt_lib_get_or_null(host_lib, name, SURF_WKS_LEVEL);
}
static inline void *surf_network_resource_by_name(const char *name){
- network_element_t net_elm = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL);
+ sg_routing_edge_t net_elm = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL);
if(!net_elm) net_elm = xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL);
return net_elm;
}
if(!net_elm) net_elm = xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL);
return net_elm;
}
InstrUserVariable what)
{
xbt_dynar_t route=NULL;
InstrUserVariable what)
{
xbt_dynar_t route=NULL;
- network_element_t src_elm = xbt_lib_get_or_null(host_lib,src,ROUTING_HOST_LEVEL);
+ sg_routing_edge_t src_elm = xbt_lib_get_or_null(host_lib,src,ROUTING_HOST_LEVEL);
if(!src_elm) src_elm = xbt_lib_get_or_null(as_router_lib,src,ROUTING_ASR_LEVEL);
if(!src_elm) xbt_die("Element '%s' not found!",src);
if(!src_elm) src_elm = xbt_lib_get_or_null(as_router_lib,src,ROUTING_ASR_LEVEL);
if(!src_elm) xbt_die("Element '%s' not found!",src);
- network_element_t dst_elm = xbt_lib_get_or_null(host_lib,dst,ROUTING_HOST_LEVEL);
+ sg_routing_edge_t dst_elm = xbt_lib_get_or_null(host_lib,dst,ROUTING_HOST_LEVEL);
if(!dst_elm) dst_elm = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
if(!dst_elm) xbt_die("Element '%s' not found!",dst);
if(!dst_elm) dst_elm = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
if(!dst_elm) xbt_die("Element '%s' not found!",dst);
typedef struct s_container *container_t;
typedef struct s_container {
typedef struct s_container *container_t;
typedef struct s_container {
- network_element_t net_elm;
+ sg_routing_edge_t net_elm;
char *name; /* Unique name of this container */
char *id; /* Unique id of this container */
type_t type; /* Type of this container */
char *name; /* Unique name of this container */
char *id; /* Unique id of this container */
type_t type; /* Type of this container */
-static surf_action_t net_communicate(network_element_t src,
- network_element_t dst,
+static surf_action_t net_communicate(sg_routing_edge_t src,
+ sg_routing_edge_t dst,
double size, double rate)
{
unsigned int i;
double size, double rate)
{
unsigned int i;
-static surf_action_t netcste_communicate(network_element_t src,
- network_element_t dst,
+static surf_action_t netcste_communicate(sg_routing_edge_t src,
+ sg_routing_edge_t dst,
double size, double rate)
{
surf_action_network_Constant_t action = NULL;
double size, double rate)
{
surf_action_network_Constant_t action = NULL;
}
/* Max durations are not supported */
}
/* Max durations are not supported */
-static surf_action_t communicate(network_element_t src_card,
- network_element_t dst_card,
+static surf_action_t communicate(sg_routing_edge_t src_card,
+ sg_routing_edge_t dst_card,
double size, double rate)
{
surf_action_network_GTNETS_t action = NULL;
double size, double rate)
{
surf_action_network_GTNETS_t action = NULL;
double rate;
int suspended;
#ifdef HAVE_TRACING
double rate;
int suspended;
#ifdef HAVE_TRACING
- network_element_t src;
- network_element_t dst;
+ sg_routing_edge_t src;
+ sg_routing_edge_t dst;
#endif //HAVE_TRACING
} s_surf_action_network_GTNETS_t, *surf_action_network_GTNETS_t;
#endif //HAVE_TRACING
} s_surf_action_network_GTNETS_t, *surf_action_network_GTNETS_t;
static double ns3_share_resources(double min);
static void ns3_update_actions_state(double now, double delta);
static void finalize(void);
static double ns3_share_resources(double min);
static void ns3_update_actions_state(double now, double delta);
static void finalize(void);
-static surf_action_t ns3_communicate(network_element_t src_elm,
- network_element_t dst_elm,
+static surf_action_t ns3_communicate(sg_routing_edge_t src_elm,
+ sg_routing_edge_t dst_elm,
double size, double rate);
static void action_suspend(surf_action_t action);
static void action_resume(surf_action_t action);
double size, double rate);
static void action_suspend(surf_action_t action);
static void action_resume(surf_action_t action);
}
/* Max durations are not supported */
}
/* Max durations are not supported */
-static surf_action_t ns3_communicate(network_element_t src_elm,
- network_element_t dst_elm,
+static surf_action_t ns3_communicate(sg_routing_edge_t src_elm,
+ sg_routing_edge_t dst_elm,
double size, double rate)
{
surf_action_network_ns3_t action = NULL;
double size, double rate)
{
surf_action_network_ns3_t action = NULL;
static XBT_INLINE void routing_asr_host_free(void *p)
{
static XBT_INLINE void routing_asr_host_free(void *p)
{
- network_element_t elm = p;
+ sg_routing_edge_t elm = p;
free(elm->name);
xbt_free(elm);
}
free(elm->name);
xbt_free(elm);
}
int __surf_is_absolute_file_path(const char *file_path);
typedef struct s_as *AS_t;
int __surf_is_absolute_file_path(const char *file_path);
typedef struct s_as *AS_t;
-typedef struct s_network_element_info {
+typedef struct s_routing_edge {
AS_t rc_component;
e_surf_network_element_type_t rc_type;
int id;
AS_t rc_component;
e_surf_network_element_type_t rc_type;
int id;
* Link of lenght 1, alongside with its source and destination. This is mainly usefull in the bindings to gtnets and ns3
*/
typedef struct s_onelink {
* Link of lenght 1, alongside with its source and destination. This is mainly usefull in the bindings to gtnets and ns3
*/
typedef struct s_onelink {
- network_element_t src;
- network_element_t dst;
+ sg_routing_edge_t src;
+ sg_routing_edge_t dst;
void *link_ptr;
} s_onelink_t, *onelink_t;
void *link_ptr;
} s_onelink_t, *onelink_t;
typedef struct s_route {
xbt_dynar_t link_list;
typedef struct s_route {
xbt_dynar_t link_list;
- network_element_t src_gateway;
- network_element_t dst_gateway;
+ sg_routing_edge_t src_gateway;
+ sg_routing_edge_t dst_gateway;
} s_route_t, *route_t;
/* This enum used in the routing structure helps knowing in which situation we are. */
} s_route_t, *route_t;
/* This enum used in the routing structure helps knowing in which situation we are. */
char *name;
struct s_as *routing_father;
xbt_dict_t routing_sons;
char *name;
struct s_as *routing_father;
xbt_dict_t routing_sons;
- network_element_t net_elem;
+ sg_routing_edge_t net_elem;
xbt_dynar_t link_up_down_list;
xbt_dynar_t link_up_down_list;
- void (*get_route_and_latency) (AS_t as, network_element_t src, network_element_t dst, route_t into, double *latency);
+ void (*get_route_and_latency) (AS_t as, sg_routing_edge_t src, sg_routing_edge_t dst, route_t into, double *latency);
xbt_dynar_t(*get_onelink_routes) (AS_t as);
xbt_dynar_t(*get_onelink_routes) (AS_t as);
- route_t(*get_bypass_route) (AS_t as, network_element_t src, network_element_t dst, double *lat);
+ route_t(*get_bypass_route) (AS_t as, sg_routing_edge_t src, sg_routing_edge_t dst, double *lat);
void (*finalize) (AS_t as);
void (*finalize) (AS_t as);
* that a new element is added to the AS currently built.
*
* Of course, only the routing model of this AS is informed, not every ones */
* that a new element is added to the AS currently built.
*
* Of course, only the routing model of this AS is informed, not every ones */
- int (*parse_PU) (AS_t as, network_element_t elm); /* A host or a router, whatever */
- int (*parse_AS) (AS_t as, network_element_t elm);
+ int (*parse_PU) (AS_t as, sg_routing_edge_t elm); /* A host or a router, whatever */
+ int (*parse_AS) (AS_t as, sg_routing_edge_t elm);
void (*parse_route) (AS_t as, const char *src,
const char *dst, route_t route);
void (*parse_ASroute) (AS_t as, const char *src,
void (*parse_route) (AS_t as, const char *src,
const char *dst, route_t route);
void (*parse_ASroute) (AS_t as, const char *src,
// FIXME: make previous function private to routing again?
// FIXME: make previous function private to routing again?
-XBT_PUBLIC(void) routing_get_route_and_latency(network_element_t src, network_element_t dst,
+XBT_PUBLIC(void) routing_get_route_and_latency(sg_routing_edge_t src, sg_routing_edge_t dst,
xbt_dynar_t * route, double *latency);
/**
xbt_dynar_t * route, double *latency);
/**
*/
static void parse_S_host(sg_platf_host_cbarg_t host)
{
*/
static void parse_S_host(sg_platf_host_cbarg_t host)
{
- network_element_t info = NULL;
+ sg_routing_edge_t info = NULL;
if (current_routing->hierarchy == SURF_ROUTING_NULL)
current_routing->hierarchy = SURF_ROUTING_BASE;
xbt_assert(!xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL),
if (current_routing->hierarchy == SURF_ROUTING_NULL)
current_routing->hierarchy = SURF_ROUTING_BASE;
xbt_assert(!xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL),
*/
static void parse_S_router(sg_platf_router_cbarg_t router)
{
*/
static void parse_S_router(sg_platf_router_cbarg_t router)
{
- network_element_t info = NULL;
+ sg_routing_edge_t info = NULL;
if (current_routing->hierarchy == SURF_ROUTING_NULL)
current_routing->hierarchy = SURF_ROUTING_BASE;
xbt_assert(!xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL),
if (current_routing->hierarchy == SURF_ROUTING_NULL)
current_routing->hierarchy = SURF_ROUTING_BASE;
xbt_assert(!xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL),
e_route->link_list = parsed_link_list;
if (!strcmp(current_routing->model_desc->name,"RuleBased")) {
e_route->link_list = parsed_link_list;
if (!strcmp(current_routing->model_desc->name,"RuleBased")) {
- e_route->src_gateway = (network_element_t) gw_src; // DIRTY HACK possible only
- e_route->dst_gateway = (network_element_t) gw_dst; // because of what is in routing_parse_E_ASroute
+ e_route->src_gateway = (sg_routing_edge_t) gw_src; // DIRTY HACK possible only
+ e_route->dst_gateway = (sg_routing_edge_t) gw_dst; // because of what is in routing_parse_E_ASroute
} else {
e_route->src_gateway = xbt_lib_get_or_null(as_router_lib, gw_src,
ROUTING_ASR_LEVEL);
} else {
e_route->src_gateway = xbt_lib_get_or_null(as_router_lib, gw_src,
ROUTING_ASR_LEVEL);
new_as->hierarchy = SURF_ROUTING_NULL;
new_as->name = xbt_strdup(AS_id);
new_as->hierarchy = SURF_ROUTING_NULL;
new_as->name = xbt_strdup(AS_id);
- network_element_t info = NULL;
+ sg_routing_edge_t info = NULL;
info = xbt_new0(s_network_element_t, 1);
if (current_routing == NULL && global_routing->root == NULL) {
info = xbt_new0(s_network_element_t, 1);
if (current_routing == NULL && global_routing->root == NULL) {
* Get the common father of the to processing units, and the first different
* father in the chain
*/
* Get the common father of the to processing units, and the first different
* father in the chain
*/
-static void elements_father(network_element_t src, network_element_t dst,
+static void elements_father(sg_routing_edge_t src, sg_routing_edge_t dst,
AS_t * res_father,
AS_t * res_src,
AS_t * res_dst)
AS_t * res_father,
AS_t * res_src,
AS_t * res_dst)
AS_t father;
/* (1) find the as where the src and dst are located */
AS_t father;
/* (1) find the as where the src and dst are located */
- network_element_t src_data = src;
- network_element_t dst_data = dst;
+ sg_routing_edge_t src_data = src;
+ sg_routing_edge_t dst_data = dst;
src_as = src_data->rc_component;
dst_as = dst_data->rc_component;
#ifndef NDEBUG
src_as = src_data->rc_component;
dst_as = dst_data->rc_component;
#ifndef NDEBUG
* This function is called by "get_route" and "get_latency". It allows to walk
* recursively through the ASes tree.
*/
* This function is called by "get_route" and "get_latency". It allows to walk
* recursively through the ASes tree.
*/
-static void _get_route_and_latency(network_element_t src, network_element_t dst,
+static void _get_route_and_latency(sg_routing_edge_t src, sg_routing_edge_t dst,
xbt_dynar_t * links, double *latency)
{
s_route_t route;
xbt_dynar_t * links, double *latency)
{
s_route_t route;
route.link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
// Find the net_card corresponding to father
route.link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
// Find the net_card corresponding to father
- network_element_t src_father_net_elm = src_father->net_elem;
- network_element_t dst_father_net_elm = dst_father->net_elem;
+ sg_routing_edge_t src_father_net_elm = src_father->net_elem;
+ sg_routing_edge_t dst_father_net_elm = dst_father->net_elem;
common_father->get_route_and_latency(common_father, src_father_net_elm, dst_father_net_elm, &route,latency);
xbt_assert((route.src_gateway != NULL) && (route.dst_gateway != NULL),
"bad gateways for route from \"%s\" to \"%s\"", src->name, dst->name);
common_father->get_route_and_latency(common_father, src_father_net_elm, dst_father_net_elm, &route,latency);
xbt_assert((route.src_gateway != NULL) && (route.dst_gateway != NULL),
"bad gateways for route from \"%s\" to \"%s\"", src->name, dst->name);
- network_element_t src_gateway_net_elm = route.src_gateway;
- network_element_t dst_gateway_net_elm = route.dst_gateway;
+ sg_routing_edge_t src_gateway_net_elm = route.src_gateway;
+ sg_routing_edge_t dst_gateway_net_elm = route.dst_gateway;
/* If source gateway is not our source, we have to recursively find our way up to this point */
if (src != src_gateway_net_elm)
/* If source gateway is not our source, we have to recursively find our way up to this point */
if (src != src_gateway_net_elm)
* walk through the routing components tree and find a route between hosts
* by calling the differents "get_route" functions in each routing component.
*/
* walk through the routing components tree and find a route between hosts
* by calling the differents "get_route" functions in each routing component.
*/
-void routing_get_route_and_latency(network_element_t src,
- network_element_t dst,
+void routing_get_route_and_latency(sg_routing_edge_t src,
+ sg_routing_edge_t dst,
xbt_dynar_t * route, double *latency)
{
XBT_DEBUG("routing_get_route_and_latency from %s to %s",src->name,dst->name);
xbt_dynar_t * route, double *latency)
{
XBT_DEBUG("routing_get_route_and_latency from %s to %s",src->name,dst->name);
e_surf_network_element_type_t routing_get_network_element_type(const char *name)
{
e_surf_network_element_type_t routing_get_network_element_type(const char *name)
{
- network_element_t rc = NULL;
+ sg_routing_edge_t rc = NULL;
rc = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL);
if (rc)
rc = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL);
if (rc)
/* Business methods */
static void cluster_get_route_and_latency(AS_t as,
/* Business methods */
static void cluster_get_route_and_latency(AS_t as,
- network_element_t src, network_element_t dst,
+ sg_routing_edge_t src, sg_routing_edge_t dst,
route_t route, double *lat) {
s_surf_parsing_link_up_down_t info;
route_t route, double *lat) {
s_surf_parsing_link_up_down_t info;
model_none_finalize(as);
}
model_none_finalize(as);
}
-static int cluster_parse_PU(AS_t rc, network_element_t elm) {
+static int cluster_parse_PU(AS_t rc, sg_routing_edge_t elm) {
XBT_DEBUG("Load process unit \"%s\"", elm->name);
XBT_DEBUG("Load process unit \"%s\"", elm->name);
- xbt_dynar_push_as(rc->index_network_elm,network_element_t,elm);
+ xbt_dynar_push_as(rc->index_network_elm,sg_routing_edge_t,elm);
return xbt_dynar_length(rc->index_network_elm)-1;
}
return xbt_dynar_length(rc->index_network_elm)-1;
}
-static int cluster_parse_AS(AS_t rc, network_element_t elm) {
+static int cluster_parse_AS(AS_t rc, sg_routing_edge_t elm) {
XBT_DEBUG("Load Autonomous system \"%s\"", elm->name);
XBT_DEBUG("Load Autonomous system \"%s\"", elm->name);
- xbt_dynar_push_as(rc->index_network_elm,network_element_t,elm);
+ xbt_dynar_push_as(rc->index_network_elm,sg_routing_edge_t,elm);
return xbt_dynar_length(rc->index_network_elm)-1;
}
return xbt_dynar_length(rc->index_network_elm)-1;
}
}
static void dijkstra_get_route_and_latency(AS_t as_generic,
}
static void dijkstra_get_route_and_latency(AS_t as_generic,
- network_element_t src, network_element_t dst, route_t route, double *lat);
+ sg_routing_edge_t src, sg_routing_edge_t dst, route_t route, double *lat);
static xbt_dynar_t dijkstra_get_onelink_routes(AS_t as)
{
static xbt_dynar_t dijkstra_get_onelink_routes(AS_t as)
{
route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
int src,dst;
route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
int src,dst;
- network_element_t src_elm, dst_elm;
+ sg_routing_edge_t src_elm, dst_elm;
size_t table_size = xbt_dynar_length(as->index_network_elm);
for(src=0; src < table_size; src++) {
for(dst=0; dst< table_size; dst++) {
xbt_dynar_reset(route->link_list);
size_t table_size = xbt_dynar_length(as->index_network_elm);
for(src=0; src < table_size; src++) {
for(dst=0; dst< table_size; dst++) {
xbt_dynar_reset(route->link_list);
- src_elm = xbt_dynar_get_as(as->index_network_elm,src,network_element_t);
- dst_elm = xbt_dynar_get_as(as->index_network_elm,dst,network_element_t);
+ src_elm = xbt_dynar_get_as(as->index_network_elm,src,sg_routing_edge_t);
+ dst_elm = xbt_dynar_get_as(as->index_network_elm,dst,sg_routing_edge_t);
dijkstra_get_route_and_latency(as, src_elm, dst_elm,route, NULL);
if (xbt_dynar_length(route->link_list) == 1) {
dijkstra_get_route_and_latency(as, src_elm, dst_elm,route, NULL);
if (xbt_dynar_length(route->link_list) == 1) {
}
static void dijkstra_get_route_and_latency(AS_t asg,
}
static void dijkstra_get_route_and_latency(AS_t asg,
- network_element_t src, network_element_t dst,
+ sg_routing_edge_t src, sg_routing_edge_t dst,
route_t route, double *lat)
{
route_t route, double *lat)
{
}
/* compose route path with links */
}
/* compose route path with links */
- network_element_t gw_src = NULL, gw_dst, prev_gw_src, first_gw = NULL;
- network_element_t gw_dst_net_elm = NULL, prev_gw_src_net_elm = NULL;
+ sg_routing_edge_t gw_src = NULL, gw_dst, prev_gw_src, first_gw = NULL;
+ sg_routing_edge_t gw_dst_net_elm = NULL, prev_gw_src_net_elm = NULL;
for (v = dst_node_id; v != src_node_id; v = pred_arr[v]) {
xbt_node_t node_pred_v =
for (v = dst_node_id; v != src_node_id; v = pred_arr[v]) {
xbt_node_t node_pred_v =
}
as_dijkstra_t as = (as_dijkstra_t) asg;
}
as_dijkstra_t as = (as_dijkstra_t) asg;
- network_element_t src_net_elm, dst_net_elm;
+ sg_routing_edge_t src_net_elm, dst_net_elm;
src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL);
dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL);
src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL);
dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL);
THROWF(arg_error,0,"(AS)Route from '%s' to '%s' already exists",src,dst);
if (route->dst_gateway && route->src_gateway) {
THROWF(arg_error,0,"(AS)Route from '%s' to '%s' already exists",src,dst);
if (route->dst_gateway && route->src_gateway) {
- network_element_t gw_tmp;
+ sg_routing_edge_t gw_tmp;
gw_tmp = route->src_gateway;
route->src_gateway = route->dst_gateway;
route->dst_gateway = gw_tmp;
gw_tmp = route->src_gateway;
route->src_gateway = route->dst_gateway;
route->dst_gateway = gw_tmp;
route_t *link_table;
} s_as_floyd_t, *as_floyd_t;
route_t *link_table;
} s_as_floyd_t, *as_floyd_t;
-static void floyd_get_route_and_latency(AS_t asg, network_element_t src, network_element_t dst,
+static void floyd_get_route_and_latency(AS_t asg, sg_routing_edge_t src, sg_routing_edge_t dst,
route_t res, double *lat);
/* Business methods */
route_t res, double *lat);
/* Business methods */
route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
int src,dst;
route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
int src,dst;
- network_element_t src_elm, dst_elm;
+ sg_routing_edge_t src_elm, dst_elm;
int table_size = xbt_dynar_length(asg->index_network_elm);
for(src=0; src < table_size; src++) {
for(dst=0; dst< table_size; dst++) {
xbt_dynar_reset(route->link_list);
int table_size = xbt_dynar_length(asg->index_network_elm);
for(src=0; src < table_size; src++) {
for(dst=0; dst< table_size; dst++) {
xbt_dynar_reset(route->link_list);
- src_elm = xbt_dynar_get_as(asg->index_network_elm,src,network_element_t);
- dst_elm = xbt_dynar_get_as(asg->index_network_elm,dst,network_element_t);
+ src_elm = xbt_dynar_get_as(asg->index_network_elm,src,sg_routing_edge_t);
+ dst_elm = xbt_dynar_get_as(asg->index_network_elm,dst,sg_routing_edge_t);
floyd_get_route_and_latency(asg, src_elm, dst_elm, route, NULL);
if (xbt_dynar_length(route->link_list) == 1) {
floyd_get_route_and_latency(asg, src_elm, dst_elm, route, NULL);
if (xbt_dynar_length(route->link_list) == 1) {
-static void floyd_get_route_and_latency(AS_t asg, network_element_t src, network_element_t dst,
+static void floyd_get_route_and_latency(AS_t asg, sg_routing_edge_t src, sg_routing_edge_t dst,
route_t res, double *lat)
{
route_t res, double *lat)
{
int first = 1;
int pred = *dst_id;
int prev_pred = 0;
int first = 1;
int pred = *dst_id;
int prev_pred = 0;
- network_element_t gw_src, gw_dst, prev_gw_src, first_gw;
+ sg_routing_edge_t gw_src, gw_dst, prev_gw_src, first_gw;
unsigned int cpt;
void *link;
xbt_dynar_t links;
unsigned int cpt;
void *link;
xbt_dynar_t links;
/* set the size of table routing */
size_t table_size = xbt_dynar_length(rc->index_network_elm);
/* set the size of table routing */
size_t table_size = xbt_dynar_length(rc->index_network_elm);
- network_element_t src_net_elm, dst_net_elm;
+ sg_routing_edge_t src_net_elm, dst_net_elm;
src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL);
dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL);
src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL);
dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL);
{
if(route->dst_gateway && route->src_gateway)
{
{
if(route->dst_gateway && route->src_gateway)
{
- network_element_t gw_src = route->src_gateway;
- network_element_t gw_dst = route->dst_gateway;
+ sg_routing_edge_t gw_src = route->src_gateway;
+ sg_routing_edge_t gw_dst = route->dst_gateway;
route->src_gateway = gw_dst;
route->dst_gateway = gw_src;
}
route->src_gateway = gw_dst;
route->dst_gateway = gw_src;
}
onelink_t onelink = xbt_new0(s_onelink_t, 1);
onelink->link_ptr = link;
if (rc->hierarchy == SURF_ROUTING_BASE) {
onelink_t onelink = xbt_new0(s_onelink_t, 1);
onelink->link_ptr = link;
if (rc->hierarchy == SURF_ROUTING_BASE) {
- onelink->src = xbt_dynar_get_as(rc->index_network_elm,src,network_element_t);
+ onelink->src = xbt_dynar_get_as(rc->index_network_elm,src,sg_routing_edge_t);
- onelink->dst = xbt_dynar_get_as(rc->index_network_elm,dst,network_element_t);
+ onelink->dst = xbt_dynar_get_as(rc->index_network_elm,dst,sg_routing_edge_t);
onelink->dst->id = dst;
} else if (rc->hierarchy == SURF_ROUTING_RECURSIVE) {
onelink->src = route->src_gateway;
onelink->dst->id = dst;
} else if (rc->hierarchy == SURF_ROUTING_RECURSIVE) {
onelink->src = route->src_gateway;
}
static void full_get_route_and_latency(AS_t rc,
}
static void full_get_route_and_latency(AS_t rc,
- network_element_t src, network_element_t dst,
+ sg_routing_edge_t src, sg_routing_edge_t dst,
route_t res, double *lat)
{
XBT_DEBUG("full_get_route_and_latency from %s[%d] to %s[%d]",
route_t res, double *lat)
{
XBT_DEBUG("full_get_route_and_latency from %s[%d] to %s[%d]",
void model_full_set_route(AS_t rc, const char *src,
const char *dst, route_t route)
{
void model_full_set_route(AS_t rc, const char *src,
const char *dst, route_t route)
{
- network_element_t src_net_elm, dst_net_elm;
+ sg_routing_edge_t src_net_elm, dst_net_elm;
int as_route = 0;
src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL);
dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL);
int as_route = 0;
src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL);
dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL);
|| (A_surfxml_ASroute_symmetrical == A_surfxml_ASroute_symmetrical_YES && as_route == 1)
) {
if (route->dst_gateway && route->src_gateway) {
|| (A_surfxml_ASroute_symmetrical == A_surfxml_ASroute_symmetrical_YES && as_route == 1)
) {
if (route->dst_gateway && route->src_gateway) {
- network_element_t gw_tmp;
+ sg_routing_edge_t gw_tmp;
gw_tmp = route->src_gateway;
route->src_gateway = route->dst_gateway;
route->dst_gateway = gw_tmp;
gw_tmp = route->src_gateway;
route->src_gateway = route->dst_gateway;
route->dst_gateway = gw_tmp;
model_none_finalize(as);
}
model_none_finalize(as);
}
-int generic_parse_PU(AS_t as, network_element_t elm)
+int generic_parse_PU(AS_t as, sg_routing_edge_t elm)
{
XBT_DEBUG("Load process unit \"%s\"", elm->name);
{
XBT_DEBUG("Load process unit \"%s\"", elm->name);
- xbt_dynar_push_as(as->index_network_elm,network_element_t,elm);
+ xbt_dynar_push_as(as->index_network_elm,sg_routing_edge_t,elm);
return xbt_dynar_length(as->index_network_elm)-1;
}
return xbt_dynar_length(as->index_network_elm)-1;
}
-int generic_parse_AS(AS_t as, network_element_t elm)
+int generic_parse_AS(AS_t as, sg_routing_edge_t elm)
{
XBT_DEBUG("Load Autonomous system \"%s\"", elm->name);
{
XBT_DEBUG("Load Autonomous system \"%s\"", elm->name);
- xbt_dynar_push_as(as->index_network_elm,network_element_t,elm);
+ xbt_dynar_push_as(as->index_network_elm,sg_routing_edge_t,elm);
return xbt_dynar_length(as->index_network_elm)-1;
}
return xbt_dynar_length(as->index_network_elm)-1;
}
-route_t generic_get_bypassroute(AS_t rc, network_element_t src, network_element_t dst, double *lat)
+route_t generic_get_bypassroute(AS_t rc, sg_routing_edge_t src, sg_routing_edge_t dst, double *lat)
{
// If never set a bypass route return NULL without any further computations
XBT_DEBUG("generic_get_bypassroute from %s to %s",src->name,dst->name);
{
// If never set a bypass route return NULL without any further computations
XBT_DEBUG("generic_get_bypassroute from %s to %s",src->name,dst->name);
AS_t element_as, result, elem;
xbt_dict_cursor_t cursor = NULL;
char *key;
AS_t element_as, result, elem;
xbt_dict_cursor_t cursor = NULL;
char *key;
- element_as = ((network_element_t)
+ element_as = ((sg_routing_edge_t)
xbt_lib_get_or_null(as_router_lib, element,
ROUTING_ASR_LEVEL))->rc_component;
result = ((AS_t) - 1);
xbt_lib_get_or_null(as_router_lib, element,
ROUTING_ASR_LEVEL))->rc_component;
result = ((AS_t) - 1);
generic_processing_units_exist(AS_t rc, char *element)
{
AS_t element_as;
generic_processing_units_exist(AS_t rc, char *element)
{
AS_t element_as;
- element_as = ((network_element_t)
+ element_as = ((sg_routing_edge_t)
xbt_lib_get_or_null(host_lib,
element, ROUTING_HOST_LEVEL))->rc_component;
if (element_as == rc)
xbt_lib_get_or_null(host_lib,
element, ROUTING_HOST_LEVEL))->rc_component;
if (element_as == rc)
return generic_as_exist(rc, element_as);
}
return generic_as_exist(rc, element_as);
}
-void generic_src_dst_check(AS_t rc, network_element_t src,
- network_element_t dst)
+void generic_src_dst_check(AS_t rc, sg_routing_edge_t src,
+ sg_routing_edge_t dst)
- network_element_t src_data = src;
- network_element_t dst_data = dst;
+ sg_routing_edge_t src_data = src;
+ sg_routing_edge_t dst_data = dst;
if (src_data == NULL || dst_data == NULL)
xbt_die("Ask for route \"from\"(%s) or \"to\"(%s) no found at AS \"%s\"",
if (src_data == NULL || dst_data == NULL)
xbt_die("Ask for route \"from\"(%s) or \"to\"(%s) no found at AS \"%s\"",
-static void none_get_route_and_latency(AS_t rc, network_element_t src, network_element_t dst,
+static void none_get_route_and_latency(AS_t rc, sg_routing_edge_t src, sg_routing_edge_t dst,
route_t res,double *lat)
{
*lat = 0.0;
}
static route_t none_get_bypass_route(AS_t rc,
route_t res,double *lat)
{
*lat = 0.0;
}
static route_t none_get_bypass_route(AS_t rc,
- network_element_t src,
- network_element_t dst, double *lat) {
+ sg_routing_edge_t src,
+ sg_routing_edge_t dst, double *lat) {
-static int none_parse_PU(AS_t rc, network_element_t elm) {
+static int none_parse_PU(AS_t rc, sg_routing_edge_t elm) {
XBT_DEBUG("Load process unit \"%s\"", elm->name);
XBT_DEBUG("Load process unit \"%s\"", elm->name);
- xbt_dynar_push_as(rc->index_network_elm,network_element_t,elm);
+ xbt_dynar_push_as(rc->index_network_elm,sg_routing_edge_t,elm);
/* don't care about PUs */
return -1;
}
/* don't care about PUs */
return -1;
}
-static int none_parse_AS(AS_t rc, network_element_t elm) {
+static int none_parse_AS(AS_t rc, sg_routing_edge_t elm) {
XBT_DEBUG("Load Autonomous system \"%s\"", elm->name);
XBT_DEBUG("Load Autonomous system \"%s\"", elm->name);
- xbt_dynar_push_as(rc->index_network_elm,network_element_t,elm);
+ xbt_dynar_push_as(rc->index_network_elm,sg_routing_edge_t,elm);
/* even don't care about sub-ASes -- I'm as nihilist as an old punk*/
return -1;
}
/* even don't care about sub-ASes -- I'm as nihilist as an old punk*/
return -1;
}
AS_t model_generic_create_sized(size_t childsize);
void model_generic_finalize(AS_t as);
AS_t model_generic_create_sized(size_t childsize);
void model_generic_finalize(AS_t as);
-int generic_parse_PU(AS_t rc, network_element_t elm);
-int generic_parse_AS(AS_t rc, network_element_t elm);
+int generic_parse_PU(AS_t rc, sg_routing_edge_t elm);
+int generic_parse_AS(AS_t rc, sg_routing_edge_t elm);
void generic_parse_bypassroute(AS_t rc, const char *src, const char *dst,
route_t e_route);
void generic_parse_bypassroute(AS_t rc, const char *src, const char *dst,
route_t e_route);
xbt_dynar_t generic_get_onelink_routes(AS_t rc);
route_t generic_get_bypassroute(AS_t rc,
xbt_dynar_t generic_get_onelink_routes(AS_t rc);
route_t generic_get_bypassroute(AS_t rc,
- network_element_t src,
- network_element_t dst,
+ sg_routing_edge_t src,
+ sg_routing_edge_t dst,
double *lat);
/* ************************************************************************** */
double *lat);
/* ************************************************************************** */
generic_autonomous_system_exist(AS_t rc, char *element);
AS_t
generic_processing_units_exist(AS_t rc, char *element);
generic_autonomous_system_exist(AS_t rc, char *element);
AS_t
generic_processing_units_exist(AS_t rc, char *element);
-void generic_src_dst_check(AS_t rc, network_element_t src,
- network_element_t dst);
+void generic_src_dst_check(AS_t rc, sg_routing_edge_t src,
+ sg_routing_edge_t dst);
/* ************************************************************************** */
/* ************************************************************************** */
/* Parse routing model functions */
/* Parse routing model functions */
-static int model_rulebased_parse_PU(AS_t rc, network_element_t elm)
+static int model_rulebased_parse_PU(AS_t rc, sg_routing_edge_t elm)
{
AS_rulebased_t routing = (AS_rulebased_t) rc;
xbt_dynar_push(routing->generic_routing.index_network_elm,(void *)elm);
return -1;
}
{
AS_rulebased_t routing = (AS_rulebased_t) rc;
xbt_dynar_push(routing->generic_routing.index_network_elm,(void *)elm);
return -1;
}
-static int model_rulebased_parse_AS(AS_t rc, network_element_t elm)
+static int model_rulebased_parse_AS(AS_t rc, sg_routing_edge_t elm)
{
AS_rulebased_t routing = (AS_rulebased_t) rc;
xbt_dynar_push(routing->generic_routing.index_network_elm,(void *)elm);
{
AS_rulebased_t routing = (AS_rulebased_t) rc;
xbt_dynar_push(routing->generic_routing.index_network_elm,(void *)elm);
}
static void rulebased_get_route_and_latency(AS_t rc,
}
static void rulebased_get_route_and_latency(AS_t rc,
- network_element_t src, network_element_t dst,
+ sg_routing_edge_t src, sg_routing_edge_t dst,
route_t res,double*lat);
static xbt_dynar_t rulebased_get_onelink_routes(AS_t rc)
{
route_t res,double*lat);
static xbt_dynar_t rulebased_get_onelink_routes(AS_t rc)
{
- network_element_t router = NULL;
+ sg_routing_edge_t router = NULL;
xbt_lib_cursor_t cursor;
xbt_lib_foreach(as_router_lib, cursor, k1, router)
{
xbt_lib_cursor_t cursor;
xbt_lib_foreach(as_router_lib, cursor, k1, router)
{
if (!router)
xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
if (!router)
xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
- network_element_t host = NULL;
+ sg_routing_edge_t host = NULL;
xbt_lib_foreach(as_router_lib, cursor, k1, host){
route_t route = xbt_new0(s_route_t,1);
route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
xbt_lib_foreach(as_router_lib, cursor, k1, host){
route_t route = xbt_new0(s_route_t,1);
route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
/* Business methods */
static void rulebased_get_route_and_latency(AS_t rc,
/* Business methods */
static void rulebased_get_route_and_latency(AS_t rc,
- network_element_t src, network_element_t dst,
+ sg_routing_edge_t src, sg_routing_edge_t dst,
route_t route, double *lat)
{
XBT_DEBUG("rulebased_get_route_and_latency from '%s' to '%s'",src->name,dst->name);
route_t route, double *lat)
{
XBT_DEBUG("rulebased_get_route_and_latency from '%s' to '%s'",src->name,dst->name);
pcre_free_substring_list(list_dst);
}
pcre_free_substring_list(list_dst);
}
-static route_t rulebased_get_bypass_route(AS_t rc, network_element_t src, network_element_t dst, double *lat) {
+static route_t rulebased_get_bypass_route(AS_t rc, sg_routing_edge_t src, sg_routing_edge_t dst, double *lat) {
}
static void vivaldi_get_route_and_latency(
}
static void vivaldi_get_route_and_latency(
- AS_t rc, network_element_t src_p, network_element_t dst_p,
+ AS_t rc, sg_routing_edge_t src_p, sg_routing_edge_t dst_p,
route_t route, double *lat)
{
XBT_DEBUG("vivaldi_get_route_and_latency from '%s'[%d] '%s'[%d]",src_p->name,src_p->id,dst_p->name,dst_p->id);
route_t route, double *lat)
{
XBT_DEBUG("vivaldi_get_route_and_latency from '%s'[%d] '%s'[%d]",src_p->name,src_p->id,dst_p->name,dst_p->id);
tmgr_trace_event_t power_event;
tmgr_trace_event_t state_event;
e_surf_resource_state_t state_current;
tmgr_trace_event_t power_event;
tmgr_trace_event_t state_event;
e_surf_resource_state_t state_current;
- network_element_t info;
+ sg_routing_edge_t info;
} s_cpu_L07_t, *cpu_L07_t;
/**************************************/
} s_cpu_L07_t, *cpu_L07_t;
/**************************************/
static xbt_dict_t ptask_parallel_task_link_set = NULL;
lmm_system_t ptask_maxmin_system = NULL;
static xbt_dict_t ptask_parallel_task_link_set = NULL;
lmm_system_t ptask_maxmin_system = NULL;
-static surf_action_t die_impossible_communicate (network_element_t src,
- network_element_t dst,
+static surf_action_t die_impossible_communicate (sg_routing_edge_t src,
+ sg_routing_edge_t dst,
double size, double rate)
{
DIE_IMPOSSIBLE;
double size, double rate)
{
DIE_IMPOSSIBLE;
xbt_lib_cursor_t cursor_src = NULL;
xbt_lib_cursor_t cursor_dst = NULL;
char *src,*dst,*key,*data;
xbt_lib_cursor_t cursor_src = NULL;
xbt_lib_cursor_t cursor_dst = NULL;
char *src,*dst,*key,*data;
- network_element_t value1;
- network_element_t value2;
+ sg_routing_edge_t value1;
+ sg_routing_edge_t value2;
xbt_ex_t e;
const SD_workstation_t *hosts;
xbt_ex_t e;
const SD_workstation_t *hosts;
// Routers
xbt_lib_foreach(as_router_lib, cursor_src, key, value1) {
// Routers
xbt_lib_foreach(as_router_lib, cursor_src, key, value1) {
- if(((network_element_t)xbt_lib_get_or_null(as_router_lib, key,
+ if(((sg_routing_edge_t)xbt_lib_get_or_null(as_router_lib, key,
ROUTING_ASR_LEVEL))->rc_type == SURF_NETWORK_ELEMENT_ROUTER)
{
printf(" <router id=\"%s\"/>\n",key);
ROUTING_ASR_LEVEL))->rc_type == SURF_NETWORK_ELEMENT_ROUTER)
{
printf(" <router id=\"%s\"/>\n",key);
,dst);
xbt_dynar_t route=NULL;
value2 = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
,dst);
xbt_dynar_t route=NULL;
value2 = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
- routing_get_route_and_latency((network_element_t)value1,(network_element_t)value2,&route,NULL);
+ routing_get_route_and_latency((sg_routing_edge_t)value1,(sg_routing_edge_t)value2,&route,NULL);
for(i=0;i<xbt_dynar_length(route) ;i++)
{
void *link = xbt_dynar_get_as(route,i,void *);
for(i=0;i<xbt_dynar_length(route) ;i++)
{
void *link = xbt_dynar_get_as(route,i,void *);
,dst);
xbt_dynar_t route=NULL;
value2 = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
,dst);
xbt_dynar_t route=NULL;
value2 = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
- routing_get_route_and_latency((network_element_t)value1,(network_element_t)value2,&route,NULL);
+ routing_get_route_and_latency((sg_routing_edge_t)value1,(sg_routing_edge_t)value2,&route,NULL);
for(i=0;i<xbt_dynar_length(route) ;i++)
{
void *link = xbt_dynar_get_as(route,i,void *);
for(i=0;i<xbt_dynar_length(route) ;i++)
{
void *link = xbt_dynar_get_as(route,i,void *);
,src, dst);
xbt_dynar_t route=NULL;
value2 = xbt_lib_get_or_null(host_lib,dst,ROUTING_HOST_LEVEL);
,src, dst);
xbt_dynar_t route=NULL;
value2 = xbt_lib_get_or_null(host_lib,dst,ROUTING_HOST_LEVEL);
- routing_get_route_and_latency((network_element_t)value1,(network_element_t)value2,&route, NULL);
+ routing_get_route_and_latency((sg_routing_edge_t)value1,(sg_routing_edge_t)value2,&route, NULL);
for(i=0;i<xbt_dynar_length(route) ;i++)
{
void *link = xbt_dynar_get_as(route,i,void *);
for(i=0;i<xbt_dynar_length(route) ;i++)
{
void *link = xbt_dynar_get_as(route,i,void *);