X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eee21ec5f99218189fc98898a09150294cd0fbf4..3dbeba193df2e406bd9eff5be73c8bce0db0185e:/src/surf/surf_routing.hpp diff --git a/src/surf/surf_routing.hpp b/src/surf/surf_routing.hpp index d61d3fa88e..c442f02b39 100644 --- a/src/surf/surf_routing.hpp +++ b/src/surf/surf_routing.hpp @@ -1,4 +1,10 @@ -#include "surf.hpp" +/* Copyright (c) 2013-2014. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "surf_interface.hpp" #include #ifndef NETWORK_ROUTING_HPP_ @@ -14,13 +20,16 @@ xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xb /*********** * 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; @@ -29,15 +38,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 */ @@ -49,9 +54,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 RoutingEdges + * @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; @@ -68,28 +91,72 @@ 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: + virtual ~RoutingEdge(){}; + virtual int getId()=0; + virtual int *getIdPtr()=0; + virtual void setId(int id)=0; + virtual char *getName()=0; + virtual AsPtr getRcComponent()=0; + virtual e_surf_network_element_type_t getRcType()=0; +}; + +struct RoutingEdgeImpl : public RoutingEdge { public: + RoutingEdgeImpl(char *name, int id, e_surf_network_element_type_t rcType, AsPtr rcComponent) + : p_rcComponent(rcComponent), p_rcType(rcType), m_id(id), p_name(name) {} + ~RoutingEdgeImpl() { xbt_free(p_name);}; + + int getId() {return m_id;} + int *getIdPtr() {return &m_id;} + void setId(int id) {m_id = id;} + char *getName() {return p_name;} + AsPtr getRcComponent() {return p_rcComponent;} + e_surf_network_element_type_t getRcType() {return p_rcType;} +private: 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 +struct RoutingEdgeWrapper : public RoutingEdge { +public: + RoutingEdgeWrapper(RoutingEdge *re) : p_re(re){} + ~RoutingEdgeWrapper(){} + int getId() {return p_re->getId();} + int *getIdPtr() {return p_re->getIdPtr();} + void setId(int id) {p_re->setId(id);} + char *getName() {return p_re->getName();} + AsPtr getRcComponent() {return p_re->getRcComponent();} + e_surf_network_element_type_t getRcType() {return p_re->getRcType();} +private: + RoutingEdge *p_re; +}; + +/** @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_link(link), p_src(src), p_dst(dst) {}; + : p_src(src), p_dst(dst), p_link(link) {}; RoutingEdgePtr p_src; RoutingEdgePtr p_dst; void *p_link; }; -class RoutingPlatf { +/** @ingroup SURF_routing_interface + * @brief The class representing a whole routing platform + */ +XBT_PUBLIC_CLASS RoutingPlatf { public: + ~RoutingPlatf(); AsPtr p_root; void *p_loopback; xbt_dynar_t p_lastRoute;