fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/37961?usp=email )
Change subject: pfcp_peer: store local/remote Recovery Time Stamp in #peer_state ......................................................................
pfcp_peer: store local/remote Recovery Time Stamp in #peer_state
The local Recovery Time Stamp is also needed for the Heartbeat procedure, so we need to store it in the in #peer_state.
The remote Recovery Time Stamp can be used for detecting restart of the remote peer and may be used for introspection later.
Change-Id: I4ad597e3f16058c91b16ad83ffc00c486817b3cf --- M src/pfcp_peer.erl 1 file changed, 9 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/61/37961/1
diff --git a/src/pfcp_peer.erl b/src/pfcp_peer.erl index 44956da..86d42d3 100644 --- a/src/pfcp_peer.erl +++ b/src/pfcp_peer.erl @@ -76,6 +76,8 @@ sock :: gen_udp:socket(), loc_addr :: inet:ip_address(), rem_addr :: inet:ip_address(), + loc_rts :: pos_integer(), + rem_rts :: undefined | pos_integer(), seq_nr :: pfcp_seq_nr(), registry :: dict:dict() }). @@ -142,6 +144,7 @@ loc_addr = LocAddr, rem_addr = RemAddr, seq_nr = 0, + loc_rts = get_recovery_timestamp(), registry = dict:new()}}.
@@ -168,9 +171,11 @@ #peer_state{sock = Sock} = S) -> case decode_pdu(Data, S) of #pfcp{type = association_setup_response, - ie = #{pfcp_cause := 'Request accepted'}} -> + ie = #{pfcp_cause := 'Request accepted', + recovery_time_stamp := #recovery_time_stamp{time = RRTS}}} -> ?LOG_INFO("Rx Association Setup Response (Request accepted)"), - {next_state, connected, S}; + {next_state, connected, + S#peer_state{rem_rts = RRTS}}; #pfcp{type = association_setup_response, ie = #{pfcp_cause := Cause}} -> ?LOG_ERROR("Rx Association Setup Response (~p)", [Cause]), @@ -365,9 +370,9 @@
%% 6.2.6 PFCP Association Setup Procedure %% 7.4.4.1 PFCP Association Setup Request -send_assoc_setup(S) -> +send_assoc_setup(#peer_state{loc_rts = LRTS} = S) -> IEs = #{node_id => #node_id{id = get_node_id(S)}, - recovery_time_stamp => #recovery_time_stamp{time = get_recovery_timestamp()}}, + recovery_time_stamp => #recovery_time_stamp{time = LRTS}}, send_pdu({association_setup_request, IEs}, S).