X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c978b9fe22c4e00793169fbe9d5f22825b96f894..228ec0b9d568130e65c10f7e9d25ccb5273abaa8:/src/surf/surf_routing.hpp diff --git a/src/surf/surf_routing.hpp b/src/surf/surf_routing.hpp index 2e5e36bbd9..e4d93c6d0b 100644 --- a/src/surf/surf_routing.hpp +++ b/src/surf/surf_routing.hpp @@ -1,20 +1,29 @@ -#include "surf.hpp" +#include "surf_interface.hpp" +#include #ifndef NETWORK_ROUTING_HPP_ #define NETWORK_ROUTING_HPP_ void routing_model_create( void *loopback); +/* ************************************************************************** */ +/* ************************* GRAPH EXPORTING FUNCTIONS ********************** */ +xbt_node_t new_xbt_graph_node (xbt_graph_t graph, const char *name, xbt_dict_t nodes); +xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges); + /*********** * Classes * ***********/ -class As; + +/* Note: As and RoutingEdge are declard as struct instead of class, to keep + compatibility with C files where they are mentioned. */ +struct As; typedef As *AsPtr; class RoutingModelDescription; typedef RoutingModelDescription *RoutingModelDescriptionPtr; -class RoutingEdge; +struct RoutingEdge; typedef RoutingEdge *RoutingEdgePtr; class Onelink; @@ -23,15 +32,11 @@ typedef Onelink *OnelinkPtr; class RoutingPlatf; typedef RoutingPlatf *RoutingPlatfPtr; - -/*FIXME:class RoutingModelDescription { - const char *p_name; - const char *p_desc; - AsPtr create(); - void end(AsPtr as); -};*/ - -class As { +/** @ingroup SURF_routing_interface + * @brief The Autonomous System (AS) routing interface + * @details [TODO] + */ +struct As { public: xbt_dynar_t p_indexNetworkElm; xbt_dict_t p_bypassRoutes; /* store bypass routes */ @@ -43,9 +48,27 @@ public: RoutingEdgePtr p_netElem; xbt_dynar_t p_linkUpDownList; + /** + * @brief The As constructor + */ As(){}; - ~As(){}; + /** + * @brief The As destructor + */ + virtual ~As(){ + xbt_free(p_name); + }; + + /** + * @brief Get the route and latency between two RoutingEdgs + * @details [long description] + * + * @param src [description] + * @param dst [description] + * @param into [description] + * @param latency [description] + */ virtual void getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf_route_cbarg_t into, double *latency)=0; virtual xbt_dynar_t getOneLinkRoutes()=0; virtual void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges)=0; @@ -62,26 +85,38 @@ public: virtual void parseBypassroute(sg_platf_route_cbarg_t e_route)=0; }; -class RoutingEdge { +/** @ingroup SURF_routing_interface + * @brief A routing edge + * @details [long description] + */ +struct RoutingEdge { public: + ~RoutingEdge() { xbt_free(p_name);}; AsPtr p_rcComponent; e_surf_network_element_type_t p_rcType; int m_id; char *p_name; }; -/* - * Link of lenght 1, alongside with its source and destination. This is mainly usefull in the bindings to gtnets and ns3 + +/** @ingroup SURF_routing_interface + * @brief Link of lenght 1, alongside with its source and destination. This is mainly usefull in the bindings to gtnets and ns3 */ class Onelink { public: + Onelink(void *link, RoutingEdgePtr src, RoutingEdgePtr dst) + : p_src(src), p_dst(dst), p_link(link) {}; RoutingEdgePtr p_src; RoutingEdgePtr p_dst; - void *p_linkPtr; + void *p_link; }; +/** @ingroup SURF_routing_interface + * @brief The class representing a whole routing platform + */ class RoutingPlatf { public: + ~RoutingPlatf(); AsPtr p_root; void *p_loopback; xbt_dynar_t p_lastRoute;