Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make cmd-line option "network/TCP-gamma" neat and clean
[simgrid.git] / src / surf / network_cm02.hpp
1 /* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved.          */
2
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. */
5
6 #ifndef SURF_NETWORK_CM02_HPP_
7 #define SURF_NETWORK_CM02_HPP_
8
9 #include <xbt/base.h>
10
11 #include "network_interface.hpp"
12 #include "xbt/graph.h"
13
14
15 /***********
16  * Classes *
17  ***********/
18
19 namespace simgrid {
20   namespace surf {
21
22     class XBT_PRIVATE NetworkCm02Model;
23     class XBT_PRIVATE NetworkCm02Action;
24     class XBT_PRIVATE NetworkSmpiModel;
25
26   }
27 }
28
29 /*********
30  * Model *
31  *********/
32
33 namespace simgrid {
34 namespace surf {
35
36 class NetworkCm02Model : public NetworkModel {
37 public:
38   explicit NetworkCm02Model(kernel::lmm::System* (*make_new_sys)(bool) = &simgrid::kernel::lmm::make_new_maxmin_system);
39   virtual ~NetworkCm02Model() = default;
40   LinkImpl* createLink(const std::string& name, double bandwidth, double latency,
41                        e_surf_link_sharing_policy_t policy) override;
42   void update_actions_state_lazy(double now, double delta) override;
43   void update_actions_state_full(double now, double delta) override;
44   kernel::resource::Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override;
45 };
46
47 /************
48  * Resource *
49  ************/
50
51 class NetworkCm02Link : public LinkImpl {
52 public:
53   NetworkCm02Link(NetworkCm02Model* model, const std::string& name, double bandwidth, double latency,
54                   e_surf_link_sharing_policy_t policy, kernel::lmm::System* system);
55   virtual ~NetworkCm02Link() = default;
56   void apply_event(tmgr_trace_event_t event, double value) override;
57   void setBandwidth(double value) override;
58   void setLatency(double value) override;
59 };
60
61 /**********
62  * Action *
63  **********/
64 class NetworkCm02Action : public NetworkAction {
65   friend Action* NetworkCm02Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate);
66   friend NetworkSmpiModel;
67
68 public:
69   NetworkCm02Action(kernel::resource::Model* model, double cost, bool failed) : NetworkAction(model, cost, failed){};
70   virtual ~NetworkCm02Action() = default;
71   void update_remains_lazy(double now) override;
72 };
73 }
74 }
75
76 #endif /* SURF_NETWORK_CM02_HPP_ */