summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErlang/OTP <otp@erlang.org>2021-05-10 12:32:13 +0200
committerErlang/OTP <otp@erlang.org>2021-05-10 12:32:13 +0200
commit80abd8c9f6814f43527e55d0dd0c10bfb5b5988e (patch)
tree6d425602aa7577eb348a34bde98590975c17b939
parentc66bcc70494d1afdcadae2bd99f6f6e975b90cc1 (diff)
parent067be5c4b85ca07c967aed26954a98d18a9028b0 (diff)
downloaderlang-80abd8c9f6814f43527e55d0dd0c10bfb5b5988e.tar.gz
Merge branch 'anders/diameter/sctp/OTP-17366' into maint-23
* anders/diameter/sctp/OTP-17366: Fix appup blunder Add appup Suppress dialyzer warnings in code Fix association id of unordered send setopts in diameter_sctp Fix ignored unordered option on client diameter_sctp transport
-rw-r--r--lib/diameter/src/Makefile5
-rw-r--r--lib/diameter/src/base/diameter_traffic.erl2
-rw-r--r--lib/diameter/src/compiler/diameter_codegen.erl5
-rw-r--r--lib/diameter/src/diameter.appup.src16
-rw-r--r--lib/diameter/src/transport/diameter_sctp.erl16
-rw-r--r--lib/diameter/src/transport/diameter_tcp.erl2
-rw-r--r--lib/diameter/test/diameter_traffic_SUITE.erl18
7 files changed, 37 insertions, 27 deletions
diff --git a/lib/diameter/src/Makefile b/lib/diameter/src/Makefile
index 36e8fefd4c..348cc350e1 100644
--- a/lib/diameter/src/Makefile
+++ b/lib/diameter/src/Makefile
@@ -231,16 +231,13 @@ $(PLT):
dialyze: opt $(PLT)
dialyzer --plt $(PLT) \
--verbose \
- -Wno_improper_lists \
$(EBIN)/diameter_gen_base_rfc3588.$(EMULATOR) \
$(patsubst %, $(EBIN)/%.$(EMULATOR), \
$(notdir $(DICT_YRL) \
$(RT_MODULES) \
$(CT_MODULES) \
+ $(DICT_MODULES) \
$(INFO_MODULES)))
-# Omit all but the common dictionary module since these
-# (diameter_gen_relay in particular) generate warnings depending on how
-# much of the included diameter_gen.hrl they use.
# ----------------------------------------------------
# Release targets
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl
index 4667bbc3f2..110fdcafb0 100644
--- a/lib/diameter/src/base/diameter_traffic.erl
+++ b/lib/diameter/src/base/diameter_traffic.erl
@@ -26,6 +26,8 @@
-module(diameter_traffic).
+-dialyzer(no_improper_lists).
+
%% towards diameter
-export([send_request/4]).
diff --git a/lib/diameter/src/compiler/diameter_codegen.erl b/lib/diameter/src/compiler/diameter_codegen.erl
index 4e6fe32d69..4a3f65359a 100644
--- a/lib/diameter/src/compiler/diameter_codegen.erl
+++ b/lib/diameter/src/compiler/diameter_codegen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2017. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -143,7 +143,8 @@ gen(erl, ParseD, Mod) ->
erl_forms(Mod, ParseD) ->
Forms = [[{?attribute, module, Mod},
{?attribute, compile, {parse_transform, diameter_exprecs}},
- {?attribute, compile, nowarn_unused_function}],
+ {?attribute, compile, nowarn_unused_function},
+ {?attribute, dialyzer, no_return}],
make_hrl_forms(ParseD),
[{?attribute, export, [{name, 0},
{id, 0},
diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src
index 8a2b851499..e6379cd78a 100644
--- a/lib/diameter/src/diameter.appup.src
+++ b/lib/diameter/src/diameter.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2020. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -70,8 +70,11 @@
{update, diameter_peer_fsm},
{update, diameter_service},
{load_module, diameter_traffic},
- {update, diameter_tcp}]},
- {"2.2.2", [{load_module, diameter}]} %% 22.2.8
+ {update, diameter_tcp},
+ {update, diameter_sctp}]},
+ {"2.2.2", [{load_module, diameter}, %% 22.2.8
+ {update, diameter_sctp}]},
+ {"2.2.3", [{update, diameter_sctp}]} %% 22.3
],
[
{"0.9", [{restart_application, diameter}]},
@@ -123,7 +126,10 @@
{update, diameter_peer_fsm},
{update, diameter_service},
{load_module, diameter_traffic},
- {update, diameter_tcp}]},
- {"2.2.2", [{load_module, diameter}]}
+ {update, diameter_tcp},
+ {update, diameter_sctp}]},
+ {"2.2.2", [{load_module, diameter},
+ {update, diameter_sctp}]},
+ {"2.2.3", [{update, diameter_sctp}]}
]
}.
diff --git a/lib/diameter/src/transport/diameter_sctp.erl b/lib/diameter/src/transport/diameter_sctp.erl
index 64b34da690..0f20cda95f 100644
--- a/lib/diameter/src/transport/diameter_sctp.erl
+++ b/lib/diameter/src/transport/diameter_sctp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2017. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -283,7 +283,7 @@ i({connect, Pid, Opts, Addrs, Ref}) ->
mode = {connect, connect(Sock, RAs, RP, [])},
socket = Sock,
message_cb = CB,
- unordered = proplists:get_value(ordered, OwnOpts, false),
+ unordered = proplists:get_value(unordered, OwnOpts, false),
packet = proplists:get_value(packet, OwnOpts, true),
send = proplists:get_value(sender, OwnOpts, false)};
@@ -813,23 +813,25 @@ recv(#transport{rotate = B} = S)
recv(#transport{rotate = 0,
streams = {_,OS},
socket = Sock,
+ assoc_id = Id,
unordered = B}
= S) ->
- ok = unordered(Sock, OS, B),
+ ok = unordered(Sock, Id, OS, B),
S#transport{rotate = 1 < OS};
recv(#transport{rotate = N} = S) ->
S#transport{rotate = N-1}.
-%% unordered/3
+%% unordered/4
-unordered(Sock, OS, B)
+unordered(Sock, Id, OS, B)
when B;
is_integer(B), OS =< B ->
inet:setopts(Sock, [{sctp_default_send_param,
- #sctp_sndrcvinfo{flags = [unordered]}}]);
+ #sctp_sndrcvinfo{flags = [unordered],
+ assoc_id = Id}}]);
-unordered(_, OS, B)
+unordered(_, _, OS, B)
when not B;
is_integer(B), B < OS ->
ok.
diff --git a/lib/diameter/src/transport/diameter_tcp.erl b/lib/diameter/src/transport/diameter_tcp.erl
index 95bee749f6..2c5dc2fa2e 100644
--- a/lib/diameter/src/transport/diameter_tcp.erl
+++ b/lib/diameter/src/transport/diameter_tcp.erl
@@ -20,6 +20,8 @@
-module(diameter_tcp).
+-dialyzer(no_improper_lists).
+
-behaviour(gen_server).
%% interface
diff --git a/lib/diameter/test/diameter_traffic_SUITE.erl b/lib/diameter/test/diameter_traffic_SUITE.erl
index 452bd28333..a12759bac2 100644
--- a/lib/diameter/test/diameter_traffic_SUITE.erl
+++ b/lib/diameter/test/diameter_traffic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2020. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2021. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -279,19 +279,19 @@ all() ->
%% Redefine this to run one or more groups for debugging purposes.
-define(GROUPS, []).
-%-define(GROUPS, [[tcp,rfc6733,record,map,false,false,false,false]]).
+%-define(GROUPS, [[sctp,rfc6733,record,map,false,false,true,false]]).
%% Issues with gen_sctp sporadically cause huge numbers of failed
%% testcases when running testcases in parallel.
groups() ->
- Names = names(),
+ Names = names([] == ?GROUPS orelse ?GROUPS),
[{P, [P], Ts} || Ts <- [tc()], P <- [shuffle, parallel]]
++
[{?util:name(N), [], [{group, if T == sctp; S -> shuffle;
true -> parallel end}]}
|| [T,_,_,_,S|_] = N <- Names]
++
- [{T, [], [{group, ?util:name(N)} || N <- names(Names, ?GROUPS),
+ [{T, [], [{group, ?util:name(N)} || N <- Names,
T == hd(N)]}
|| T <- ?TRANSPORTS]
++
@@ -308,13 +308,13 @@ names() ->
CS <- ?SENDERS,
?SKIP =< rand:uniform()].
-names(Names, []) ->
+names(true) ->
+ names(names());
+
+names(Names) ->
[N || N <- Names,
[CS,SS|_] <- [lists:reverse(N)],
- SS orelse CS]; %% avoid deadlock
-
-names(_, Names) ->
- Names.
+ SS orelse CS]. %% avoid deadlock
%% --------------------