+#include <xbt/base.h>
+
+#include "network_smpi.hpp"
+
+namespace simgrid {
+namespace surf {
+
+class XBT_PRIVATE IBNode;
+
+class XBT_PRIVATE ActiveComm{
+public :
+ //IBNode* origin;
+ IBNode* destination;
+ NetworkAction *action;
+ double init_rate;
+ ActiveComm() : destination(NULL),action(NULL),init_rate(-1){};
+ ~ActiveComm(){};
+};
+
+class IBNode{
+public :
+ int id;
+ //store related links, to ease computation of the penalties
+ std::vector<ActiveComm*> ActiveCommsUp;
+ //store the number of comms received from each node
+ std::map<IBNode*, int> ActiveCommsDown;
+ //number of comms the node is receiving
+ int nbActiveCommsDown;
+ IBNode(int id) : id(id),nbActiveCommsDown(0){};
+ ~IBNode(){};
+};
+
+class XBT_PRIVATE NetworkIBModel : public NetworkSmpiModel {