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.