laforge has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35588?usp=email )
Change subject: diameter: Allow configuring (re)connect timer in s6b and swx ......................................................................
diameter: Allow configuring (re)connect timer in s6b and swx
TTCN3 tests will require lower values to avoid timing out.
Change-Id: I7d280f83f4f375eaf34ea3b69a421372af54ffdb --- M config/sys.config M src/aaa_diameter_s6b.erl M src/epdg_diameter_swx.erl 3 files changed, 40 insertions(+), 14 deletions(-)
Approvals: Jenkins Builder: Verified daniel: Looks good to me, but someone else must approve laforge: Looks good to me, approved
diff --git a/config/sys.config b/config/sys.config index 630a057..35e1492 100755 --- a/config/sys.config +++ b/config/sys.config @@ -9,6 +9,8 @@ {diameter_remote_ip, "127.0.0.1"}, {diameter_remote_port, 3868}, {diameter_proto, sctp}, + {diameter_connect_timer, 30000}, + {diameter_watchdog_timer, 30000}, {vendor_id, 0}, {origin_host, "epdg.localdomain"}, {origin_realm, "localdomain"}, @@ -17,6 +19,8 @@ {dia_s6b_local_ip, "127.0.0.10"}, {dia_s6b_local_port, 3868}, {dia_s6b_proto, sctp}, + {dia_s6b_connect_timer, 30000}, + {dia_s6b_watchdog_timer, 30000}, {dia_s6b_vendor_id, 0}, {dia_s6b_origin_host, "aaa.localdomain"}, {dia_s6b_origin_realm, "localdomain"}, diff --git a/src/aaa_diameter_s6b.erl b/src/aaa_diameter_s6b.erl index 4ee0219..e4fff31 100644 --- a/src/aaa_diameter_s6b.erl +++ b/src/aaa_diameter_s6b.erl @@ -67,6 +67,8 @@ -define(ENV_DEFAULT_DIAMETER_PROTO, sctp). -define(ENV_DEFAULT_DIAMETER_REMOTE_IP, "127.0.0.10"). -define(ENV_DEFAULT_DIAMETER_REMOTE_PORT, 3868). +-define(ENV_DEFAULT_DIAMETER_CONNECT_TIMER_MS, 30000). +-define(ENV_DEFAULT_DIAMETER_WATCHDOG_TIMER_MS, 30000).
-define(VENDOR_ID_3GPP, 10415). -define(VENDOR_ID_3GPP2, 5535). @@ -121,9 +123,11 @@ Proto = application:get_env(?ENV_APP_NAME, dia_s6b_proto, ?ENV_DEFAULT_DIAMETER_PROTO), Ip = application:get_env(?ENV_APP_NAME, dia_s6b_local_ip, ?ENV_DEFAULT_DIAMETER_REMOTE_IP), Port = application:get_env(?ENV_APP_NAME, dia_s6b_local_port, ?ENV_DEFAULT_DIAMETER_REMOTE_PORT), + ConnectTimer = application:get_env(?ENV_APP_NAME, dia_s6b_connect_timer, ?ENV_DEFAULT_DIAMETER_CONNECT_TIMER_MS), + WatchdogTimer = application:get_env(?ENV_APP_NAME, dia_s6b_watchdog_timer, ?ENV_DEFAULT_DIAMETER_WATCHDOG_TIMER_MS), ok = diameter:start_service(?MODULE, ?SERVICE), % lager:info("DiaServices is ~p~n", [DiaServ]), - {ok, _} = listen({address, Proto, Ip, Port}), + {ok, _} = listen({address, Proto, Ip, Port}, {timer, ConnectTimer, WatchdogTimer}), {ok, State}.
test() -> @@ -176,8 +180,7 @@ %% Internal Function Definitions %% ------------------------------------------------------------------
-%% connect/2 -listen(Name, {address, Protocol, IPAddr, Port}) -> +listen(Name, {address, Protocol, IPAddr, Port}, {timer, ConnectTimer, WatchdogTimer}) -> lager:notice("~s Listening on IP ~s port ~p~n", [Name, IPAddr, Port]), {ok, IP} = inet_parse:address(IPAddr), TransportOpts = @@ -188,11 +191,13 @@ {port, Port} %%{raddr, IP}, %%{rport, Port} - ]}], - diameter:add_transport(Name, {listen, [{reconnect_timer, 1000} | TransportOpts]}). + ]}, + {connect_timer, ConnectTimer}, + {watchdog_timer, WatchdogTimer}], + diameter:add_transport(Name, {listen, TransportOpts}).
-listen(Address) -> - listen(?SVC_NAME, Address). +listen(Address, Timers) -> + listen(?SVC_NAME, Address, Timers).
%% Convert connection type tmod(tcp) -> diff --git a/src/epdg_diameter_swx.erl b/src/epdg_diameter_swx.erl index c278206..ada8555 100644 --- a/src/epdg_diameter_swx.erl +++ b/src/epdg_diameter_swx.erl @@ -67,6 +67,8 @@ -define(ENV_DEFAULT_DIAMETER_PROTO, sctp). -define(ENV_DEFAULT_DIAMETER_REMOTE_IP, "127.0.0.1"). -define(ENV_DEFAULT_DIAMETER_REMOTE_PORT, 3868). +-define(ENV_DEFAULT_DIAMETER_CONNECT_TIMER_MS, 30000). +-define(ENV_DEFAULT_DIAMETER_WATCHDOG_TIMER_MS, 30000).
-define(VENDOR_ID_3GPP, 10415). -define(VENDOR_ID_3GPP2, 5535). @@ -121,9 +123,11 @@ Proto = application:get_env(?ENV_APP_NAME, diameter_proto, ?ENV_DEFAULT_DIAMETER_PROTO), Ip = application:get_env(?ENV_APP_NAME, diameter_remote_ip, ?ENV_DEFAULT_DIAMETER_REMOTE_IP), Port = application:get_env(?ENV_APP_NAME, diameter_remote_port, ?ENV_DEFAULT_DIAMETER_REMOTE_PORT), + ConnectTimer = application:get_env(?ENV_APP_NAME, diameter_connect_timer, ?ENV_DEFAULT_DIAMETER_CONNECT_TIMER_MS), + WatchdogTimer = application:get_env(?ENV_APP_NAME, diameter_watchdog_timer, ?ENV_DEFAULT_DIAMETER_WATCHDOG_TIMER_MS), ok = diameter:start_service(?MODULE, ?SERVICE), % lager:info("DiaServices is ~p~n", [DiaServ]), - {ok, _} = connect({address, Proto, Ip, Port}), + {ok, _} = connect({address, Proto, Ip, Port}, {timer, ConnectTimer, WatchdogTimer}), {ok, State}.
test() -> @@ -256,8 +260,8 @@ %% Internal Function Definitions %% ------------------------------------------------------------------
-%% connect/2 -connect(Name, {address, Protocol, IPAddr, Port}) -> +%% connect/3 +connect(Name, {address, Protocol, IPAddr, Port}, {timer, ConnectTimer, WatchdogTimer}) -> lager:notice("~s connecting to IP ~s port ~p~n", [Name, IPAddr, Port]), {ok, IP} = inet_parse:address(IPAddr), TransportOpts = @@ -265,11 +269,13 @@ {transport_config, [{reuseaddr, true}, {raddr, IP}, - {rport, Port}]}], - diameter:add_transport(Name, {connect, [{reconnect_timer, 1000} | TransportOpts]}). + {rport, Port}]}, + {connect_timer, ConnectTimer}, + {watchdog_timer, WatchdogTimer}], + diameter:add_transport(Name, {connect, TransportOpts}).
-connect(Address) -> - connect(?SVC_NAME, Address). +connect(Address, Timers) -> + connect(?SVC_NAME, Address, Timers).
%% Convert connection type tmod(tcp) ->