#ifndef NETWORK_SWITCH_DEDICATED_BUFFER_H #define NETWORK_SWITCH_DEDICATED_BUFFER_H #include "network/switch/switch_buffer.h" namespace dofs { // DedicatedBuffer: buffer_size is split across ports (equal split by default). // Each port has a hard cap; no borrowing. class DedicatedBuffer : public SwitchBuffer { public: DedicatedBuffer(Simulator *const sim, NetworkSwitch *const owner, Bytes total_bytes, uint16_t ports); bool enqueue_packet(const Packet &pkt, PortId egress, FlowPriority prio) override; bool drain_one(PortId port) override; protected: std::array, PRI_COUNT> &queues_for(PortId p) override; const std::array, PRI_COUNT> &queues_for( PortId p) const override; bool on_enqueue_cap_check(PortId port, Bytes sz) override; void on_enqueue_commit(PortId port, Bytes sz) override; void on_dequeue_commit(PortId port, Bytes sz) override; private: // Hard cap per port (equal share of total; final remainder goes to low ports). Bytes _per_port_cap; std::vector, PRI_COUNT >> _per_port_queues; }; } // namespace dofs #endif // NETWORK_SWITCH_DEDICATED_BUFFER_H