<matrixBuild _class='hudson.matrix.MatrixBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.model.ParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>73344</buildingDurationMillis><executingTimeMillis>73344</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>6101</waitingDurationMillis><waitingTimeMillis>6101</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>738</buildNumber><marked><SHA1>0f796cc231437d84edf58218c28ae193110115c1</SHA1><branch><SHA1>0f796cc231437d84edf58218c28ae193110115c1</SHA1><name>origin/master</name></branch></marked><revision><SHA1>0f796cc231437d84edf58218c28ae193110115c1</SHA1><branch><SHA1>0f796cc231437d84edf58218c28ae193110115c1</SHA1><name>origin/master</name></branch></revision></originmaster></buildsByBranchName><lastBuiltRevision><SHA1>0f796cc231437d84edf58218c28ae193110115c1</SHA1><branch><SHA1>0f796cc231437d84edf58218c28ae193110115c1</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/erlang/osmo-s1gw</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#738</displayName><duration>73344</duration><estimatedDuration>74245</estimatedDuration><fullDisplayName>master-osmo-s1gw #738</fullDisplayName><id>738</id><inProgress>false</inProgress><keepLog>false</keepLog><number>738</number><queueId>55217</queueId><result>SUCCESS</result><timestamp>1773135366988</timestamp><url>https://jenkins.osmocom.org/jenkins/view/registry/job/master-osmo-s1gw/738/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/erab_fsm.erl</affectedPath><commitId>2c0df591f5a6ec6b41fcf1a3662542f082aea6f8</commitId><timestamp>1772827244000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>erab_fsm: fix comment inaccuracies and a typo

Two comments copy-pasted from session_establish were left saying
"ESTABLISH Req" in session_modify and session_delete handlers where
"MODIFY Req" and "DELETE Req" are correct respectively.
Also fix typo "unieue" -&gt; "unique" in init/1.

Change-Id: If84638142988767363aa080012b44082dee39f90
</comment><date>2026-03-07 03:00:44 +0700</date><id>2c0df591f5a6ec6b41fcf1a3662542f082aea6f8</id><msg>erab_fsm: fix comment inaccuracies and a typo</msg><path><editType>edit</editType><file>src/erab_fsm.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/pfcp_peer.erl</affectedPath><commitId>d988d804b52d2d9e9f557f9b208faedd7d7e786b</commitId><timestamp>1772827244000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>pfcp_peer: wrap seq_nr at 24-bit boundary

PFCP sequence numbers are 24-bit (3GPP TS 29.244 section 7.2.2.2), but
the counter was incremented without wrapping, eventually exceeding the
type spec after 16,777,215 requests.  Introduce PFCP_SEQ_NR_MAX and use
it in the type spec and in the increment expression.

Change-Id: Ie269894add9a82c36698320379df3aca3f7ffea8
</comment><date>2026-03-07 03:00:44 +0700</date><id>d988d804b52d2d9e9f557f9b208faedd7d7e786b</id><msg>pfcp_peer: wrap seq_nr at 24-bit boundary</msg><path><editType>edit</editType><file>src/pfcp_peer.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/pfcp_peer.erl</affectedPath><commitId>933290c40c646fda1bfc14c7749d19c0feaa2586</commitId><timestamp>1772827244000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>pfcp_peer: replace deprecated erlang:timestamp/0 with os:system_time/1

erlang:timestamp/0 is deprecated since OTP 18.  os:system_time(second)
is the modern replacement and yields the result directly in seconds,
removing the need to reassemble the {MegaSec, Sec, _} tuple.

Change-Id: I4ad886a2222f0cee8a668b42efe8bfac800a55ac
</comment><date>2026-03-07 03:00:44 +0700</date><id>933290c40c646fda1bfc14c7749d19c0feaa2586</id><msg>pfcp_peer: replace deprecated erlang:timestamp/0 with os:system_time/1</msg><path><editType>edit</editType><file>src/pfcp_peer.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/pfcp_peer.erl</affectedPath><commitId>bee7ada183e009fc7ee3cf7d74ecbf192e837ce6</commitId><timestamp>1772828565000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>pfcp_peer: replace watchdog process with a timer

The watchdog process is spawned bare (no link/monitor), so if it
crashes its failure goes unnoticed, and if pfcp_peer restarts the
orphaned watchdog may fire a stale cast at the new process.

The watchdog process exists solely to send a delayed message to
pfcp_peer on timeout, and to be cancelled (by receiving
heartbeat_response) when the response arrives.  That's exactly what
erlang:start_timer/3 does natively - no separate process needed.

Change-Id: I8d71ad8300feefb0aecbf690a825a2b4e9f1102c
</comment><date>2026-03-07 03:22:45 +0700</date><id>bee7ada183e009fc7ee3cf7d74ecbf192e837ce6</id><msg>pfcp_peer: replace watchdog process with a timer</msg><path><editType>edit</editType><file>src/pfcp_peer.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/s1ap_proxy.erl</affectedPath><commitId>2e50684fd3f0e5e9e6a226186426397f1fe008be</commitId><timestamp>1772828765000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>s1ap_proxy: fix discarded result of handle_ies/3 in HO REQ ACK handler

