+static xbt_dict_t network_link_set = NULL;
+static xbt_dict_t network_card_set = NULL;
+
+static int card_number = 0;
+static network_link_t **routing_table = NULL;
+static int *routing_table_size = NULL;
+
+#define ROUTE(i,j) routing_table[(i)+(j)*card_number]
+#define ROUTE_SIZE(i,j) routing_table_size[(i)+(j)*card_number]
+
+static void create_routing_table(void)
+{
+ routing_table = xbt_new0(network_link_t *,card_number*card_number);
+ routing_table_size = xbt_new0(int,card_number*card_number);
+}
+
+static void network_link_free(void *nw_link)
+{
+ xbt_free(nw_link);
+}
+
+static network_link_t network_link_new(const char *name,
+ xbt_maxmin_float_t bw_initial,
+ tmgr_trace_t bw_trace,
+ xbt_maxmin_float_t lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_network_link_state_t state_initial,
+ tmgr_trace_t state_trace)
+{
+ network_link_t nw_link = xbt_new0(s_network_link_t, 1);
+
+
+ nw_link->resource = (surf_resource_t) surf_network_resource;
+ nw_link->name = name;
+ nw_link->bw_current = bw_initial;
+ if (bw_trace)
+ nw_link->bw_event =
+ tmgr_history_add_trace(history, bw_trace, 0.0, 0, nw_link);
+ nw_link->lat_current = lat_initial;
+ if (lat_trace)
+ nw_link->lat_event =
+ tmgr_history_add_trace(history, lat_trace, 0.0, 0, nw_link);
+ nw_link->state_current = state_initial;
+ if (state_trace)
+ nw_link->state_event =
+ tmgr_history_add_trace(history, state_trace, 0.0, 0, nw_link);
+
+ nw_link->constraint =
+ lmm_constraint_new(maxmin_system, nw_link,
+ nw_link->bw_current);
+
+ xbt_dict_set(network_link_set, name, nw_link, network_link_free);
+
+ return nw_link;
+}
+
+static int network_card_new(const char *card_name)
+{
+ network_card_t card = NULL;