network_model_bus.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef NETWORK_MODEL_BUS_H
  2. #define NETWORK_MODEL_BUS_H
  3. #include "network.h"
  4. #include "core.h"
  5. #include "lock.h"
  6. #include "subsecond_time.h"
  7. #include "queue_model.h"
  8. #include "contention_model.h"
  9. class NetworkModelBusGlobal
  10. {
  11. public:
  12. Lock _lock;
  13. const ComponentBandwidth _bandwidth; //< Bits per cycle
  14. QueueModel* _queue_model;
  15. UInt64 _num_packets;
  16. UInt64 _num_packets_delayed;
  17. UInt64 _num_bytes;
  18. SubsecondTime _time_used;
  19. SubsecondTime _total_delay;
  20. NetworkModelBusGlobal(String name);
  21. ~NetworkModelBusGlobal();
  22. SubsecondTime useBus(SubsecondTime t_start, UInt32 length, subsecond_time_t *queue_delay_stats = NULL);
  23. };
  24. class NetworkModelBus : public NetworkModel
  25. {
  26. static NetworkModelBusGlobal* _bus_global[NUM_STATIC_NETWORKS];
  27. private:
  28. bool _enabled;
  29. NetworkModelBusGlobal* _bus;
  30. bool _ignore_local;
  31. bool accountPacket(const NetPacket &pkt);
  32. public:
  33. NetworkModelBus(Network *net, EStaticNetwork net_type);
  34. ~NetworkModelBus() {}
  35. void routePacket(const NetPacket &pkt, std::vector<Hop> &nextHops);
  36. void processReceivedPacket(NetPacket& pkt);
  37. void enable()
  38. { _enabled = true; }
  39. void disable()
  40. { _enabled = false; }
  41. };
  42. #endif /* NETWORK_MODEL_BUS_H */