From 282ca48b12a5b3cc9c57f96adccaeb92e12f86b5 Mon Sep 17 00:00:00 2001 From: Paul-Louis Ageneau Date: Tue, 20 Apr 2021 19:18:06 +0200 Subject: [PATCH 1/2] Added max burst setting for SCTP --- include/rtc/global.hpp | 2 ++ include/rtc/rtc.h | 1 + src/capi.cpp | 5 +++++ src/impl/sctptransport.cpp | 3 +++ 4 files changed, 11 insertions(+) diff --git a/include/rtc/global.hpp b/include/rtc/global.hpp index 7dfc9de..68d9332 100644 --- a/include/rtc/global.hpp +++ b/include/rtc/global.hpp @@ -46,10 +46,12 @@ RTC_EXPORT void Preload(); RTC_EXPORT void Cleanup(); struct SctpSettings { + // For the following settings, not set means optimized default optional recvBufferSize; optional sendBufferSize; optional maxChunksOnQueue; optional initialCongestionWindow; + optional maxBurst; optional congestionControlModule; optional delayedSackTime; }; diff --git a/include/rtc/rtc.h b/include/rtc/rtc.h index 2d08fbc..563d8b5 100644 --- a/include/rtc/rtc.h +++ b/include/rtc/rtc.h @@ -226,6 +226,7 @@ typedef struct { int sendBufferSize; // <= 0 means optimized default int maxChunksOnQueue; // <= 0 means optimized default int initialCongestionWindow; // <= 0 means optimized default + int maxBurst; // 0 means optimized default, < 0 means disabled int congestionControlModule; // <= 0 means default (0: RFC2581, 1: HSTCP, 2: H-TCP, 3: RTCC) int delayedSackTimeMs; // <= 0 means optimized default } rtcSctpSettings; diff --git a/src/capi.cpp b/src/capi.cpp index 518d599..4366150 100644 --- a/src/capi.cpp +++ b/src/capi.cpp @@ -683,6 +683,11 @@ int rtcSetSctpSettings(const rtcSctpSettings *settings) { if (settings->initialCongestionWindow > 0) s.initialCongestionWindow = size_t(settings->initialCongestionWindow); + if (settings->maxBurst > 0) + s.maxBurst = size_t(settings->maxBurst); + else if (settings->maxBurst < 0) + s.maxBurst = size_t(0); // setting to 0 disables, not setting chooses optimized default + if (settings->congestionControlModule >= 0) s.congestionControlModule = unsigned(settings->congestionControlModule); diff --git a/src/impl/sctptransport.cpp b/src/impl/sctptransport.cpp index 8e32db9..11690d0 100644 --- a/src/impl/sctptransport.cpp +++ b/src/impl/sctptransport.cpp @@ -115,6 +115,9 @@ void SctpTransport::SetSettings(const SctpSettings &s) { // Increase initial congestion window size to 10 MTUs (RFC 6928) by default usrsctp_sysctl_set_sctp_initial_cwnd(to_uint32(s.initialCongestionWindow.value_or(10))); + // Set max burst to 10 MTUs by default (max burst is initially 0, meaning disabled) + usrsctp_sysctl_set_sctp_max_burst_default(to_uint32(s.maxBurst.value_or(10))); + // Use standard SCTP congestion control (RFC 4960) by default // See https://github.com/paullouisageneau/libdatachannel/issues/354 usrsctp_sysctl_set_sctp_default_cc_module(to_uint32(s.congestionControlModule.value_or(0))); From 07a5591cda8e8bb8ed66531c231cd8b83722d629 Mon Sep 17 00:00:00 2001 From: Paul-Louis Ageneau Date: Tue, 20 Apr 2021 19:23:18 +0200 Subject: [PATCH 2/2] Added comments for SCTP settings --- include/rtc/global.hpp | 12 ++++++------ include/rtc/rtc.h | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/rtc/global.hpp b/include/rtc/global.hpp index 68d9332..d51b1c7 100644 --- a/include/rtc/global.hpp +++ b/include/rtc/global.hpp @@ -47,12 +47,12 @@ RTC_EXPORT void Cleanup(); struct SctpSettings { // For the following settings, not set means optimized default - optional recvBufferSize; - optional sendBufferSize; - optional maxChunksOnQueue; - optional initialCongestionWindow; - optional maxBurst; - optional congestionControlModule; + optional recvBufferSize; // in bytes + optional sendBufferSize; // in bytes + optional maxChunksOnQueue; // in chunks + optional initialCongestionWindow; // in MTUs + optional maxBurst; // in MTUs + optional congestionControlModule; // 0: RFC2581, 1: HSTCP, 2: H-TCP, 3: RTCC optional delayedSackTime; }; diff --git a/include/rtc/rtc.h b/include/rtc/rtc.h index 563d8b5..30c4ca6 100644 --- a/include/rtc/rtc.h +++ b/include/rtc/rtc.h @@ -222,13 +222,13 @@ RTC_EXPORT int rtcGetTrackDescription(int tr, char *buffer, int size); // SCTP settings typedef struct { - int recvBufferSize; // <= 0 means optimized default - int sendBufferSize; // <= 0 means optimized default - int maxChunksOnQueue; // <= 0 means optimized default - int initialCongestionWindow; // <= 0 means optimized default - int maxBurst; // 0 means optimized default, < 0 means disabled - int congestionControlModule; // <= 0 means default (0: RFC2581, 1: HSTCP, 2: H-TCP, 3: RTCC) - int delayedSackTimeMs; // <= 0 means optimized default + int recvBufferSize; // in bytes, <= 0 means optimized default + int sendBufferSize; // in bytes, <= 0 means optimized default + int maxChunksOnQueue; // in chunks, <= 0 means optimized default + int initialCongestionWindow; // in MTUs, <= 0 means optimized default + int maxBurst; // in MTUs, 0 means optimized default, < 0 means disabled + int congestionControlModule; // 0: RFC2581 (default), 1: HSTCP, 2: H-TCP, 3: RTCC + int delayedSackTimeMs; // in msecs, <= 0 means optimized default } rtcSctpSettings; // Note: SCTP settings apply to newly-created PeerConnections only