Rate limiting: green, yellow, red
Every subscriber gets two rate limiters, one upstream and one downstream, built right into their session. They implement the standard two-rate, three-colour policing model (RFC 2698). Two numbers define each direction:
- CIR — the committed rate, the speed the subscriber is guaranteed.
- PIR — the peak rate, the most they may ever burst to.
Each packet is then coloured:
| Colour | Meaning | What happens |
|---|---|---|
| Green | Within the committed rate (≤ CIR) | Forwarded, counted |
| Yellow | Bursting above CIR but within peak (≤ PIR) | Forwarded, counted |
| Red | Exceeds the peak rate (> PIR) | Dropped, counted |
This colouring is not just a forwarding decision — it is a measurement. For every subscriber the data plane keeps a full set of counters split by colour, by direction, and by unit (bytes and packets). That means you can see, per subscriber, not just how much they used but how much was in-contract (green), how much was burst (yellow), and how much was shed at the cap (red) — in each direction. A subscriber whose red counter is climbing is constantly hitting their limit: that is both a quality-of-experience signal (a candidate for an upsell) and a health signal. Community BNGs typically give you two numbers per subscriber; this one gives you a far richer picture, and it costs nothing on the fast path.
Alongside the per-subscriber counters, the data plane keeps six node-wide band counters (green/yellow/red × up/down). These let you read what the whole box is doing by QoS band in a single cheap query, without walking the session table — ideal for a high-frequency dashboard.