fixeria has uploaded this change for review.

View Change

osmo_dia2gsup: set sndbuf/recbuf explicitly for SCTP

When opening an SCTP socket on Linux, Erlang/OTP does set its own
default SO_SNDBUF/SO_RCVBUF values if the respective socket options
(sndbuf and recbuf) are not given to gen_sctp:open/N explicitly.

For some reason, the default RCVBUF size (1024) is much smaller than
the default SNDBUF size (65536), and both are well below modern Linux
defaults. Such a small RCVBUF size becomes problematic when the
remote peer is sending large packets.

Let's explicitly set both sndbuf/recbuf parameters to 65536, allowing
the user to overwrite this default via the environment parameters.

For more details, see https://github.com/erlang/otp/issues/9722.

Change-Id: I793f1295ab42bfc548511fc5ffbda9070280745f
---
M src/osmo_dia2gsup.erl
1 file changed, 4 insertions(+), 1 deletion(-)

git pull ssh://gerrit.osmocom.org:29418/erlang/osmo_dia2gsup refs/changes/27/40127/1
diff --git a/src/osmo_dia2gsup.erl b/src/osmo_dia2gsup.erl
index 1739360..c8a1d2b 100644
--- a/src/osmo_dia2gsup.erl
+++ b/src/osmo_dia2gsup.erl
@@ -48,6 +48,7 @@

-define(SERVER, ?MODULE).
-define(ENV_DEFAULT_SCTP_NODELAY, true).
+-define(ENV_DEFAULT_SCTP_BUFSZ, 65536).

% Diameter application definitions

@@ -162,7 +163,9 @@
tcfg(Cfg, LAddr, LPort);

tcfg(sctp, LAddr, LPort) ->
- Cfg = #{sctp_nodelay => get_env(diameter_nodelay, ?ENV_DEFAULT_SCTP_NODELAY)},
+ Cfg = #{sctp_nodelay => get_env(diameter_nodelay, ?ENV_DEFAULT_SCTP_NODELAY),
+ recbuf => get_env(diameter_sctp_recbuf, ?ENV_DEFAULT_SCTP_BUFSZ),
+ sndbuf => get_env(diameter_sctp_sndbuf, ?ENV_DEFAULT_SCTP_BUFSZ)},
tcfg(Cfg, LAddr, LPort);

tcfg(Cfg, LAddr, LPort) when is_map(Cfg) ->

To view, visit change 40127. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: erlang/osmo_dia2gsup
Gerrit-Branch: master
Gerrit-Change-Id: I793f1295ab42bfc548511fc5ffbda9070280745f
Gerrit-Change-Number: 40127
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>