Skip to content
Unstable

Changes

Summary

  1. 5gc: Test UE Triggered Service Request (details)
  2. 5gc: Document procedures not implemented in open5gs (details)
  3. library/NGAP_Functions: return NAS_PDU IE from InitialContextSetup if (details)
  4. library/NGAP_Emulation: Route Paging through NGAP_UNIT (details)
  5. 5gc: Network Triggered Service Request (details)
  6. testenv: fix crash with python 3.14 (details)
Commit 48328c90c4df259ba5b02de6dd7817b652e4863d by Pau Espin Pedrol
5gc: Test UE Triggered Service Request

Related: SYS#7073
Change-Id: I65cf7844d11be55d9d5c8e31fd87a3c72e6a607b
The file was modified5gc/ConnHdlr.ttcn
The file was modified5gc/expected-results.xml
The file was modified5gc/C5G_Tests.ttcn
The file was modifiedlibrary/NG_NAS_Osmo_Templates.ttcn
The file was modifiedlibrary/NG_NAS_Osmo_Types.ttcn
The file was modifiedlibrary/NGAP_Functions.ttcn
Commit 24a7c3dd89e84d11efbffb02838295ffac3d430b by Pau Espin Pedrol
5gc: Document procedures not implemented in open5gs

Change-Id: I1480dc8ee1f0db78c179406fa9090835364c01e8
The file was modified5gc/C5G_Tests.ttcn
Commit 2cfe8b134935ab70d7b967eb255e38553996dcc6 by Pau Espin Pedrol
library/NGAP_Functions: return NAS_PDU IE from InitialContextSetup if present

This is required to obtain the NAS PDU transmitted by open5gs-smfd
during Network Triggered Service Request.
In that message, the NAS_PDU inside the
PDUSessionResourceSetupListCxtReq item is empty, and instead the global
NAS_PDU is filled with a Service Accept.

Change-Id: I7fced3f920c2514f58711a2ca1cc60c8dc79e395
The file was modifiedlibrary/NGAP_Functions.ttcn
Commit 42a887b460f5fa48368b502f354e64d844141380 by Pau Espin Pedrol
library/NGAP_Emulation: Route Paging through NGAP_UNIT

The Paging message has no amf_ue_id/ran_ue_id, hence it's a non-ue
message. Route it over NGAP_UNIT; ConnHdlr can then use the
f_create_ngap_expect_proc() function to get a copy of it.

Change-Id: I93cf5e5779208f5e8c3b4d4acf0341c0e78d1ee8
The file was modifiedlibrary/NGAP_Emulation.ttcn
Commit 84d9c77c0ac1ac8ae695df8ccd40dcf7dc08c06f by Pau Espin Pedrol
5gc: Network Triggered Service Request

Change-Id: I42e422d104f254bc27d5f3bb3e8df0cba6380648
The file was modified5gc/expected-results.xml
The file was modified5gc/C5G_Tests.ttcn
The file was modified5gc/ConnHdlr.ttcn
The file was modifiedlibrary/GTPv1U_Emulation.ttcnpp
Commit 59bff794121904c14dc2623d3d8bb7236c2c49ec by Oliver Smith
testenv: fix crash with python 3.14

Python 3.14 changed the default multiprocessing start method from "fork"
to "forkserver", which breaks multiprocessing.Process() as used in
testenv.podman.start_in_background(). Restore the previous behavior.

Fix for:

