Skip to content

feat(transport): congestion control abstraction layer (trait-based CC strategy) #98

Description

@Yanstart

Context

Quick- currently selects CC via a simple enum (Cubic | Bbr | Bbr2) mapped to quiche's one-time config.set_cc_algorithm() call. This works for a single-backend architecture but limits future evolution.

Goal

Create a trait-based CC abstraction that decouples Quick-'s transport layer from quiche's internal CC implementation. This enables:

  • Pluggable CC backends (not just quiche-internal algorithms)
  • Runtime CC comparison/A/B testing framework
  • Future multipath-QUIC (feat(transport): Multipath-QUIC preparation #49) where different paths may use different CC
  • Potential integration of non-quiche QUIC backends

Requirements

  • CongestionController trait abstracting CC selection, parameterization, and metrics
  • Benchmark framework for A/B CC comparison on identical network conditions
  • Preserve current enum simplicity for the common case (quiche-internal CC)
  • Zero overhead when using quiche's built-in CC (trait should compile away)

Dependencies

Non-goals

  • Not replacing quiche's internal CC — wrapping it
  • Not implementing CC algorithms in Rust outside quiche

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions