lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/41588?usp=email )
Change subject: gtpc2: allow to set the restart counter ......................................................................
gtpc2: allow to set the restart counter
The restart counter a 8 bit value is used to detect if a component has been restarted. By the spec the IE recovery should be only present in the first PDU towards a new peer. But this is for a later improvement. Use system_time by millisecond mod 256 as default. Further allow the supervisor to set it to a specific value.
Change-Id: I1e894a2c54dd180c0bc3a6f78d0bb7dd455cad81 --- M src/epdg_gtpc_s2b.erl M src/osmo_epdg_sup.erl 2 files changed, 7 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/88/41588/1
diff --git a/src/epdg_gtpc_s2b.erl b/src/epdg_gtpc_s2b.erl index aa14010..9becfdb 100644 --- a/src/epdg_gtpc_s2b.erl +++ b/src/epdg_gtpc_s2b.erl @@ -108,9 +108,13 @@ ok.
init(State) -> + % Use system_time in order to ensure a fresh system wouldn't re-use always the same restart_counter + % monotonic timer could be to reproducible on systems. + Defaults = #{restart_counter => erlang:system_time(millisecond) rem 256}, lager:info("epdg_gtpc_s2b: init(): ~p", [State]), - [LocalAddr | [LocalPort | [RemoteAddr | [RemotePort | [GtpuLocalAddr | _]]]]] = State, + [LocalAddr | [LocalPort | [RemoteAddr | [RemotePort | [GtpuLocalAddr | [UserConfig, _]]]]]] = State, lager:info("epdg_gtpc_s2b: Binding to IP ~s port ~p~n", [LocalAddr, LocalPort]), + Config = maps:merge(Defaults, UserConfig), {ok, LocalAddrInet} = inet_parse:address(LocalAddr), {ok, RemoteAddrInet} = inet_parse:address(RemoteAddr), {ok, GtpuLocalAddrInet} = inet_parse:address(GtpuLocalAddr), @@ -135,7 +139,7 @@ rport = RemotePort, laddr_gtpu_str = GtpuLocalAddr, laddr_gtpu = GtpuLocalAddrInet, - restart_counter = 0, + restart_counter = maps:get(restart_counter, Config), seq_no = rand:uniform(16#FFFFFF), next_local_control_tei = rand:uniform(16#FFFFFFFE), next_local_data_tei = rand:uniform(16#FFFFFFFE) diff --git a/src/osmo_epdg_sup.erl b/src/osmo_epdg_sup.erl index 193e8e6..72cfaee 100644 --- a/src/osmo_epdg_sup.erl +++ b/src/osmo_epdg_sup.erl @@ -74,7 +74,7 @@ worker, [aaa_diameter_swm]}, %% ePDG processes: - GtpcServer = {epdg_gtpc_s2b, {epdg_gtpc_s2b,start_link, [GtpcLocalIp, GtpcLocalPort, GtpcRemoteIp, GtpcRemotePort, GtpuLocalIp, []]}, + GtpcServer = {epdg_gtpc_s2b, {epdg_gtpc_s2b,start_link, [GtpcLocalIp, GtpcLocalPort, GtpcRemoteIp, GtpcRemotePort, GtpuLocalIp, #{}]}, permanent, 5000, worker,