X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/50078f18c7f2fcbe42db89adb2005e9f7d38c301..8d64537fa596db23d4c097caf2119b666784cce0:/src/include/surf/surf.h diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 7b40a75686..7ec4c48892 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -25,11 +25,11 @@ 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) - routing_get_network_element_type(const char *name); + routing_get_network_element_type(const char* name); /** @Brief Specify that we use that action */ XBT_PUBLIC(void) surf_action_ref(surf_action_t action); @@ -56,6 +56,13 @@ XBT_PUBLIC(int) find_model_description(s_surf_model_description_t * table, XBT_PUBLIC(void) model_help(const char *category, s_surf_model_description_t * table); +enum heap_action_type{ + LATENCY = 100, + MAX_DURATION, + NORMAL, + NOTSET +}; + /** \brief Action structure * \ingroup SURF_actions * @@ -86,12 +93,18 @@ typedef struct surf_action { #ifdef HAVE_TRACING char *category; /**< tracing category for categorized resource utilization monitoring */ #endif + void* file; /**< m_file_t for storage model */ + size_t read_write; } s_surf_action_t; typedef struct surf_action_lmm { s_surf_action_t generic_action; lmm_variable_t variable; int suspended; + s_xbt_swag_hookup_t action_list_hookup; + int index_heap; + double last_update; + enum heap_action_type hat; } s_surf_action_lmm_t, *surf_action_lmm_t; /** \brief Action states @@ -165,6 +178,8 @@ typedef struct surf_cpu_model_extension_public { void (*add_traces) (void); } s_surf_model_extension_cpu_t; +typedef struct s_network_element_info *network_element_t; + /* Network model */ /** \brief Network model extension public @@ -173,10 +188,10 @@ typedef struct surf_cpu_model_extension_public { * Public functions specific to the network model */ typedef struct surf_network_model_extension_public { - surf_action_t(*communicate) (const char *src_name, - const char *dst_name, - double size, double rate); - xbt_dynar_t(*get_route) (const char *src_name, const char *dst_name); //FIXME: kill field? That is done by the routing nowadays + surf_action_t (*communicate) (network_element_t src, + network_element_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 (*get_link_latency) (const void *link); int (*link_shared) (const void *link); @@ -193,6 +208,23 @@ typedef struct surf_network_model_extension_public { xbt_dict_t properties); } s_surf_model_extension_network_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 *storage, const char* path, const char* mode); + surf_action_t(*close) (void *storage, m_file_t fp); + surf_action_t(*read) (void *storage, void* ptr, size_t size, size_t nmemb, m_file_t stream); + surf_action_t(*write) (void *storage, const void* ptr, size_t size, size_t nmemb, m_file_t stream); + surf_action_t(*stat) (void *storage, int fd, void* buf); + void* (*create_resource) (const char* id, const char* model,const char* type_id); +} s_surf_model_extension_storage_t; + /** \brief Workstation model extension public * \ingroup SURF_models * @@ -218,6 +250,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* storage, const char* path, const char* mode); + surf_action_t(*close) (void *workstation, const char* storage, m_file_t fp); + surf_action_t(*read) (void *workstation, const char* storage, void* ptr, size_t size, size_t nmemb, m_file_t stream); + surf_action_t(*write) (void *workstation, const char* storage, const void* ptr, size_t size, size_t nmemb, m_file_t stream); + surf_action_t(*stat) (void *workstation, const char* storage, 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 +320,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; @@ -297,7 +335,12 @@ static inline void *surf_workstation_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){ - return xbt_lib_get_or_null(link_lib, name, SURF_LINK_LEVEL); + network_element_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; +} +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 { @@ -306,7 +349,29 @@ 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 @@ -460,7 +525,7 @@ XBT_PUBLIC(void) surf_network_model_init_bypass(const char *id, * * \see surf_workstation_model_init_GTNETS() */ -XBT_PUBLIC(void) surf_network_model_init_GbTNETS(void); +XBT_PUBLIC(void) surf_network_model_init_GTNETS(void); #endif #ifdef HAVE_NS3 @@ -474,19 +539,6 @@ XBT_PUBLIC(void) surf_network_model_init_GbTNETS(void); * \see surf_workstation_model_init_NS3() */ XBT_PUBLIC(void) surf_network_model_init_NS3(void); - -XBT_PUBLIC(void) parse_ns3_add_host(void); -XBT_PUBLIC(void) parse_ns3_add_router(void); -XBT_PUBLIC(void) parse_ns3_add_link(void); -XBT_PUBLIC(void) parse_ns3_add_AS(void); -XBT_PUBLIC(void) parse_ns3_add_route(void); -XBT_PUBLIC(void) parse_ns3_add_ASroute(void); -XBT_PUBLIC(void) parse_ns3_add_cluster(void); -XBT_PUBLIC(void) parse_ns3_end_platform(void); -XBT_PUBLIC(void) create_ns3_topology(void); -XBT_PUBLIC(double) ns3_get_link_latency(const void *link); -XBT_PUBLIC(double) ns3_get_link_bandwidth(const void *link); - #endif /** \brief Initializes the platform with the network model Reno @@ -542,6 +594,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 *