$ ./testenv.py run -n -p -a bts -c generic
[testenv] osmo-dev dir: /home/pespin/dev/sysmocom/git/osmo-dev
[testenv] Logging to: /tmp/testenv-bts-generic-20260113-1138-f5a1a95e-p7ws27qq
[testenv] + ['rm', '/tmp/logs']
[testenv] + ['ln', '-sf', '/tmp/testenv-bts-generic-20260113-1138-f5a1a95e-p7ws27qq', '/tmp/logs']
[testenv] + ['podman', 'image', 'exists', 'debian-trixie-osmo-ttcn3-testenv']
[testenv] + ['podman', 'history', 'debian-trixie-osmo-ttcn3-testenv', '--format', 'json']
[testenv] Image creation date: 2025-12-19 13:01:15
[testenv] Dockerfile last modified: 2025-12-19 12:57:25
[testenv] + ['podman', 'run', '--rm', '--name', 'testenv-bts-generic-20260113-1138-f5a1a95e-0', '--log-driver', 'json-file', '--log-opt', 'path=/tmp/testenv-bts-generic-20260113-1138-f5a1a95e-p7ws27qq/podman/testenv-bts-generic-20260113-1138-f5a1a95e-0.log', '--security-opt=seccomp=/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/_testenv/data/podman/seccomp.json', '--cap-add=NET_ADMIN', '--cap-add=NET_RAW', '--cap-add=SYS_ADMIN', '--device=/dev/net/tun', '--volume', '/home/pespin/.cache/osmo-ttcn3-testenv/podman/var-cache-apt-debian-trixie:/var/cache/apt', '--volume', '/home/pespin/.cache/osmo-ttcn3-testenv/podman/var-lib-apt-debian-trixie:/var/lib/apt', '--sysctl', 'net.ipv4.conf.all.send_redirects=0', '--sysctl', 'net.ipv4.conf.default.send_redirects=0', '-e', 'PODMAN=1', '--volume', '/home/pespin/dev/sysmocom/git/osmo-dev:/home/pespin/dev/sysmocom/git/osmo-dev', '--volume', '/tmp/testenv-bts-generic-20260113-1138-f5a1a95e-p7ws27qq:/tmp/testenv-bts-generic-20260113-1138-f5a1a95e-p7ws27qq', '--volume', '/home/pespin/.cache/osmo-ttcn3-testenv:/home/pespin/.cache/osmo-ttcn3-testenv', '--volume', '/home/pespin/.cache/osmo-ttcn3-testenv/ccache:/home/pespin/.cache/osmo-ttcn3-testenv/ccache', '--volume', '/home/pespin/dev/sysmocom/git:/home/pespin/dev/sysmocom/git', 'debian-trixie-osmo-ttcn3-testenv', '/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/_testenv/data/scripts/testenv-podman-main.sh']
Running testenv-podman-main.sh
usage: testenv.py [-h] {init,run,clean} ...
testenv.py: error: the following arguments are required: action
[testenv] Stopping podman container
[testenv] + ['podman', 'kill', 'testenv-bts-generic-20260113-1138-f5a1a95e-0']
testenv-bts-generic-20260113-1138-f5a1a95e-0
Traceback (most recent call last):
  File "/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/./testenv.py", line 133, in <module>
    main()
    ~~~~^^
  File "/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/./testenv.py", line 122, in main
    run()
    ~~~^^
  File "/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/./testenv.py", line 45, in run
    testenv.podman.start()
    ~~~~~~~~~~~~~~~~~~~~^^
  File "/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/_testenv/testenv/podman.py", line 280, in start
    start_in_background(cmd)
    ~~~~~~~~~~~~~~~~~~~^^^^^
  File "/home/pespin/dev/sysmocom/git/osmo-ttcn3-hacks/_testenv/testenv/podman.py", line 208, in start_in_background
    feed_watchdog_process.start()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/multiprocessing/process.py", line 121, in start
    self._popen = self._Popen(self)
                  ~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.14/multiprocessing/context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/context.py", line 300, in _Popen
    return Popen(process_obj)
  File "/usr/lib/python3.14/multiprocessing/popen_forkserver.py", line 35, in __init__
    super().__init__(process_obj)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
    self._launch(process_obj)
    ~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/popen_forkserver.py", line 51, in _launch
    self.sentinel, w = forkserver.connect_to_new_process(self._fds)
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/forkserver.py", line 106, in connect_to_new_process
    connection.answer_challenge(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
            wrapped_client, self._forkserver_authkey)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 970, in answer_challenge
    message = connection.recv_bytes(256)         # reject large message
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 222, in recv_bytes
    buf = self._recv_bytes(maxlength)
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 447, in _recv_bytes
    buf = self._recv(4)
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 412, in _recv
    chunk = read(handle, to_read)
ConnectionResetError: [Errno 104] Connection reset by peer
[testenv] Logs saved to: /tmp/testenv-bts-generic-20260113-1138-f5a1a95e-p7ws27qq (symlink: /tmp/logs)

Related: https://docs.python.org/3/whatsnew/3.14.html#multiprocessing
Change-Id: I7995916548b27bdaba6a95e4679c5d1dd7caab4c
The file was modified_testenv/testenv.py