fixeria submitted this change.
pfcp_peer: do not assign SEID=0, increment properly
Change-Id: I76b921047784e727d67cd6c6a5aeb6d827b65e56
---
M src/pfcp_peer.erl
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/pfcp_peer.erl b/src/pfcp_peer.erl
index f379e69..aa33e3a 100644
--- a/src/pfcp_peer.erl
+++ b/src/pfcp_peer.erl
@@ -54,11 +54,13 @@
%% 3GPP TS 29.244, section 4.2 "UDP Header and Port Numbers"
-define(PFCP_PORT, 8805).
+-define(PFCP_SEID_MAX, 16#ffffffffffffffff).
+
-type pfcp_session_rsp() :: ok | {error, term()}.
-type pfcp_msg_type() :: atom().
-type pfcp_seq_nr() :: 0..16#ffffff.
--type pfcp_seid() :: 0..16#ffffffffffffffff.
+-type pfcp_seid() :: 0..?PFCP_SEID_MAX.
-type pfcp_f_seid() :: #f_seid{}.
-type pfcp_ies() :: [term()] | map() | binary().
-type pfcp_msg() :: {pfcp_msg_type(), pfcp_ies()}.
@@ -139,7 +141,7 @@
{reuseaddr, true},
{active, true}]),
?LOG_INFO("PFCP peer @ ~p will talk to UPF @ ~p", [LocAddr, RemAddr]),
- {ok, connecting, #peer_state{seid = 0,
+ {ok, connecting, #peer_state{seid = 1, %% SEID=0 is special, see 7.2.2.4.2
sock = Sock,
loc_addr = LocAddr,
rem_addr = RemAddr,
@@ -288,8 +290,12 @@
Ref = erlang:monitor(process, Pid),
NReg = dict:store(SEID, {Pid, Ref}, Reg),
?LOG_DEBUG("Allocated SEID ~p to process ~p", [SEID, Pid]),
+ NSEID = case SEID of
+ ?PFCP_SEID_MAX -> 1;
+ _ -> SEID + 1
+ end,
S#peer_state{registry = NReg,
- seid = SEID + 1}.
+ seid = NSEID}.
-spec registry_del({pid(), reference()}, peer_state()) -> peer_state().
To view, visit change 38215. To unsubscribe, or for help writing mail filters, visit settings.