Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reorganize storage structures (msg, smx and surf) and separate storage parsing from...
authornavarro <navarro@caraja.(none)>
Fri, 30 Mar 2012 09:24:15 +0000 (11:24 +0200)
committernavarro <navarro@caraja.(none)>
Tue, 3 Apr 2012 13:16:25 +0000 (15:16 +0200)
15 files changed:
include/simix/datatypes.h
src/include/surf/datatypes.h
src/include/surf/surf.h
src/include/surf/surf_resource.h
src/msg/msg_io.c
src/msg/msg_private.h
src/simix/smx_io.c
src/simix/smx_io_private.h
src/simix/smx_private.h
src/surf/storage.c
src/surf/storage_private.h
src/surf/surf.c
src/surf/surf_private.h
src/surf/surf_routing.c
src/surf/surfxml_parseplatf.c

index 340bc1d..07c05c1 100644 (file)
@@ -46,14 +46,14 @@ typedef enum {
 
 typedef struct s_smx_timer* smx_timer_t;
 
-/* ******************************** File ************************************ */
-typedef struct s_smx_file *smx_file_t;
-
 /* ******************************** Synchro ************************************ */
 typedef struct s_smx_mutex *smx_mutex_t;
 typedef struct s_smx_cond *smx_cond_t;
 typedef struct s_smx_sem *smx_sem_t;
 
+/********************************** File *************************************/
+typedef struct s_smx_file *smx_file_t;
+
 /********************************** Action *************************************/
 typedef struct s_smx_action *smx_action_t; /* FIXME: replace by specialized action handlers */
 
index f51895a..c24e58e 100644 (file)
@@ -22,7 +22,7 @@ typedef struct surf_model *surf_model_t;
  * It is represented as a cost, a priority, a duration and a state.
  */
 typedef struct surf_action *surf_action_t;
-
+typedef struct surf_file *surf_file_t;
 
 typedef struct lmm_element *lmm_element_t;
 typedef struct lmm_variable *lmm_variable_t;
index 8b7e323..113e3b2 100644 (file)
@@ -93,7 +93,7 @@ typedef struct surf_action {
 #ifdef HAVE_TRACING
   char *category;               /**< tracing category for categorized resource utilization monitoring */
 #endif
-  void* file;        /**< surf_file_t for storage model */
+  surf_file_t file;        /**< surf_file_t for storage model */
   size_t read_write;
 } s_surf_action_t;
 
@@ -216,12 +216,6 @@ typedef struct surf_network_model_extension_public {
  *  Public functions specific to the Storage model.
  */
 
-typedef struct surf_file {
-  char *name;              /**< @brief host name if any */
-  void *simdata;
-  void *data;              /**< @brief user data */
-}s_surf_file_t, *surf_file_t;
-
 typedef struct surf_storage_model_extension_public {
   surf_action_t(*open) (void *storage, const char* path, const char* mode);
   surf_action_t(*close) (void *storage, surf_file_t fp);
@@ -355,30 +349,6 @@ typedef struct surf_resource {
   xbt_dict_t properties;
 } s_surf_resource_t, *surf_resource_t;
 
-/**
- * Storage struct
- */
-typedef struct s_storage_type {
-  char *model;
-  xbt_dict_t content;
-  char *type_id;
-  xbt_dict_t properties;
-} s_storage_type_t, *storage_type_t;
-
-typedef struct s_mount {
-  void *id;
-  char *name;
-} s_mount_t, *mount_t;
-
-typedef struct s_content {
-  char *user_rights;
-  char *user;
-  char *group;
-  char *date;
-  char *time;
-  size_t size;
-} s_content_t, *content_t;
-
 /**
  * Resource which have a metric handled by a maxmin system
  */
index aa72c4c..dc66869 100644 (file)
@@ -20,21 +20,6 @@ static XBT_INLINE
   res->properties = props;
   return res;
 }
-static XBT_INLINE void routing_storage_type_free(void *r)
-{
-  storage_type_t stype = r;
-  free(stype->model);
-  free(stype->type_id);
-  xbt_dict_free(&(stype->properties));
-  xbt_dict_free(&(stype->content));
-  free(stype);
-}
-
-static XBT_INLINE void routing_storage_host_free(void *r)
-{
-  xbt_dynar_t dyn = r;
-  xbt_dynar_free(&dyn);
-}
 
 static XBT_INLINE void surf_resource_free(void *r)
 {
index a9809ac..0d91bc3 100644 (file)
@@ -27,7 +27,7 @@
  */
 size_t MSG_file_read(const char* storage, void* ptr, size_t size, size_t nmemb,  msg_file_t stream)
 {
-  return simcall_file_read(storage, ptr, size, nmemb, (smx_file_t)stream);
+  return simcall_file_read(storage, ptr, size, nmemb, stream->simdata->smx_file);
 }
 
 /** \ingroup m_file_management
@@ -42,7 +42,7 @@ size_t MSG_file_read(const char* storage, void* ptr, size_t size, size_t nmemb,
  */
 size_t MSG_file_write(const char* storage, const void* ptr, size_t size, size_t nmemb, msg_file_t stream)
 {
-  return simcall_file_write(storage, ptr, size, nmemb, (smx_file_t)stream);
+  return simcall_file_write(storage, ptr, size, nmemb, stream->simdata->smx_file);
 }
 
 /** \ingroup m_file_management
@@ -64,7 +64,11 @@ size_t MSG_file_write(const char* storage, const void* ptr, size_t size, size_t
  */
 msg_file_t MSG_file_open(const char* storage, const char* path, const char* mode)
 {
-  return (msg_file_t) simcall_file_open(storage, path, mode);
+  msg_file_t file = xbt_new(s_msg_file_t,1);
+  file->name = strdup(path);
+  file->simdata = xbt_new0(s_simdata_file_t,1);
+  file->simdata->smx_file = simcall_file_open(storage, path, mode);
+  return file;
 }
 
 /** \ingroup m_file_management
@@ -76,7 +80,7 @@ msg_file_t MSG_file_open(const char* storage, const char* path, const char* mode
  */
 int MSG_file_close(const char* storage, msg_file_t fp)
 {
-  return simcall_file_close(storage, (smx_file_t)fp);
+  return simcall_file_close(storage, fp->simdata->smx_file);
 }
 
 /** \ingroup m_file_management
index 317a5d8..c43de1e 100644 (file)
@@ -45,6 +45,10 @@ typedef struct simdata_task {
   double *comm_amount;
 } s_simdata_task_t;
 
+/********************************* File **************************************/
+typedef struct simdata_file {
+  smx_file_t smx_file;
+} s_simdata_file_t;
 
 /*************** Begin GPU ***************/
 typedef struct simdata_gpu_task {
index 53c76d9..232982e 100644 (file)
@@ -48,7 +48,7 @@ smx_action_t SIMIX_file_read(smx_process_t process, const char* storage, void* p
 #endif
 
   action->io.host = host;
-  action->io.surf_io = surf_workstation_model->extension.workstation.read(host->host, storage, ptr, size, nmemb, (surf_file_t)stream),
+  action->io.surf_io = surf_workstation_model->extension.workstation.read(host->host, storage, ptr, size, nmemb, stream->surf_file),
 
   surf_workstation_model->action_data_set(action->io.surf_io, action);
   XBT_DEBUG("Create io action %p", action);
@@ -90,7 +90,7 @@ smx_action_t SIMIX_file_write(smx_process_t process, const char* storage, const
 #endif
 
   action->io.host = host;
-  action->io.surf_io = surf_workstation_model->extension.workstation.write(host->host, storage, ptr, size, nmemb, (surf_file_t)stream);
+  action->io.surf_io = surf_workstation_model->extension.workstation.write(host->host, storage, ptr, size, nmemb, stream->surf_file);
 
   surf_workstation_model->action_data_set(action->io.surf_io, action);
   XBT_DEBUG("Create io action %p", action);
@@ -107,7 +107,8 @@ void SIMIX_pre_file_open(smx_simcall_t simcall)
       simcall->file_open.mode);
   xbt_fifo_push(action->simcalls, simcall);
   simcall->issuer->waiting_action = action;
-  simcall->file_open.result = (action->io.surf_io)->file;
+  simcall->file_open.result = xbt_new(s_smx_file_t,1); /* FIXME */
+  simcall->file_open.result->surf_file = (action->io.surf_io)->file;
 }
 
 smx_action_t SIMIX_file_open(smx_process_t process ,const char* storage, const char* path, const char* mode)
@@ -169,7 +170,7 @@ smx_action_t SIMIX_file_close(smx_process_t process ,const char* storage, smx_fi
 #endif
 
   action->io.host = host;
-  action->io.surf_io = surf_workstation_model->extension.workstation.close(host->host, storage, (surf_file_t)fp);
+  action->io.surf_io = surf_workstation_model->extension.workstation.close(host->host, storage, fp->surf_file);
 
   surf_workstation_model->action_data_set(action->io.surf_io, action);
   XBT_DEBUG("Create io action %p", action);
index 83cd902..03847d9 100644 (file)
 #include "simix/datatypes.h"
 #include "smx_smurf_private.h"
 
-/** @brief File datatype */
-typedef struct s_smx_file {
-  char *name;              /**< @brief host name if any */
-  void *simdata;
-  void *data;              /**< @brief user data */
-} s_smx_file_t;
-
 void SIMIX_pre_file_read(smx_simcall_t simcall);
 void SIMIX_pre_file_write(smx_simcall_t simcall);
 void SIMIX_pre_file_open(smx_simcall_t simcall);
index 13dca2f..bc4efc0 100644 (file)
@@ -57,6 +57,12 @@ extern unsigned long simix_process_maxpid;
 
 #define SMX_THROW() RETHROW
 
+/* ******************************** File ************************************ */
+typedef struct s_smx_file {
+  surf_file_t surf_file;
+} s_smx_file_t;
+
+
 /*********************************** Time ************************************/
 
 /** @brief Timer datatype */
@@ -84,6 +90,13 @@ typedef enum {
   SIMIX_COMM_DONE
 } e_smx_comm_type_t;
 
+typedef enum {
+  SIMIX_IO_OPEN,
+  SIMIX_IO_WRITE,
+  SIMIX_IO_READ,
+  SIMIX_IO_STAT
+} e_smx_io_type_t;
+
 /** @brief Action datatype */
 typedef struct s_smx_action {
 
index e59d0c7..772423f 100644 (file)
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_storage, surf,
                                 "Logging specific to the SURF storage module");
 
+xbt_lib_t storage_lib;
+int ROUTING_STORAGE_LEVEL;      //Routing for storagelevel
+int ROUTING_STORAGE_HOST_LEVEL;
+int SURF_STORAGE_LEVEL;
+xbt_lib_t storage_type_lib;
+int ROUTING_STORAGE_TYPE_LEVEL; //Routing for storage_type level
+
+xbt_dynar_t mount_list = NULL;  /* temporary store of current mount storage */
+
 surf_model_t surf_storage_model = NULL;
 lmm_system_t storage_maxmin_system = NULL;
 static int storage_selective_update = 0;
@@ -52,7 +61,7 @@ static surf_action_t storage_action_open(void *storage, const char* path, const
 
   surf_file_t file = xbt_new0(s_surf_file_t,1);
   file->name = xbt_strdup(path);
-  file->simdata = content;
+  file->content = content;
 
   surf_action_t action = storage_action_execute(storage,0, DEFAULT);
   action->file = (void *)file;
@@ -63,7 +72,7 @@ static surf_action_t storage_action_close(void *storage, surf_file_t fp)
 {
   char *filename = fp->name;
   free(fp->name);
-  fp->simdata = NULL;
+  fp->content = NULL;
   xbt_free(fp);
   surf_action_t action = storage_action_execute(storage,0, DEFAULT);
   XBT_DEBUG("\tClose file '%s'",filename);
@@ -73,7 +82,7 @@ static surf_action_t storage_action_close(void *storage, surf_file_t fp)
 static surf_action_t storage_action_read(void *storage, void* ptr, size_t size, size_t nmemb, surf_file_t stream)
 {
   char *filename = stream->name;
-  content_t content = (content_t)(stream->simdata);
+  content_t content = stream->content;
   XBT_DEBUG("\tRead file '%s' size '%Zu/%Zu'",filename,size,content->size);
   if(size > content->size)
     size = content->size;
@@ -85,7 +94,7 @@ static surf_action_t storage_action_read(void *storage, void* ptr, size_t size,
 static surf_action_t storage_action_write(void *storage, const void* ptr, size_t size, size_t nmemb, surf_file_t stream)
 {
   char *filename = stream->name;
-  content_t content = (content_t)(stream->simdata);
+  content_t content = stream->content;
   XBT_DEBUG("\tWrite file '%s' size '%Zu/%Zu'",filename,size,content->size);
 
   surf_action_t action = storage_action_execute(storage,size,WRITE);
@@ -399,3 +408,179 @@ void surf_storage_model_init_default(void)
 
   xbt_dynar_push(model_list, &surf_storage_model);
 }
+
+static void storage_parse_storage(sg_platf_storage_cbarg_t storage)
+{
+  xbt_assert(!xbt_lib_get_or_null(storage_lib, storage->id,ROUTING_STORAGE_LEVEL),
+               "Reading a storage, processing unit \"%s\" already exists", storage->id);
+
+  // Verification of an existing type_id
+#ifndef NDEBUG
+  void* storage_type = xbt_lib_get_or_null(storage_type_lib, storage->type_id,ROUTING_STORAGE_TYPE_LEVEL);
+#endif
+  xbt_assert(storage_type,"Reading a storage, type id \"%s\" does not exists", storage->type_id);
+
+  XBT_DEBUG("ROUTING Create a storage name '%s' with type_id '%s'",
+      storage->id,
+      storage->type_id);
+
+  xbt_lib_set(storage_lib,
+      storage->id,
+      ROUTING_STORAGE_LEVEL,
+      (void *) xbt_strdup(storage->type_id));
+}
+
+static void free_storage_content(void *p)
+{
+  content_t content = p;
+  free(content->date);
+  free(content->group);
+  free(content->time);
+  free(content->user);
+  free(content->user_rights);
+  free(content);
+}
+
+static xbt_dict_t parse_storage_content(const char *filename)
+{
+  if ((!filename) || (strcmp(filename, "") == 0))
+    return NULL;
+
+  xbt_dict_t parse_content = xbt_dict_new_homogeneous(free_storage_content);
+  FILE *file = NULL;
+
+  file = surf_fopen(filename, "r");
+  xbt_assert(file != NULL, "Cannot open file '%s' (path=%s)", filename,
+              xbt_str_join(surf_path, ":"));
+
+  char *line = NULL;
+  size_t len = 0;
+  ssize_t read;
+  char user_rights[12];
+  char user[100];
+  char group[100];
+  char date[12];
+  char time[12];
+  char path[1024];
+  int nb, size;
+
+  content_t content;
+
+  while ((read = getline(&line, &len, file)) != -1) {
+    content = xbt_new0(s_content_t,1);
+    if(sscanf(line,"%s %d %s %s %d %s %s %s",user_rights,&nb,user,group,&size,date,time,path)==8) {
+      content->date = xbt_strdup(date);
+      content->group = xbt_strdup(group);
+      content->size = size;
+      content->time = xbt_strdup(time);
+      content->user = xbt_strdup(user);
+      content->user_rights = xbt_strdup(user_rights);
+      xbt_dict_set(parse_content,path,content,NULL);
+    } else {
+      xbt_die("Be sure of passing a good format for content file.\n");
+      // You can generate this kind of file with command line:
+      // find /path/you/want -type f -exec ls -l {} \; 2>/dev/null > ./content.txt
+    }
+  }
+  if (line)
+      free(line);
+
+  fclose(file);
+  return parse_content;
+}
+
+static void storage_parse_storage_type(sg_platf_storage_type_cbarg_t storage_type)
+{
+  xbt_assert(!xbt_lib_get_or_null(storage_type_lib, storage_type->id,ROUTING_STORAGE_TYPE_LEVEL),
+               "Reading a storage type, processing unit \"%s\" already exists", storage_type->id);
+
+  storage_type_t stype = xbt_new0(s_storage_type_t, 1);
+  stype->model = xbt_strdup(storage_type->model);
+  stype->properties = storage_type->properties;
+  stype->content = parse_storage_content(storage_type->content);
+  stype->type_id = xbt_strdup(storage_type->id);
+
+  XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s' content '%s' and properties '%p'",
+      stype->type_id,
+      stype->model,
+      storage_type->content,
+      stype->properties);
+
+  xbt_lib_set(storage_type_lib,
+      stype->type_id,
+      ROUTING_STORAGE_TYPE_LEVEL,
+      (void *) stype);
+}
+static void storage_parse_mstorage(sg_platf_mstorage_cbarg_t mstorage)
+{
+  THROW_UNIMPLEMENTED;
+//  mount_t mnt = xbt_new0(s_mount_t, 1);
+//  mnt->id = xbt_strdup(mstorage->type_id);
+//  mnt->name = xbt_strdup(mstorage->name);
+//
+//  if(!mount_list){
+//    XBT_DEBUG("Creata a Mount list for %s",A_surfxml_host_id);
+//    mount_list = xbt_dynar_new(sizeof(char *), NULL);
+//  }
+//  xbt_dynar_push(mount_list,(void *) mnt);
+//  free(mnt->id);
+//  free(mnt->name);
+//  xbt_free(mnt);
+//  XBT_DEBUG("ROUTING Mount a storage name '%s' with type_id '%s'",mstorage->name, mstorage->id);
+}
+
+static void mount_free(void *p)
+{
+  mount_t mnt = p;
+  xbt_free(mnt->name);
+}
+
+static void storage_parse_mount(sg_platf_mount_cbarg_t mount)
+{
+  // Verification of an existing storage
+#ifndef NDEBUG
+  void* storage = xbt_lib_get_or_null(storage_lib, mount->id,ROUTING_STORAGE_LEVEL);
+#endif
+  xbt_assert(storage,"Disk id \"%s\" does not exists", mount->id);
+
+  XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->id, mount->name);
+
+  s_mount_t mnt;
+  mnt.id = surf_storage_resource_by_name(mount->id);
+  mnt.name = xbt_strdup(mount->name);
+
+  if(!mount_list){
+    XBT_DEBUG("Create a Mount list for %s",A_surfxml_host_id);
+    mount_list = xbt_dynar_new(sizeof(s_mount_t), mount_free);
+  }
+  xbt_dynar_push(mount_list,&mnt);
+}
+
+static XBT_INLINE void routing_storage_type_free(void *r)
+{
+  storage_type_t stype = r;
+  free(stype->model);
+  free(stype->type_id);
+  xbt_dict_free(&(stype->properties));
+  xbt_dict_free(&(stype->content));
+  free(stype);
+}
+
+static XBT_INLINE void routing_storage_host_free(void *r)
+{
+  xbt_dynar_t dyn = r;
+  xbt_dynar_free(&dyn);
+}
+
+void storage_register_callbacks() {
+
+  ROUTING_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,xbt_free);
+  ROUTING_STORAGE_HOST_LEVEL = xbt_lib_add_level(storage_lib,routing_storage_host_free);
+  ROUTING_STORAGE_TYPE_LEVEL = xbt_lib_add_level(storage_type_lib,routing_storage_type_free);
+  SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_resource_free);
+
+  sg_platf_storage_add_cb(storage_parse_storage);
+  sg_platf_mstorage_add_cb(storage_parse_mstorage);
+  sg_platf_storage_type_add_cb(storage_parse_storage_type);
+  sg_platf_mount_add_cb(storage_parse_mount);
+}
index ca7b6cd..63e9d2c 100644 (file)
@@ -8,6 +8,33 @@
 #ifndef STORAGE_PRIVATE_H_
 #define STORAGE_PRIVATE_H_
 
+typedef struct s_storage_type {
+  char *model;
+  xbt_dict_t content;
+  char *type_id;
+  xbt_dict_t properties;
+} s_storage_type_t, *storage_type_t;
+
+typedef struct s_mount {
+  void *id;
+  char *name;
+} s_mount_t, *mount_t;
+
+typedef struct s_content {
+  char *user_rights;
+  char *user;
+  char *group;
+  char *date;
+  char *time;
+  size_t size;
+} s_content_t, *content_t;
+
+
+typedef struct surf_file {
+  char *name;
+  content_t content;
+} s_surf_file_t;
+
 typedef struct storage {
   s_surf_resource_t generic_resource;   /*< Structure with generic data. Needed at begin to interate with SURF */
   e_surf_resource_state_t state_current;        /*< STORAGE current state (ON or OFF) */
index 49eb817..709eb29 100644 (file)
@@ -308,15 +308,11 @@ void surf_init(int *argc, char **argv)
   XBT_DEBUG("ADD ROUTING LEVEL");
   ROUTING_HOST_LEVEL = xbt_lib_add_level(host_lib,routing_asr_host_free);
   ROUTING_ASR_LEVEL  = xbt_lib_add_level(as_router_lib,routing_asr_host_free);
-  ROUTING_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,xbt_free);
-  ROUTING_STORAGE_HOST_LEVEL = xbt_lib_add_level(storage_lib,routing_storage_host_free);
-  ROUTING_STORAGE_TYPE_LEVEL = xbt_lib_add_level(storage_type_lib,routing_storage_type_free);
 
   XBT_DEBUG("ADD SURF LEVELS");
   SURF_CPU_LEVEL = xbt_lib_add_level(host_lib,surf_resource_free);
   SURF_WKS_LEVEL = xbt_lib_add_level(host_lib,surf_resource_free);
   SURF_LINK_LEVEL = xbt_lib_add_level(link_lib,surf_resource_free);
-  SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_resource_free);
 
   xbt_init(argc, argv);
   if (!model_list)
index a50e6cc..ff8b6b0 100644 (file)
@@ -185,6 +185,7 @@ struct s_routing_global {
 
 XBT_PUBLIC(void) routing_model_create(size_t size_of_link, void *loopback);
 XBT_PUBLIC(void) routing_exit(void);
+XBT_PUBLIC(void) storage_register_callbacks(void);
 XBT_PUBLIC(void) routing_register_callbacks(void);
 XBT_PUBLIC(void) generic_free_route(route_t route); // FIXME rename to routing_route_free
  // FIXME: make previous function private to routing again?
index 6ce1552..737a545 100644 (file)
@@ -43,21 +43,14 @@ int NS3_ASR_LEVEL;              //host node for ns3
 
 static xbt_dict_t random_value = NULL;
 
-xbt_lib_t storage_lib;
-int ROUTING_STORAGE_LEVEL;      //Routing for storagelevel
-int ROUTING_STORAGE_HOST_LEVEL;
-int SURF_STORAGE_LEVEL;
-
-xbt_lib_t storage_type_lib;
-int ROUTING_STORAGE_TYPE_LEVEL; //Routing for storage_type level
-
 /* Global vars */
 routing_global_t global_routing = NULL;
 AS_t current_routing = NULL;
 
 /* global parse functions */
 xbt_dynar_t parsed_link_list = NULL;   /* temporary store of current list link of a route */
-xbt_dynar_t mount_list = NULL;  /* temporary store of current mount storage */
+extern xbt_dynar_t mount_list;
+
 static const char *src = NULL;  /* temporary store the source name of a route */
 static const char *dst = NULL;  /* temporary store the destination name of a route */
 static char *gw_src = NULL;     /* temporary store the gateway source name of a route */
@@ -747,153 +740,6 @@ void routing_model_create(size_t size_of_links, void *loopback)
 /* ************************************************************************** */
 /* ************************* GENERIC PARSE FUNCTIONS ************************ */
 
-static void routing_parse_storage(sg_platf_storage_cbarg_t storage)
-{
-  xbt_assert(!xbt_lib_get_or_null(storage_lib, storage->id,ROUTING_STORAGE_LEVEL),
-               "Reading a storage, processing unit \"%s\" already exists", storage->id);
-
-  // Verification of an existing type_id
-#ifndef NDEBUG
-  void* storage_type = xbt_lib_get_or_null(storage_type_lib, storage->type_id,ROUTING_STORAGE_TYPE_LEVEL);
-#endif
-  xbt_assert(storage_type,"Reading a storage, type id \"%s\" does not exists", storage->type_id);
-
-  XBT_DEBUG("ROUTING Create a storage name '%s' with type_id '%s'",
-      storage->id,
-      storage->type_id);
-
-  xbt_lib_set(storage_lib,
-      storage->id,
-      ROUTING_STORAGE_LEVEL,
-      (void *) xbt_strdup(storage->type_id));
-}
-
-static void free_storage_content(void *p)
-{
-  content_t content = p;
-  free(content->date);
-  free(content->group);
-  free(content->time);
-  free(content->user);
-  free(content->user_rights);
-  free(content);
-}
-
-static xbt_dict_t parse_storage_content(const char *filename)
-{
-  if ((!filename) || (strcmp(filename, "") == 0))
-    return NULL;
-
-  xbt_dict_t parse_content = xbt_dict_new_homogeneous(free_storage_content);
-  FILE *file = NULL;
-
-  file = surf_fopen(filename, "r");
-  xbt_assert(file != NULL, "Cannot open file '%s' (path=%s)", filename,
-              xbt_str_join(surf_path, ":"));
-
-  char *line = NULL;
-  size_t len = 0;
-  ssize_t read;
-  char user_rights[12];
-  char user[100];
-  char group[100];
-  char date[12];
-  char time[12];
-  char path[1024];
-  int nb, size;
-
-  content_t content;
-
-  while ((read = getline(&line, &len, file)) != -1) {
-    content = xbt_new0(s_content_t,1);
-    if(sscanf(line,"%s %d %s %s %d %s %s %s",user_rights,&nb,user,group,&size,date,time,path)==8) {
-      content->date = xbt_strdup(date);
-      content->group = xbt_strdup(group);
-      content->size = size;
-      content->time = xbt_strdup(time);
-      content->user = xbt_strdup(user);
-      content->user_rights = xbt_strdup(user_rights);
-      xbt_dict_set(parse_content,path,content,NULL);
-    } else {
-      xbt_die("Be sure of passing a good format for content file.\n");
-      // You can generate this kind of file with command line:
-      // find /path/you/want -type f -exec ls -l {} \; 2>/dev/null > ./content.txt
-    }
-  }
-  if (line)
-      free(line);
-
-  fclose(file);
-  return parse_content;
-}
-
-static void routing_parse_storage_type(sg_platf_storage_type_cbarg_t storage_type)
-{
-  xbt_assert(!xbt_lib_get_or_null(storage_type_lib, storage_type->id,ROUTING_STORAGE_TYPE_LEVEL),
-               "Reading a storage type, processing unit \"%s\" already exists", storage_type->id);
-
-  storage_type_t stype = xbt_new0(s_storage_type_t, 1);
-  stype->model = xbt_strdup(storage_type->model);
-  stype->properties = storage_type->properties;
-  stype->content = parse_storage_content(storage_type->content);
-  stype->type_id = xbt_strdup(storage_type->id);
-
-  XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s' content '%s' and properties '%p'",
-      stype->type_id,
-      stype->model,
-      storage_type->content,
-      stype->properties);
-
-  xbt_lib_set(storage_type_lib,
-      stype->type_id,
-      ROUTING_STORAGE_TYPE_LEVEL,
-      (void *) stype);
-}
-static void routing_parse_mstorage(sg_platf_mstorage_cbarg_t mstorage)
-{
-  THROW_UNIMPLEMENTED;
-//  mount_t mnt = xbt_new0(s_mount_t, 1);
-//  mnt->id = xbt_strdup(mstorage->type_id);
-//  mnt->name = xbt_strdup(mstorage->name);
-//
-//  if(!mount_list){
-//    XBT_DEBUG("Creata a Mount list for %s",A_surfxml_host_id);
-//    mount_list = xbt_dynar_new(sizeof(char *), NULL);
-//  }
-//  xbt_dynar_push(mount_list,(void *) mnt);
-//  free(mnt->id);
-//  free(mnt->name);
-//  xbt_free(mnt);
-//  XBT_DEBUG("ROUTING Mount a storage name '%s' with type_id '%s'",mstorage->name, mstorage->id);
-}
-
-static void mount_free(void *p)
-{
-  mount_t mnt = p;
-  xbt_free(mnt->name);
-}
-
-static void routing_parse_mount(sg_platf_mount_cbarg_t mount)
-{
-  // Verification of an existing storage
-#ifndef NDEBUG
-  void* storage = xbt_lib_get_or_null(storage_lib, mount->id,ROUTING_STORAGE_LEVEL);
-#endif
-  xbt_assert(storage,"Disk id \"%s\" does not exists", mount->id);
-
-  XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->id, mount->name);
-
-  s_mount_t mnt;
-  mnt.id = surf_storage_resource_by_name(mount->id);
-  mnt.name = xbt_strdup(mount->name);
-
-  if(!mount_list){
-    XBT_DEBUG("Create a Mount list for %s",A_surfxml_host_id);
-    mount_list = xbt_dynar_new(sizeof(s_mount_t), mount_free);
-  }
-  xbt_dynar_push(mount_list,&mnt);
-}
-
 static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
 {
   char *host_id, *groups, *link_id = NULL;
@@ -1314,11 +1160,6 @@ void routing_register_callbacks()
   sg_platf_peer_add_cb(routing_parse_peer);
   sg_platf_postparse_add_cb(routing_parse_postparse);
 
-  sg_platf_storage_add_cb(routing_parse_storage);
-  sg_platf_mstorage_add_cb(routing_parse_mstorage);
-  sg_platf_storage_type_add_cb(routing_parse_storage_type);
-  sg_platf_mount_add_cb(routing_parse_mount);
-
   /* we care about the ASes while parsing the platf. Incredible, isnt it? */
   sg_platf_AS_end_add_cb(routing_AS_end);
   sg_platf_AS_begin_add_cb(routing_AS_begin);
index ca7cd66..4e5a4a7 100644 (file)
@@ -138,6 +138,7 @@ void parse_platform_file(const char *file)
 
   /* Register classical callbacks */
   surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties);
+  storage_register_callbacks();
   routing_register_callbacks();
 
   /* init the flex parser */