The call processing the optional E-RABFailedToSetupListHOReqAck IE did
not pattern-match its return value, causing any errors returned by
handle_ies/3 to be silently swallowed.  Bind the result to {_, S2}
to make the intent explicit.

Change-Id: I1c8feeb63fe23876ae443784980e9dc22a450c54
</comment><date>2026-03-07 03:26:05 +0700</date><id>2e50684fd3f0e5e9e6a226186426397f1fe008be</id><msg>s1ap_proxy: fix discarded result of handle_ies/3 in HO REQ ACK handler</msg><path><editType>edit</editType><file>src/s1ap_proxy.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/enb_registry.erl</affectedPath><commitId>d664769b0ea52104fc94bea8e0097c3b318ba54d</commitId><timestamp>1773049437000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>enb_registry: call enb_metrics_register/1 from a proper place

enb_metrics_register/1 requires the Global-eNB-ID to register
per-eNB metrics.  Calling it for every event, which may or may not
contain the Global-eNB-ID, is suboptimal.

Instead, invoke it from the enb_handle_event/2 clause that handles
the {s1setup, GENBId} event, where the Global-Enb-ID is guaranteed
to be available.

Change-Id: I38237463aa9c968f89bf4f195407a18cba7e73c9
</comment><date>2026-03-09 16:43:57 +0700</date><id>d664769b0ea52104fc94bea8e0097c3b318ba54d</id><msg>enb_registry: call enb_metrics_register/1 from a proper place</msg><path><editType>edit</editType><file>src/enb_registry.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/enb_registry.erl</affectedPath><commitId>40b2e5fc04cb667846470aa8d02f822a83861a4b</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>enb_registry: fix pattern match in handle_info 'DOWN' handler

PIDs maps pid() =&gt; enb_handle() (an integer), so maps:find/2 returns
{ok, SomeHandle}.  The old pattern {ok, Pid} tried to match an integer
against the already-bound pid() variable, which never succeeds.

This handler is only called on abnormal termination (process crash),
so the broken match caused the registry entry to never be cleaned up
in that case.  Fix by using a fresh {ok, Handle} binding and removing
the now-redundant follow-up maps:get/2 call.

Change-Id: I4cb044e8071c4ae2fc48c507f8733af6c617ec46
</comment><date>2026-03-09 17:40:37 +0700</date><id>40b2e5fc04cb667846470aa8d02f822a83861a4b</id><msg>enb_registry: fix pattern match in handle_info 'DOWN' handler</msg><path><editType>edit</editType><file>src/enb_registry.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/enb_registry.erl</affectedPath><commitId>a3022395de343157fb769ae0134308afe55ad712</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>enb_registry: fix duplicate registration check in enb_register/0

next_handle was bound in the function head and reused in the case
pattern {ok, Handle}, turning what looks like a binding into an
equality test against next_handle.  The duplicate check therefore
only fired if the previously assigned handle happened to equal the
current next_handle counter, which is essentially never true.

Fix by removing next_handle from the function head pattern and reading
it with S#state.next_handle inside the error branch, so that Handle in
{ok, Handle} is always a fresh binding that matches any existing handle.

Change-Id: Ia64f3e2e79bea055e5c37df9bce91a4bcbf7184c
</comment><date>2026-03-09 17:40:37 +0700</date><id>a3022395de343157fb769ae0134308afe55ad712</id><msg>enb_registry: fix duplicate registration check in enb_register/0</msg><path><editType>edit</editType><file>src/enb_registry.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/enb_registry.erl</affectedPath><commitId>af9b9f6f8dbf911bbce126c4ebb88f24ce9c589a</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>enb_registry: fix addr/port filter logic (use andalso)

In Erlang a function body returns only its last expression.  The comma
between the two enb_filter_by_sub_field/2 calls caused the result of
the addr check to be silently discarded, so the filter only tested the
port.  Replace the comma with andalso to require both to match.

Change-Id: I8061636cd1077a4f3a9e9d37a31224f5e373becb
</comment><date>2026-03-09 17:40:37 +0700</date><id>af9b9f6f8dbf911bbce126c4ebb88f24ce9c589a</id><msg>enb_registry: fix addr/port filter logic (use andalso)</msg><path><editType>edit</editType><file>src/enb_registry.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>priv/openapi.json</affectedPath><affectedPath>src/enb_registry.erl</affectedPath><affectedPath>doc/osmo-s1gw-cli.md</affectedPath><affectedPath>contrib/openapi.yaml</affectedPath><affectedPath>src/enb_proxy.erl</affectedPath><commitId>1ddab3c7c1ffda391ff76a5349a81f40fb610c68</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>enb_registry: rework handling of eNB property updates

The idea of an enb_event/0 containing the current MME connection
state and the associated information (Global-eNB-ID, eNB/MME conn
info) looked promising initially, however turned out to be
impractical in light of ongoing MME pooling related changes.

