X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/50078f18c7f2fcbe42db89adb2005e9f7d38c301..939f45165f7ccadb14508dbc6a234a60464b5f57:/src/include/surf/surf.h diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 7b40a75686..2c0d08603d 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -25,7 +25,7 @@ typedef enum { SURF_NETWORK_ELEMENT_NULL = 0, /* NULL */ SURF_NETWORK_ELEMENT_HOST, /* host type */ SURF_NETWORK_ELEMENT_ROUTER, /* router type */ - SURF_NETWORK_ELEMENT_AS, /* AS type */ + SURF_NETWORK_ELEMENT_AS /* AS type */ } e_surf_network_element_type_t; XBT_PUBLIC(e_surf_network_element_type_t) @@ -193,6 +193,30 @@ typedef struct surf_network_model_extension_public { xbt_dict_t properties); } s_surf_model_extension_network_t; +typedef struct s_surf_file { + char *name; /**< @brief host name if any */ + void *data; /**< @brief user data */ +} s_surf_file_t; +typedef struct s_surf_file *surf_file_t; + +/* Storage model */ + +/** \brief Storage model extension public + * \ingroup SURF_models + * + * Public functions specific to the Storage model. + */ + +typedef struct surf_storage_model_extension_public { + surf_action_t(*open) (void *workstation, const char* path, const char* mode); + surf_action_t(*close) (void *workstation, surf_file_t fp); + surf_action_t(*read) (void *workstation, void* ptr, size_t size, size_t nmemb, surf_file_t stream); + surf_action_t(*write) (void *workstation, const void* ptr, size_t size, size_t nmemb, surf_file_t stream); + surf_action_t(*stat) (void *workstation, int fd, void* buf); + void* (*create_resource) (const char* id, const char* model, + const char* content, xbt_dict_t properties); +} s_surf_model_extension_storage_t; + /** \brief Workstation model extension public * \ingroup SURF_models * @@ -218,6 +242,11 @@ typedef struct surf_workstation_model_extension_public { double amount, double rate); double (*get_link_bandwidth) (const void *link); /**< Return the current bandwidth of a network link */ double (*get_link_latency) (const void *link); /**< Return the current latency of a network link */ + surf_action_t(*open) (void *workstation, const char* path, const char* mode); + surf_action_t(*close) (void *workstation, surf_file_t fp); + surf_action_t(*read) (void *workstation, void* ptr, size_t size, size_t nmemb, surf_file_t stream); + surf_action_t(*write) (void *workstation, const void* ptr, size_t size, size_t nmemb, surf_file_t stream); + surf_action_t(*stat) (void *workstation, int fd, void* buf); int (*link_shared) (const void *link); xbt_dict_t(*get_properties) (const void *resource); void* (*link_create_resource) (const char *name, @@ -283,6 +312,7 @@ typedef struct surf_model { union extension { s_surf_model_extension_cpu_t cpu; s_surf_model_extension_network_t network; + s_surf_model_extension_storage_t storage; s_surf_model_extension_workstation_t workstation; } extension; } s_surf_model_t; @@ -299,6 +329,9 @@ static inline void *surf_workstation_resource_by_name(const char *name){ static inline void *surf_network_resource_by_name(const char *name){ return xbt_lib_get_or_null(link_lib, name, SURF_LINK_LEVEL); } +static inline void *surf_storage_resource_by_name(const char *name) { + return xbt_lib_get_or_null(storage_lib, name, SURF_STORAGE_LEVEL); +} typedef struct surf_resource { surf_model_t model; @@ -306,8 +339,6 @@ typedef struct surf_resource { xbt_dict_t properties; } s_surf_resource_t, *surf_resource_t; - - /** * Resource which have a metric handled by a maxmin system */ @@ -542,6 +573,27 @@ XBT_PUBLIC_DATA(s_surf_model_description_t) surf_network_model_description[]; + + + + +/** \brief The storage model + * \ingroup SURF_models + */ +XBT_PUBLIC(void) surf_storage_model_init_default(void); + +/** \brief The list of all available storage modes. + * \ingroup SURF_models + * This storage mode can be set using --cfg=storage/model:... + */ +XBT_PUBLIC_DATA(s_surf_model_description_t) surf_storage_model_description[]; + + + + + + + /** \brief The workstation model * \ingroup SURF_models *