11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
18PROMEKI_NAMESPACE_BEGIN
71class St2110VrxMonitor {
78 St2110VrxMonitor() =
default;
114 void configure(uint64_t drainRateBytesPerSec, int64_t vrxFullBytes,
116 const Duration &burstWindow = Duration::fromMicroseconds(5));
145 void observePacket(int64_t timestamp,
int sizeBytes);
148 bool isConfigured()
const {
return _drainRateBytesPerSec > 0; }
151 uint64_t drainRateBytesPerSec()
const {
return _drainRateBytesPerSec; }
154 int64_t vrxFullBytes()
const {
return _vrxFullBytes; }
157 int cmaxPackets()
const {
return _cmaxPackets; }
160 int64_t occupancyBytes()
const {
return _occupancyBytes; }
164 int64_t peakOccupancyBytes()
const {
return _peakOccupancyBytes; }
168 int peakBurstPackets()
const {
return _peakBurstPackets; }
173 int64_t vrxViolations()
const {
return _vrxViolations; }
178 int64_t cmaxViolations()
const {
return _cmaxViolations; }
182 int64_t observedPackets()
const {
return _observedPackets; }
186 int64_t observedBytes()
const {
return _observedBytes; }
195 bool isConformant()
const {
return _vrxViolations == 0 && _cmaxViolations == 0; }
198 uint64_t _drainRateBytesPerSec = 0;
199 int64_t _vrxFullBytes = 0;
200 int _cmaxPackets = 0;
201 int64_t _burstWindowNs = 5'000;
203 int64_t _occupancyBytes = 0;
204 int64_t _peakOccupancyBytes = 0;
205 int _currentBurstPackets = 0;
206 int _peakBurstPackets = 0;
207 int64_t _vrxViolations = 0;
208 int64_t _cmaxViolations = 0;
209 int64_t _observedPackets = 0;
210 int64_t _observedBytes = 0;
211 int64_t _lastTimestampNs = -1;