1 /* Copyright (c) 2013-2016. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 #ifndef NETWORK_ROUTING_HPP_
7 #define NETWORK_ROUTING_HPP_
10 #include <xbt/signal.hpp>
12 #include "surf_interface.hpp"
13 #include "src/kernel/routing/AsImpl.hpp"
19 XBT_PRIVATE xbt_node_t new_xbt_graph_node (xbt_graph_t graph, const char *name, xbt_dict_t nodes);
20 XBT_PRIVATE xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges);
27 XBT_PUBLIC_DATA(simgrid::xbt::signal<void(s4u::As*)>) asCreatedCallbacks;
28 XBT_PUBLIC_DATA(simgrid::xbt::signal<void(NetCard*)>) netcardCreatedCallbacks;
34 class XBT_PRIVATE Onelink;
37 /** @ingroup SURF_routing_interface
38 * @brief Network cards are the vertices in the graph representing the network, used to compute paths between nodes.
40 * @details This represents a position in the network. One can route information between two netcards
44 virtual ~NetCard() = default;
45 virtual unsigned int id()=0; // Our rank in the vertices_ array of our containing AS.
46 virtual std::string name() = 0;
47 virtual const char* cname() = 0;
48 virtual AsImpl* containingAS() = 0; // This is the AS in which I am
49 virtual bool isAS()=0;
50 virtual bool isHost()=0;
51 virtual bool isRouter()=0;
57 struct XBT_PRIVATE NetCardImpl : public NetCard {
59 NetCardImpl(std::string name, NetCard::Type componentType, AsImpl* containingAS)
60 : name_(name), componentType_(componentType), containingAS_(containingAS)
62 if (containingAS != nullptr)
63 id_ = containingAS->addComponent(this);
64 simgrid::kernel::routing::netcardCreatedCallbacks(this);
66 ~NetCardImpl() = default;
68 unsigned int id() override {return id_;}
69 std::string name() override { return name_; }
70 const char* cname() override { return name_.c_str(); }
71 AsImpl *containingAS() override {return containingAS_;}
73 bool isAS() override {return componentType_ == Type::As;}
74 bool isHost() override {return componentType_ == Type::Host;}
75 bool isRouter() override {return componentType_ == Type::Router;}
80 NetCard::Type componentType_;
81 AsImpl *containingAS_;
86 explicit AsRoute(NetCard* gwSrc, NetCard* gwDst) : gw_src(gwSrc), gw_dst(gwDst) {}
87 const NetCard* gw_src;
88 const NetCard* gw_dst;
89 std::vector<Link*> links;
92 /** @ingroup SURF_routing_interface
93 * @brief Link of length 1, alongside with its source and destination. This is mainly useful in the ns3 bindings
97 Onelink(Link* link, NetCard* src, NetCard* dst) : src_(src), dst_(dst), link_(link){};
103 /** @ingroup SURF_routing_interface
104 * @brief The class representing a whole routing platform
106 XBT_PUBLIC_CLASS RoutingPlatf {
108 explicit RoutingPlatf();
114 #endif /* NETWORK_ROUTING_HPP_ */