* remove type enb_state/0
* rename type enb_event/0 -&gt; enb_prop/0
* rename function enb_event/2 -&gt; enb_update/2 (now private)
* enb_prop/0: separate the state from other properties
* enb_update/2: accept a list of enb_prop/0 - enb_proplist/0
* add typed notify_*() helpers that group related property updates,
  ensuring consistency and serving as the sole public call sites
* notify_mme_connecting(): explicitly clears mme_conn_info
* openapi: EnbItem.state reflects the actual enb_proxy FSM state

Change-Id: Ib5c5dedce729151cd7350390987fdd008b254ef4
Related: SYS#7052
</comment><date>2026-03-09 17:40:37 +0700</date><id>1ddab3c7c1ffda391ff76a5349a81f40fb610c68</id><msg>enb_registry: rework handling of eNB property updates</msg><path><editType>edit</editType><file>src/enb_registry.erl</file></path><path><editType>edit</editType><file>priv/openapi.json</file></path><path><editType>edit</editType><file>src/enb_proxy.erl</file></path><path><editType>edit</editType><file>doc/osmo-s1gw-cli.md</file></path><path><editType>edit</editType><file>contrib/openapi.yaml</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/mme_registry.erl</affectedPath><affectedPath>test/mme_registry_test.erl</affectedPath><affectedPath>src/osmo_s1gw_sup.erl</affectedPath><commitId>ade7e52c542f043b29f49b3b2683d421a9f99d8f</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>mme_registry: the MME registry (pool) implementation

Change-Id: Id5480222439bf93eca2e994b291c619dff823b01
Related: SYS#7052
</comment><date>2026-03-09 17:40:37 +0700</date><id>ade7e52c542f043b29f49b3b2683d421a9f99d8f</id><msg>mme_registry: the MME registry (pool) implementation</msg><path><editType>add</editType><file>test/mme_registry_test.erl</file></path><path><editType>add</editType><file>src/mme_registry.erl</file></path><path><editType>edit</editType><file>src/osmo_s1gw_sup.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>priv/openapi.json</affectedPath><affectedPath>doc/osmo-s1gw-cli.md</affectedPath><affectedPath>contrib/osmo-s1gw-cli.py</affectedPath><affectedPath>src/rest_server.erl</affectedPath><affectedPath>contrib/openapi.yaml</affectedPath><commitId>63ce2c91cb71185f710931b30a0e88311a9a3f1c</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>[REST] Add MmeList, MmeAdd, MmeInfo, MmeDelete

Change-Id: Iad249aed99face9e35fd19e0596cf2364ade4c77
Related: SYS#7052
</comment><date>2026-03-09 17:40:37 +0700</date><id>63ce2c91cb71185f710931b30a0e88311a9a3f1c</id><msg>[REST] Add MmeList, MmeAdd, MmeInfo, MmeDelete</msg><path><editType>edit</editType><file>contrib/osmo-s1gw-cli.py</file></path><path><editType>edit</editType><file>src/rest_server.erl</file></path><path><editType>edit</editType><file>contrib/openapi.yaml</file></path><path><editType>edit</editType><file>doc/osmo-s1gw-cli.md</file></path><path><editType>edit</editType><file>priv/openapi.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>test/s1ap_utils_test.erl</affectedPath><commitId>def69ca5d00c6f7ae3168ec5a45b13e5d2ef379b</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>s1ap_utils_test: fix: expected value goes first

Change-Id: Ib7c6478b95a78c9797e86180a89c098e75b615e0
</comment><date>2026-03-09 17:40:37 +0700</date><id>def69ca5d00c6f7ae3168ec5a45b13e5d2ef379b</id><msg>s1ap_utils_test: fix: expected value goes first</msg><path><editType>edit</editType><file>test/s1ap_utils_test.erl</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>test/s1ap_utils_test.erl</affectedPath><affectedPath>src/s1ap_utils.erl</affectedPath><affectedPath>test/s1ap_samples.erl</affectedPath><commitId>0f796cc231437d84edf58218c28ae193110115c1</commitId><timestamp>1773052837000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>s1ap_utils: add API for building S1 SETUP FAILURE PDU

This API will be used in a follow-up patch adding the MME pooling.
Take a chance to add a parsing test for the new PDU blob.

Change-Id: I5a4e060e0a2ebdfbcfafac42f9de2e49ac3583b8
Related: SYS#7052
</comment><date>2026-03-09 17:40:37 +0700</date><id>0f796cc231437d84edf58218c28ae193110115c1</id><msg>s1ap_utils: add API for building S1 SETUP FAILURE PDU</msg><path><editType>edit</editType><file>test/s1ap_utils_test.erl</file></path><path><editType>edit</editType><file>src/s1ap_utils.erl</file></path><path><editType>edit</editType><file>test/s1ap_samples.erl</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></culprit><run><number>738</number><url>https://jenkins.osmocom.org/jenkins/view/registry/job/master-osmo-s1gw/a1=default,a2=default,a3=default,a4=default,label=osmocom-master/738/</url></run></matrixBuild>