summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/api/test/network_emulation/cross_traffic.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--third_party/libwebrtc/api/test/network_emulation/cross_traffic.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/third_party/libwebrtc/api/test/network_emulation/cross_traffic.h b/third_party/libwebrtc/api/test/network_emulation/cross_traffic.h
new file mode 100644
index 0000000000..737a93c2fd
--- /dev/null
+++ b/third_party/libwebrtc/api/test/network_emulation/cross_traffic.h
@@ -0,0 +1,85 @@
+/*
+ * 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 "api/task_queue/task_queue_base.h"
+#include "api/test/network_emulation/network_emulation_interfaces.h"
+#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_