fixeria has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo_dia2gsup/+/40127?usp=email )
Change subject: osmo_dia2gsup: set sndbuf/recbuf explicitly for SCTP ......................................................................
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(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/src/osmo_dia2gsup.erl b/src/osmo_dia2gsup.erl index 4f7f21f..cda616b 100644 --- a/src/osmo_dia2gsup.erl +++ b/src/osmo_dia2gsup.erl @@ -48,6 +48,7 @@
-define(SERVER, ?MODULE). -define(ENV_DEFAULT_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_NODELAY)}, + Cfg = #{sctp_nodelay => get_env(diameter_nodelay, ?ENV_DEFAULT_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) ->