This reverts commit 833369b1fc.
Original cl in the first patchset.
Original cl description:
The purpose of the interface is to allow network simulations to implement their own queueing.
The existing SimulatedNetwork is refactored to use a NetworkQueue interface.
Per default a simple LeayBucket is used that has the same behavior as
SimulatedNetwork today.
Bug: webrtc:42225697
Change-Id: Ic728a5e5f711cf380a38543fac02849da3861ab6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/399480
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45119}
62 lines
2.2 KiB
C++
62 lines
2.2 KiB
C++
/*
|
|
* Copyright 2025 The WebRTC Project Authors. All rights reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef API_TEST_NETWORK_EMULATION_NETWORK_QUEUE_H_
|
|
#define API_TEST_NETWORK_EMULATION_NETWORK_QUEUE_H_
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <vector>
|
|
|
|
#include "api/test/simulated_network.h"
|
|
#include "api/units/timestamp.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// NetworkQueue defines the interface for a queue used in network simulation.
|
|
// The purpose is to allow for different AQM implementations.
|
|
// A queue should not modify PacketInFlightInfo except for the explicit
|
|
// congestion notification field (ecn).
|
|
class NetworkQueue {
|
|
public:
|
|
// Max capacity a queue is expected to handle.
|
|
constexpr static size_t kMaxPacketCapacity = 10000;
|
|
|
|
virtual ~NetworkQueue() = default;
|
|
// Sets the max capacity of the queue. If there are already more than
|
|
// `max_capacitiy` packets in the queue, the behaviour depends on the
|
|
// implementation.
|
|
virtual void SetMaxPacketCapacity(size_t max_capactiy) = 0;
|
|
// Enqueues a packet.
|
|
// Must return true if the packet is enqueued successfully, false otherwise.
|
|
virtual bool EnqueuePacket(const PacketInFlightInfo& packet_info) = 0;
|
|
// Next packet that can be dequeued.
|
|
virtual std::optional<PacketInFlightInfo> PeekNextPacket() const = 0;
|
|
// Dequeues a packet.
|
|
// or std::nullopt if there are no enqueued packets.
|
|
virtual std::optional<PacketInFlightInfo> DequeuePacket(
|
|
Timestamp time_now) = 0;
|
|
|
|
// Dequeues all packets that are dropped by the queue itself after being
|
|
// enqueued.
|
|
virtual std::vector<PacketInFlightInfo> DequeueDroppedPackets() = 0;
|
|
virtual bool empty() const = 0;
|
|
};
|
|
|
|
class NetworkQueueFactory {
|
|
public:
|
|
virtual ~NetworkQueueFactory() = default;
|
|
virtual std::unique_ptr<NetworkQueue> CreateQueue() = 0;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
#endif // API_TEST_NETWORK_EMULATION_NETWORK_QUEUE_H_
|