2 * network_interface.hpp
4 * Created on: Nov 29, 2013
7 #include "surf_interface.hpp"
8 #include "surf_routing.hpp"
10 #ifndef SURF_NETWORK_INTERFACE_HPP_
11 #define SURF_NETWORK_INTERFACE_HPP_
17 typedef NetworkModel *NetworkModelPtr;
20 typedef NetworkLink *NetworkLinkPtr;
23 typedef NetworkAction *NetworkActionPtr;
29 void net_define_callbacks(void);
34 class NetworkModel : public Model {
36 NetworkModel() : Model("network") {
38 NetworkModel(const char *name) : Model(name) {
39 f_networkSolve = lmm_solve;
44 lmm_system_free(p_maxminSystem);
46 xbt_heap_free(p_actionHeap);
51 virtual NetworkLinkPtr createResource(const char *name,
53 tmgr_trace_t bw_trace,
55 tmgr_trace_t lat_trace,
56 e_surf_resource_state_t state_initial,
57 tmgr_trace_t state_trace,
58 e_surf_link_sharing_policy_t policy,
59 xbt_dict_t properties)=0;
61 virtual void gapAppend(double /*size*/, const NetworkLinkPtr /*link*/, NetworkActionPtr /*action*/) {};
62 virtual ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
63 double size, double rate)=0;
64 virtual xbt_dynar_t getRoute(RoutingEdgePtr src, RoutingEdgePtr dst); //FIXME: kill field? That is done by the routing nowadays
65 void (*f_networkSolve)(lmm_system_t);
66 virtual double latencyFactor(double size);
67 virtual double bandwidthFactor(double size);
68 virtual double bandwidthConstraint(double rate, double bound, double size);
76 class NetworkLink : public Resource {
78 NetworkLink(NetworkModelPtr model, const char *name, xbt_dict_t props);
79 NetworkLink(NetworkModelPtr model, const char *name, xbt_dict_t props,
80 lmm_constraint_t constraint,
81 tmgr_history_t history,
82 tmgr_trace_t state_trace);
83 virtual double getBandwidth();
84 virtual double getLatency();
85 virtual bool isShared();
88 /* Using this object with the public part of
89 model does not make sense */
91 tmgr_trace_event_t p_latEvent;
94 tmgr_trace_event_t p_stateEvent;
95 s_surf_metric_t p_power;
101 class NetworkAction : public Action {
103 NetworkAction(ModelPtr model, double cost, bool failed)
104 : Action(model, cost, failed) {}
105 NetworkAction(ModelPtr model, double cost, bool failed, lmm_variable_t var)
106 : Action(model, cost, failed, var) {};
111 const char* p_senderLinkName;
114 xbt_fifo_item_t p_senderFifoItem;
115 #ifdef HAVE_LATENCY_BOUND_TRACKING
116 int m_latencyLimited;
121 #endif /* SURF_NETWORK_INTERFACE_HPP_ */