| /* |
| * Copyright (c) 2021 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_CROSS_TRAFFIC_H_ |
| #define API_TEST_NETWORK_EMULATION_CROSS_TRAFFIC_H_ |
| |
| #include <cstddef> |
| #include <functional> |
| |
| #include "api/units/data_rate.h" |
| #include "api/units/data_size.h" |
| #include "api/units/time_delta.h" |
| #include "api/units/timestamp.h" |
| |
| namespace webrtc { |
| |
| // This API is still in development and can be changed without prior notice. |
| |
| // Represents the endpoint for cross traffic that is going through the network. |
| // It can be used to emulate unexpected network load. |
| class CrossTrafficRoute { |
| public: |
| virtual ~CrossTrafficRoute() = default; |
| |
| // Triggers sending of dummy packets with size `packet_size` bytes. |
| virtual void TriggerPacketBurst(size_t num_packets, size_t packet_size) = 0; |
| // Sends a packet over the nodes. The content of the packet is unspecified; |
| // only the size metter for the emulation purposes. |
| virtual void SendPacket(size_t packet_size) = 0; |
| // Sends a packet over the nodes and runs `action` when it has been delivered. |
| virtual void NetworkDelayedAction(size_t packet_size, |
| std::function<void()> action) = 0; |
| }; |
| |
| // Describes a way of generating cross traffic on some route. Used by |
| // NetworkEmulationManager to produce cross traffic during some period of time. |
| class CrossTrafficGenerator { |
| public: |
| virtual ~CrossTrafficGenerator() = default; |
| |
| // Time between Process calls. |
| virtual TimeDelta GetProcessInterval() const = 0; |
| |
| // Called periodically by NetworkEmulationManager. Generates traffic on the |
| // route. |
| virtual void Process(Timestamp at_time) = 0; |
| }; |
| |
| // Config of a cross traffic generator. Generated traffic rises and falls |
| // randomly. |
| struct RandomWalkConfig { |
| int random_seed = 1; |
| DataRate peak_rate = DataRate::KilobitsPerSec(100); |
| DataSize min_packet_size = DataSize::Bytes(200); |
| TimeDelta min_packet_interval = TimeDelta::Millis(1); |
| TimeDelta update_interval = TimeDelta::Millis(200); |
| double variance = 0.6; |
| double bias = -0.1; |
| }; |
| |
| // Config of a cross traffic generator. Generated traffic has form of periodic |
| // peaks alternating with periods of silence. |
| struct PulsedPeaksConfig { |
| DataRate peak_rate = DataRate::KilobitsPerSec(100); |
| DataSize min_packet_size = DataSize::Bytes(200); |
| TimeDelta min_packet_interval = TimeDelta::Millis(1); |
| TimeDelta send_duration = TimeDelta::Millis(100); |
| TimeDelta hold_duration = TimeDelta::Millis(2000); |
| }; |
| |
| struct FakeTcpConfig { |
| DataSize packet_size = DataSize::Bytes(1200); |
| DataSize send_limit = DataSize::PlusInfinity(); |
| TimeDelta process_interval = TimeDelta::Millis(200); |
| TimeDelta packet_timeout = TimeDelta::Seconds(1); |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // API_TEST_NETWORK_EMULATION_CROSS_TRAFFIC_H_ |