#ifndef NETWORK_SWITCH_SHARED_BUFFER_H #define NETWORK_SWITCH_SHARED_BUFFER_H #include "network/switch/switch_buffer.h" namespace dofs { // SharedBuffer: a single global memory pool shared by all ports. // Only guard is the total pool (_buffer_bytes). Per-port usage tracked for stats. class SharedBuffer : public SwitchBuffer { public: SharedBuffer(Simulator* const sim, NetworkSwitch* const owner, Bytes total_bytes, uint16_t ports); virtual bool enqueue_packet(const Packet& pkt, PortId egress, FlowPriority prio) override; virtual bool drain_one(PortId port) override; protected: virtual std::array, PRI_COUNT> &queues_for( PortId p) override; virtual const std::array, PRI_COUNT> &queues_for( PortId p) const override; virtual bool on_enqueue_cap_check(PortId port, Bytes sz) override; virtual void on_enqueue_commit(PortId port, Bytes sz) override; virtual void on_dequeue_commit(PortId port, Bytes sz) override; private: // Per-port, per-priority queues std::vector, PRI_COUNT >> _per_port_queues; Bytes _used_total; }; } // namespace dofs #endif // NETWORK_SWITCH_SHARED_BUFFER_H