lists.osmocom.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2026
March
February
January
2025
December
November
October
September
August
July
June
May
April
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
List overview
Download
gerrit-log
March 2026
----- 2026 -----
March 2026
February 2026
January 2026
----- 2025 -----
December 2025
November 2025
October 2025
September 2025
August 2025
July 2025
June 2025
May 2025
April 2025
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
gerrit-log@lists.osmocom.org
1 participants
1570 discussions
Start a n
N
ew thread
[XS] Change in osmo-ci[master]: jobs/gerrit-lint: use debian 13
by laforge
13 Mar '26
13 Mar '26
laforge has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ci/+/42336?usp=email
) Change subject: jobs/gerrit-lint: use debian 13 ...................................................................... jobs/gerrit-lint: use debian 13 Use debian 13, so we have a newer clang-format version (14 -> 19). Change-Id: I747dce009bb2e91f16a15e79dbe274c162f64813 --- M jobs/gerrit-lint.yml 1 file changed, 1 insertion(+), 1 deletion(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/jobs/gerrit-lint.yml b/jobs/gerrit-lint.yml index 661a600..d621aa5 100644 --- a/jobs/gerrit-lint.yml +++ b/jobs/gerrit-lint.yml @@ -62,7 +62,7 @@ -v ./code-from-gerrit:/build/code-from-gerrit \ -v ./osmo-ci:/build/osmo-ci \ -w /build/code-from-gerrit \ - "$USER/debian-bookworm-build" \ + "$USER/debian-trixie-build" \ /build/osmo-ci/lint/lint_diff.sh HEAD~1 wrappers: -- To view, visit
https://gerrit.osmocom.org/c/osmo-ci/+/42336?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ci Gerrit-Branch: master Gerrit-Change-Id: I747dce009bb2e91f16a15e79dbe274c162f64813 Gerrit-Change-Number: 42336 Gerrit-PatchSet: 1 Gerrit-Owner: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: Hoernchen <ewild(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1
0
0
0
[XS] Change in osmo-ci[master]: jobs/gerrit-lint: use debian 13
by laforge
13 Mar '26
13 Mar '26
Attention is currently required from: Hoernchen, fixeria, osmith, pespin. laforge has posted comments on this change by osmith. (
https://gerrit.osmocom.org/c/osmo-ci/+/42336?usp=email
) Change subject: jobs/gerrit-lint: use debian 13 ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ci/+/42336?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment Gerrit-Project: osmo-ci Gerrit-Branch: master Gerrit-Change-Id: I747dce009bb2e91f16a15e79dbe274c162f64813 Gerrit-Change-Number: 42336 Gerrit-PatchSet: 1 Gerrit-Owner: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: Hoernchen <ewild(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: osmith <osmith(a)sysmocom.de> Gerrit-Attention: Hoernchen <ewild(a)sysmocom.de> Gerrit-Attention: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Fri, 13 Mar 2026 10:07:19 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1
0
0
0
[S] Change in ...pyosmocom[master]: Fix lint errors: don't use star imports
by laforge
13 Mar '26
13 Mar '26
laforge has submitted this change. (
https://gerrit.osmocom.org/c/python/pyosmocom/+/41384?usp=email
) Change subject: Fix lint errors: don't use star imports ...................................................................... Fix lint errors: don't use star imports tests/test_tlv.py:21:1: F403 `from osmocom.tlv import *` used; unable to detect undefined names | 19 | import unittest 20 | from construct import Int8ub, GreedyBytes 21 | from osmocom.tlv import * | ^^^^^^^^^^^^^^^^^^^^^^^^^ F403 22 | from osmocom.utils import h2b Change-Id: I0ca76a40d47f72635682de9303ff73e9b2197266 --- M src/osmocom/gsmtap.py M tests/test_construct.py M tests/test_gsup.py M tests/test_tlv.py M tests/test_utils.py 5 files changed, 9 insertions(+), 5 deletions(-) Approvals: laforge: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/osmocom/gsmtap.py b/src/osmocom/gsmtap.py index 60d7ee4..3474396 100644 --- a/src/osmocom/gsmtap.py +++ b/src/osmocom/gsmtap.py @@ -25,7 +25,7 @@ import socket from construct import Int8ub, Int8sb, Int32ub, BitStruct, Enum, GreedyBytes, Struct, Switch from construct import this, PaddedString, Flag, BitsInteger, Bytes -from osmocom.construct import * +from osmocom.construct import parse_construct # The root definition of GSMTAP can be found at #
https://cgit.osmocom.org/cgit/libosmocore/tree/include/osmocom/core/gsmtap.h
diff --git a/tests/test_construct.py b/tests/test_construct.py index 94ae71f..195732d 100755 --- a/tests/test_construct.py +++ b/tests/test_construct.py @@ -2,7 +2,8 @@ import unittest from osmocom.utils import b2h, h2b -from osmocom.construct import * +from osmocom.construct import Asn1DerInteger, Bytes, DnsAdapter, GreedyInteger, GreedyBytes, PlmnAdapter +from osmocom.construct import StripHeaderAdapter, StripTrailerAdapter, Ucs2Adapter, filter_dict # pylint: disable=no-name-in-module from construct import FlagsEnum diff --git a/tests/test_gsup.py b/tests/test_gsup.py index db3f29e..c6f2429 100755 --- a/tests/test_gsup.py +++ b/tests/test_gsup.py @@ -4,7 +4,7 @@ from pprint import pprint as pp from osmocom.utils import b2h, h2b -from osmocom.gsup.message import * +from osmocom.gsup.message import GsupMessage class Test_GSUP(unittest.TestCase): diff --git a/tests/test_tlv.py b/tests/test_tlv.py index 3af1e07..6d33492 100755 --- a/tests/test_tlv.py +++ b/tests/test_tlv.py @@ -18,7 +18,10 @@ import unittest from construct import Int8ub, GreedyBytes -from osmocom.tlv import * +from osmocom.tlv import COMPACT_TLV_IE, IE, TLV_IE_Collection, Transcodable, flatten_dict_lists, camel_to_snake +from osmocom.tlv import bertlv_encode_len, bertlv_parse_len, bertlv_parse_one, bertlv_parse_tag +from osmocom.tlv import comprehensiontlv_encode_tag, comprehensiontlv_parse_tag +from osmocom.tlv import dgi_encode_len, dgi_parse_len from osmocom.utils import h2b class TestBerTlv(unittest.TestCase): diff --git a/tests/test_utils.py b/tests/test_utils.py index 0f22e35..1b80011 100755 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -18,7 +18,7 @@ import unittest -from osmocom.utils import * +from osmocom.utils import hexstr, int_bytes_required class TestHexstr(unittest.TestCase): def test_cmp(self): -- To view, visit
https://gerrit.osmocom.org/c/python/pyosmocom/+/41384?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: python/pyosmocom Gerrit-Branch: master Gerrit-Change-Id: I0ca76a40d47f72635682de9303ff73e9b2197266 Gerrit-Change-Number: 41384 Gerrit-PatchSet: 3 Gerrit-Owner: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1
0
0
0
[S] Change in ...pyosmocom[master]: Fix lint errors: don't use star imports
by laforge
13 Mar '26
13 Mar '26
Attention is currently required from: fixeria, osmith, pespin. laforge has posted comments on this change by osmith. (
https://gerrit.osmocom.org/c/python/pyosmocom/+/41384?usp=email
) Change subject: Fix lint errors: don't use star imports ...................................................................... Patch Set 3: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/python/pyosmocom/+/41384?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment Gerrit-Project: python/pyosmocom Gerrit-Branch: master Gerrit-Change-Id: I0ca76a40d47f72635682de9303ff73e9b2197266 Gerrit-Change-Number: 41384 Gerrit-PatchSet: 3 Gerrit-Owner: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: osmith <osmith(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Attention: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Fri, 13 Mar 2026 10:06:45 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: 5gc: Introduce TC_handover_inter_ngran_n2_cancel
by pespin
13 Mar '26
13 Mar '26
pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42328?usp=email
) Change subject: 5gc: Introduce TC_handover_inter_ngran_n2_cancel ...................................................................... 5gc: Introduce TC_handover_inter_ngran_n2_cancel Change-Id: I1137c9a82478cca0372678d3c3299e9eebc79bd5 --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml M library/NGAP_Emulation.ttcn M library/NGAP_Functions.ttcn 5 files changed, 88 insertions(+), 2 deletions(-) Approvals: osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index bf3cfd3..bdb0c84 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -760,6 +760,61 @@ vc_conn[1].done; } +/* 3GPP TS 23.502 4.9.1.4 Inter NG-RAN node N2 based handover, Cancel */ +private function f_TC_handover_inter_ngran_n2_cancel_source() runs on ConnHdlr { + f_register(); + f_pdu_sess_establish(); + f_sleep(1.0); + f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname); + + /* 3GPP TS 23.502 4.9.1.3.2 step 1: */ + f_n2_handover_required(m_targetID_targetRANNodeID(m_targetRANNodeID(g_pars.ngran_pars[1].global_ngran_id, + ts_ngran_NGAP_TAI(g_pars.ngran_pars[1])) + )); + /* 3GPP TS 23.502 4.9.1.3.3 step 1: */ + f_n2_handover_command(); + /* 3GPP TS 23.502 4.9.1.3.3 step 2: */ + f_n2_handover_cancel(); + + /* Test UE can still use the network after HO cancel: */ + f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname); + + f_pdu_sess_release(); + f_deregister(); +} +private function f_TC_handover_inter_ngran_n2_cancel_target() runs on ConnHdlr { + + /* Redirect Handover Request from AMF containing new AMF ID to our target ConnHdlr: */ + f_create_ngap_expect_proc(id_HandoverResourceAllocation, self); + + /* 3GPP TS 23.502 4.9.1.3.2 step 9+10: */ + f_n2_handover_request(); + + /* Expect to get a release on the target gNB due to cancelled Handover: */ + as_ngap_handle_UeContextReleaseCmd(exp_cause := mw_cause_radioNetwork(handover_cancelled)); +} +testcase TC_handover_inter_ngran_n2_cancel() runs on MTC_CT { + var ConnHdlr vc_conn[2]; + var integer i; + + f_init(); + f_ngap_setup(0); + f_ngap_setup(1); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0, c5g_idx := 0); + vc_conn[0] := f_start_handler_create(ngap_idx := 0); + vc_conn[1] := f_start_handler_create(ngap_idx := 1); + connect(vc_conn[0]:COORD, vc_conn[1]:COORD); + + f_start_handler_run(vc_conn[0], refers(f_TC_handover_inter_ngran_n2_cancel_source), pars); + pars.c5g_idx := 1; + pars.ue_pars.sess_pars.ran_gtpu_teid := int2oct(oct2int(pars.ue_pars.sess_pars.ran_gtpu_teid) + 1, 4); + f_start_handler_run(vc_conn[1], refers(f_TC_handover_inter_ngran_n2_cancel_target), pars); + + vc_conn[0].done; + vc_conn[1].done; +} + control { execute( TC_ng_setup() ); execute( TC_ng_setup_unknown_global_gnb_id_plmn() ); @@ -787,6 +842,7 @@ execute( TC_handover_inter_ngran_xn() ); execute( TC_handover_inter_ngran_n2() ); + execute( TC_handover_inter_ngran_n2_cancel() ); } /* TODO: @@ -804,7 +860,6 @@ * - 3GPP TS 23.502 4.8.1.1(a) Connection Inactive procedure: Not supported by open5gs (
https://github.com/open5gs/open5gs/issues/4319
) * - 3GPP TS 23.502 4.8.1.2 Connection Suspend procedure: Not supported by open5gs (
https://github.com/open5gs/open5gs/issues/4322
) * - 3GPP TS 23.502 4.8.2 Connection Resume procedure: Not supported by open5gs (
https://github.com/open5gs/open5gs/issues/4322
) - * - 3GPP TS 23.502 4.9 Handover procedures * - 3GPP TS 23.502 4.12 Procedures for Untrusted non-3GPP access * - 3GPP TS 23.502 4.12a Procedures for Trusted non-3GPP access * - 3GPP TS 23.502 4.13.3 SMS over NAS procedures diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index e6621f8..e40cdd4 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -1076,6 +1076,24 @@ NGAP.send(tx_pdu); } +/* 3GPP TS 23.502 9.2.3.11 HANDOVER CANCEL + * 3GPP TS 23.502 4.9.1.4 */ +function f_n2_handover_cancel() runs on ConnHdlr +{ + var template (value) NGAP_PDU tx_pdu; + var NGAP_PDU rx_pdu; + + tx_pdu := m_ngap_initMsg(m_n2_HandoverCancel( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + m_cause_radioNetwork(unspecified))); + NGAP.send(tx_pdu); + + NGAP.receive(mw_ngap_succMsg(mw_n2_HandoverCancelAcknowledge( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id))) -> value rx_pdu; +} + /* Handle a PDUSessionResourceSetupRequestTransfer contained inside NGAP InitialContextSetupRequest and return a Result for InitialContextSetupResponse */ private function f_pdu_handle_session_resource_released_item(PDUSessionResourceToReleaseItemRelCmd cmd) runs on ConnHdlr return PDUSessionResourceReleasedItemRelRes { diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index 03bbd43..e28ce57 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -25,4 +25,5 @@ </testcase> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_xn' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2_cancel' time='MASKED'/> </testsuite> diff --git a/library/NGAP_Emulation.ttcn b/library/NGAP_Emulation.ttcn index f493260..ea23a35 100644 --- a/library/NGAP_Emulation.ttcn +++ b/library/NGAP_Emulation.ttcn @@ -317,7 +317,7 @@ } return i; } - setverdict(fail, "NGAP Association Table not found by component ", client); + setverdict(fail, "NGAP Association Table not found by component ", client, " RAN-ID=", ran_id); mtc.stop; } diff --git a/library/NGAP_Functions.ttcn b/library/NGAP_Functions.ttcn index 64e1450..1466678 100644 --- a/library/NGAP_Functions.ttcn +++ b/library/NGAP_Functions.ttcn @@ -46,6 +46,9 @@ case (id_HandoverNotification) { return im.value_.HandoverNotify.protocolIEs[0].value_.aMF_UE_NGAP_ID; } + case (id_HandoverCancel) { + return im.value_.HandoverCancel.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } /* TODO */ } } else if (ischosen(ngap.successfulOutcome)) { @@ -60,6 +63,9 @@ case (id_HandoverPreparation) { return so.value_.HandoverCommand.protocolIEs[0].value_.aMF_UE_NGAP_ID; } + case (id_HandoverCancel) { + return so.value_.HandoverCancelAcknowledge.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } case (?) { return omit; /* TODO */ @@ -112,6 +118,9 @@ case (id_HandoverNotification) { return im.value_.HandoverNotify.protocolIEs[1].value_.RAN_UE_NGAP_ID; } + case (id_HandoverCancel) { + return im.value_.HandoverCancel.protocolIEs[1].value_.RAN_UE_NGAP_ID; + } /* TODO */ } } else if (ischosen(ngap.successfulOutcome)) { @@ -126,6 +135,9 @@ case (id_HandoverPreparation) { return so.value_.HandoverCommand.protocolIEs[1].value_.rAN_UE_NGAP_ID; } + case (id_HandoverCancel) { + return so.value_.HandoverCancelAcknowledge.protocolIEs[1].value_.rAN_UE_NGAP_ID; + } case (?) { return omit; /* TODO */ -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42328?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I1137c9a82478cca0372678d3c3299e9eebc79bd5 Gerrit-Change-Number: 42328 Gerrit-PatchSet: 4 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1
0
0
0
[L] Change in osmo-ttcn3-hacks[master]: 5gc: Introduce TC_handover_inter_ngran_n2
by pespin
13 Mar '26
13 Mar '26
pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42326?usp=email
) Change subject: 5gc: Introduce TC_handover_inter_ngran_n2 ...................................................................... 5gc: Introduce TC_handover_inter_ngran_n2 Change-Id: I90c7cc6c92864732a36556163aed692b2a1531b0 --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml M library/NGAP_Emulation.ttcn M library/NGAP_Functions.ttcn M library/ngap/NGAP_EncDec.cc M library/ngap/NGAP_Types.ttcn 7 files changed, 370 insertions(+), 31 deletions(-) Approvals: osmith: Looks good to me, but someone else must approve pespin: Looks good to me, approved Jenkins Builder: Verified diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index 028178d..bf3cfd3 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -676,6 +676,90 @@ vc_conn[1].done; } +/* 3GPP TS 23.502 4.9.1.3 Inter NG-RAN node N2 based handover */ +private function f_TC_handover_inter_ngran_n2_source() runs on ConnHdlr { + f_register(); + f_pdu_sess_establish(); + f_sleep(1.0); + f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname); + + var NG_NAS_UE_State nus := f_ngap_obtain_nus(g_pars.ue_pars.ran_id); + + COORD.send(Handover_n2_Pars:{ + guti := g_pars.ue_pars.guti, + pti := g_pars.ue_pars.pti, + sess_pars := g_pars.ue_pars.sess_pars, + kset_id := g_pars.kset_id, + nus := nus + }); + + /* 3GPP TS 23.502 4.9.1.3.2 step 1: */ + f_n2_handover_required(m_targetID_targetRANNodeID(m_targetRANNodeID(g_pars.ngran_pars[1].global_ngran_id, + ts_ngran_NGAP_TAI(g_pars.ngran_pars[1])) + )); + /* 3GPP TS 23.502 4.9.1.3.3 step 1: */ + f_n2_handover_command(); + /* 3GPP TS 23.502 4.9.1.3.3 step 2: */ + COORD.send("HANDOVER_COMMAND_CONFIRM"); + + /* 3GPP TS 23.502 4.9.1.3.3 step 14a + 14b: */ + as_ngap_handle_UeContextReleaseCmd(exp_cause := mw_cause_radioNetwork(successful_handover)); +} +private function f_TC_handover_inter_ngran_n2_target() runs on ConnHdlr { + var Handover_n2_Pars ho_n2_pars; + + /* Redirect Handover Request from AMF containing new AMF ID to our target ConnHdlr: */ + f_create_ngap_expect_proc(id_HandoverResourceAllocation, self); + + COORD.receive(Handover_n2_Pars:?) -> value ho_n2_pars; + g_pars.ue_pars.guti := ho_n2_pars.guti; + g_pars.ue_pars.pti := ho_n2_pars.pti; + g_pars.ue_pars.sess_pars.id := ho_n2_pars.sess_pars.id; + g_pars.ue_pars.sess_pars.qos_rules := ho_n2_pars.sess_pars.qos_rules; + g_pars.ue_pars.sess_pars.ue_ip := ho_n2_pars.sess_pars.ue_ip; + g_pars.kset_id := ho_n2_pars.kset_id; + + + /* 3GPP TS 23.502 4.9.1.3.2 step 9+10: */ + f_n2_handover_request(); + + /* 3GPP TS 23.502 4.9.1.3.3 step 4 */ + COORD.receive("HANDOVER_COMMAND_CONFIRM"); + f_ngap_set_nus(g_pars.ue_pars.ran_id, ho_n2_pars.nus); + + /* 3GPP TS 23.502 4.9.1.3.3 step 5: */ + f_n2_handover_notify(); + + f_sleep(1.0); + + f_pdu_sess_create_tun(); + f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname); + + f_pdu_sess_release(); + f_deregister(); +} +testcase TC_handover_inter_ngran_n2() runs on MTC_CT { + var ConnHdlr vc_conn[2]; + var integer i; + + f_init(); + f_ngap_setup(0); + f_ngap_setup(1); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0, c5g_idx := 0); + vc_conn[0] := f_start_handler_create(ngap_idx := 0); + vc_conn[1] := f_start_handler_create(ngap_idx := 1); + connect(vc_conn[0]:COORD, vc_conn[1]:COORD); + + f_start_handler_run(vc_conn[0], refers(f_TC_handover_inter_ngran_n2_source), pars); + pars.c5g_idx := 1; + pars.ue_pars.sess_pars.ran_gtpu_teid := int2oct(oct2int(pars.ue_pars.sess_pars.ran_gtpu_teid) + 1, 4); + f_start_handler_run(vc_conn[1], refers(f_TC_handover_inter_ngran_n2_target), pars); + + vc_conn[0].done; + vc_conn[1].done; +} + control { execute( TC_ng_setup() ); execute( TC_ng_setup_unknown_global_gnb_id_plmn() ); @@ -702,7 +786,7 @@ execute( TC_connection_suspend() ); execute( TC_handover_inter_ngran_xn() ); - + execute( TC_handover_inter_ngran_n2() ); } /* TODO: diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index da0d3d9..e6621f8 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -123,9 +123,18 @@ NG_NAS_UE_State nus /* 3GPP TS 38.423 9.2.1.13 UE Context Information */ }; +/* Pass needed UE context state between ConnHdlr */ +type record Handover_n2_Pars { + octetstring guti, + ProcedureTransactionIdentifier pti, + PDUSessionParams sess_pars, + NAS_KeySetIdentifier kset_id, + NG_NAS_UE_State nus /* 3GPP TS 38.423 9.2.1.13 UE Context Information */ +}; + type port ConnHdlr_Coord_PT message { - inout charstring, Handover_Xn_Pars; + inout charstring, Handover_Xn_Pars, Handover_n2_Pars; } with { extension "internal" }; type component ConnHdlr extends NGAP_ConnHdlr, GTP1U_ConnHdlr { @@ -140,7 +149,7 @@ type function void_fn() runs on ConnHdlr; -private template (value) NGAP_IEs.TAI ts_ngran_NGAP_TAI(NGRANParams ngran_pars) := { +template (value) NGAP_IEs.TAI ts_ngran_NGAP_TAI(NGRANParams ngran_pars) := { pLMNIdentity := ngran_pars.global_ngran_id.globalGNB_ID.pLMNIdentity, tAC := ngran_pars.supported_ta_list[0].tAC, iE_Extensions := omit @@ -182,6 +191,15 @@ return valueof(p_ueLocInf); } +private function f_UPTLI() runs on ConnHdlr return UPTransportLayerInformation { + var template (value) UPTransportLayerInformation uptli; + + uptli := m_uPTransportLayerInformation_gTPTunnel( + m_gTPTunnel(p_tla := oct2bit(f_inet_addr(g_pars.ue_pars.sess_pars.ran_gtpu_ip)), + p_gtp_teid := g_pars.ue_pars.sess_pars.ran_gtpu_teid)); + return valueof(uptli); +} + private function f_tr_ConnHdlr_kset_id() runs on ConnHdlr return template (present) NAS_KeySetIdentifier { /* KSI not yet set, expect whatever assignment from network: */ if (g_pars.kset_id.nasKeySetId == tsc_NasKsi_NoKey) { @@ -350,12 +368,19 @@ var template (value) UPTransportLayerInformation utla; var template (value) QosFlowPerTNLInformation qos; var NGAP_IEs.PDUSessionResourceSetupResponseTransfer setup_resp_transf; + var integer qos_id := 0; for (var integer i := 0; i < lengthof(setup_req_transf.protocolIEs); i := i + 1) { - if (setup_req_transf.protocolIEs[i].id == id_UL_NGU_UP_TNLInformation) { + select (setup_req_transf.protocolIEs[i].id) { + case (id_UL_NGU_UP_TNLInformation) { var UPTransportLayerInformation utli := setup_req_transf.protocolIEs[i].value_.uPTransportLayerInformation; g_pars.ue_pars.sess_pars.cn_gtpu_ip := f_inet_ntoa(bit2oct(utli.gTPTunnel.transportLayerAddress)); g_pars.ue_pars.sess_pars.cn_gtpu_teid := utli.gTPTunnel.gTP_TEID; + } + case (id_QosFlowSetupRequestList) { + var QosFlowSetupRequestList qos_req_li := setup_req_transf.protocolIEs[i].value_.QosFlowSetupRequestList; + qos_id := qos_req_li[0].qosFlowIdentifier; + } } } @@ -363,7 +388,7 @@ utla := m_uPTransportLayerInformation_gTPTunnel( m_gTPTunnel(p_tla := oct2bit(f_inet_addr(g_pars.ue_pars.sess_pars.ran_gtpu_ip)), p_gtp_teid := g_pars.ue_pars.sess_pars.ran_gtpu_teid)); - qos := m_qosFlowPerTNLInformation(utla, { m_associatedQosFlowItem(1) }); + qos := m_qosFlowPerTNLInformation(utla, { m_associatedQosFlowItem(qos_id) }); setup_resp_transf := valueof(m_pDUSessionResourceSetupResponseTransfer(qos)); return setup_resp_transf; @@ -815,7 +840,7 @@ } /* 3GPP TS 38.413 8.3.3 UE Context Release (AMF initiated) */ -private altstep as_ngap_handle_UeContextReleaseCmd(template (present) Cause exp_cause := ?) runs on ConnHdlr { +altstep as_ngap_handle_UeContextReleaseCmd(template (present) Cause exp_cause := ?) runs on ConnHdlr { var NGAP_PDU rx_ngap; var template (present) NGAP_PDU exp_ngap := mw_ngap_initMsg(mw_n2_UEContextReleaseCommand( @@ -914,17 +939,13 @@ * 3GPP TS 23.502 4.9.1.2.2 Xn based inter NG-RAN handover without User Plane function re-allocation */ function f_n2_path_switch(AMF_UE_NGAP_ID source_amf_id) runs on ConnHdlr { - var template (value) UPTransportLayerInformation utla; var template (value) PathSwitchRequestTransfer transfer; var octetstring transfer_enc; var template (value) PDUSessionResourceToBeSwitchedDLItem it; var template (value) NGAP_PDU tx_pdu; var NGAP_PDU rx_pdu; - utla := m_uPTransportLayerInformation_gTPTunnel( - m_gTPTunnel(p_tla := oct2bit(f_inet_addr(g_pars.ue_pars.sess_pars.ran_gtpu_ip)), - p_gtp_teid := g_pars.ue_pars.sess_pars.ran_gtpu_teid)); - transfer := m_pathSwitchRequestTransfer(p_dL_NGU_UP_TNLInformation := utla, + transfer := m_pathSwitchRequestTransfer(p_dL_NGU_UP_TNLInformation := f_UPTLI(), p_qosFlowAcceptedList := { m_qosFlowAcceptedItem(1) }, p_dL_NGU_TNLInformationReused := omit, p_userPlaneSecurityInformation := omit); @@ -946,6 +967,115 @@ g_pars.ue_pars.amf_id := path_switch_ack.protocolIEs[0].value_.aMF_UE_NGAP_ID; } +/* 3GPP TS 38.413 8.4.1 Handover Preparation + * 3GPP TS 38.413 9.2.3.1 HANDOVER REQUIRED + * 3GPP TS 38.413 9.3.4.14 Handover Required Transfer */ +function f_n2_handover_required(template (value) TargetID target_id) runs on ConnHdlr +{ + var template (value) HandoverRequiredTransfer transfer; + var octetstring transfer_enc; + var template (value) PDUSessionResourceItemHORqd it; + var template (value) NGAP_PDU tx_pdu; + + transfer := m_handoverRequiredTransfer(omit); + transfer_enc := enc_NGAP_HandoverRequiredTransfer(valueof(transfer)); + it := m_pDUSessionResourceItemHORqd(g_pars.ue_pars.sess_pars.id, + transfer_enc); + + tx_pdu := m_ngap_initMsg( + m_n2_HandoverRequired( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + intra5gs, + m_cause_radioNetwork(resource_optimisation_handover), + target_id, + { it }, + '1234'O /* random string, transparent to the AMF */)); + NGAP.send(tx_pdu); +} + +/* 3GPP TS 38.413 9.2.3.4 HANDOVER REQUEST + * 3GPP TS 23.502 4.9.1.3.2 step 9+10 */ +function f_n2_handover_request() runs on ConnHdlr +{ + var template (value) QosFlowItemWithDataForwarding qos; + var template (value) HandoverRequestAcknowledgeTransfer transfer; + var octetstring transfer_enc; + var template (value) PDUSessionResourceAdmittedItem it; + var template (value) NGAP_PDU tx_pdu; + var NGAP_PDU rx_pdu; + var HandoverRequest ho_req; + var QosFlowIdentifier qos_id := 0; + + NGAP.receive(mw_ngap_initMsg( + mw_n2_HandoverRequest(? /* AMF ID not known yet here*/, + intra5gs))) -> value rx_pdu; + ho_req := rx_pdu.initiatingMessage.value_.handoverRequest; + + for (var integer i := 0; i < lengthof(ho_req.protocolIEs); i := i + 1) { + select(ho_req.protocolIEs[i].id) { + case (id_AMF_UE_NGAP_ID) { + /* Update amf_id: */ + g_pars.ue_pars.amf_id := ho_req.protocolIEs[i].value_.aMF_UE_NGAP_ID; + } + case (id_PDUSessionResourceSetupListHOReq) { + var PDUSessionResourceSetupListHOReq res_li := ho_req.protocolIEs[i].value_.PDUSessionResourceSetupListHOReq; + var PDUSessionResourceSetupItemHOReq res_it := res_li[0]; + var NGAP_IEs.PDUSessionResourceSetupRequestTransfer setup_req_transf; + var NGAP_IEs.PDUSessionResourceSetupResponseTransfer setup_resp_transf; + setup_req_transf := dec_NGAP_PDUSessionResourceSetupRequestTransfer(res_it.handoverRequestTransfer); + setup_resp_transf := f_pdu_handle_PDUSessionResourceSetupRequestTransfer(setup_req_transf); + qos_id := setup_resp_transf.dLQosFlowPerTNLInformation.associatedQosFlowList[0].qosFlowIdentifier; + } + } + } + + qos := m_qosFlowItemWithDataForwarding(qos_id); + transfer := m_handoverRequestAcknowledgeTransfer(f_UPTLI(), {qos}); + transfer_enc := enc_NGAP_HandoverRequestAcknowledgeTransfer(valueof(transfer)); + it := m_pDUSessionResourceAdmittedItem(g_pars.ue_pars.sess_pars.id, transfer_enc); + tx_pdu := mw_ngap_succMsg(m_n2_HandoverRequestAcknowledge( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + { it }, + '1234'O)); + NGAP.send(tx_pdu); +} + +/* 3GPP TS 38.413 9.2.3.2 HANDOVER COMMAND + * 3GPP TS 23.502 4.9.1.3.3 step 1 */ +function f_n2_handover_command() runs on ConnHdlr +{ + var NGAP_PDU rx_pdu; + + NGAP.receive(mw_ngap_succMsg(mw_n2_HandoverCommand( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + intra5gs, + ?))) -> value rx_pdu; +} + +/* 3GPP TS 23.502 9.2.3.7 HANDOVER NOTIFY + * 3GPP TS 23.502 4.9.1.3.3 step 5 */ +function f_n2_handover_notify() runs on ConnHdlr +{ + var template (value) HandoverRequiredTransfer transfer; + var octetstring transfer_enc; + var template (value) PDUSessionResourceItemHORqd it; + var template (value) NGAP_PDU tx_pdu; + + transfer := m_handoverRequiredTransfer(omit); + transfer_enc := enc_NGAP_HandoverRequiredTransfer(valueof(transfer)); + it := m_pDUSessionResourceItemHORqd(g_pars.ue_pars.sess_pars.id, + transfer_enc); + + tx_pdu := m_ngap_initMsg(m_n2_HandoverNotify( + g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + f_ULI())); + NGAP.send(tx_pdu); +} + /* Handle a PDUSessionResourceSetupRequestTransfer contained inside NGAP InitialContextSetupRequest and return a Result for InitialContextSetupResponse */ private function f_pdu_handle_session_resource_released_item(PDUSessionResourceToReleaseItemRelCmd cmd) runs on ConnHdlr return PDUSessionResourceReleasedItemRelRes { diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index 2333f8d..03bbd43 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -24,4 +24,5 @@ </failure> </testcase> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_xn' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2' time='MASKED'/> </testsuite> diff --git a/library/NGAP_Emulation.ttcn b/library/NGAP_Emulation.ttcn index d050d2f..f493260 100644 --- a/library/NGAP_Emulation.ttcn +++ b/library/NGAP_Emulation.ttcn @@ -154,6 +154,13 @@ return ret; } } + + /* Try by message type. This is useful for Handover Request, where network sends a new AMF Id. */ + ret := NGapExpectTableProc_get_conn(msg); + if (ret != null) { + return ret; + } + setverdict(fail, "Couldn't find Expect for ", msg); mtc.stop; } @@ -273,17 +280,22 @@ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected call f_assoc_id_by_ngap_ids(omit, omit)"); } for (var integer i := 0; i < sizeof(NGapAssociationTable); i := i+1) { - if (not isvalue(NGapAssociationTable[i].ran_ue_ngap_id)) { - continue; - } - if (not istemplatekind(ran_id, "omit") and - not match(NGapAssociationTable[i].ran_ue_ngap_id, ran_id)) { - continue; + if (not istemplatekind(ran_id, "omit")) { + if (not ispresent(NGapAssociationTable[i].ran_ue_ngap_id)) { + continue; + } + if (not match(NGapAssociationTable[i].ran_ue_ngap_id, ran_id)) { + continue; + } } /* ran_id matched, check amf_id now: */ - if (not istemplatekind(amf_id, "omit") and - not match(NGapAssociationTable[i].amf_ue_ngap_id, amf_id)) { - continue; + if (not istemplatekind(amf_id, "omit")) { + if (not ispresent(NGapAssociationTable[i].amf_ue_ngap_id)) { + continue; + } + if (not match(NGapAssociationTable[i].amf_ue_ngap_id, amf_id)) { + continue; + } } return i; } @@ -317,12 +329,18 @@ private function f_ngap_id_table_add(NGAP_ConnHdlr comp_ref, template (omit) AMF_UE_NGAP_ID amf_id, - RAN_UE_NGAP_ID ran_id) + template (omit) RAN_UE_NGAP_ID ran_id) runs on NGAP_Emulation_CT return integer { var integer i; for (i := 0; i < sizeof(NGapAssociationTable); i := i+1) { - if (not isvalue(NGapAssociationTable[i].ran_ue_ngap_id)) { - NGapAssociationTable[i].ran_ue_ngap_id := ran_id; + if (not isvalue(NGapAssociationTable[i].ran_ue_ngap_id) and + not isvalue(NGapAssociationTable[i].amf_ue_ngap_id)) { + if (istemplatekind(ran_id, "omit")) { + NGapAssociationTable[i].ran_ue_ngap_id := omit; + } else { + NGapAssociationTable[i].ran_ue_ngap_id := valueof(ran_id); + } + if (istemplatekind(amf_id, "omit")) { NGapAssociationTable[i].amf_ue_ngap_id := omit; } else { @@ -407,9 +425,9 @@ } } -private function SendToNGapExpectTableProc(NGAP_PDU msg) runs on NGAP_Emulation_CT { - var integer procedureCode; - var NGAP_ConnHdlr vc_conn; +private function ngap_pdu_get_procedure_code(NGAP_PDU msg) return integer +{ + var integer procedureCode := 0; if (ispresent(msg.initiatingMessage.procedureCode)) { procedureCode := msg.initiatingMessage.procedureCode; @@ -417,10 +435,32 @@ procedureCode := msg.unsuccessfulOutcome.procedureCode; } else if (ispresent(msg.successfulOutcome.procedureCode)) { procedureCode := msg.successfulOutcome.procedureCode; - } else { - return; } + return procedureCode; +} + +private function NGapExpectTableProc_get_conn(NGAP_PDU msg) +runs on NGAP_Emulation_CT return NGAP_ConnHdlr { + var NGAP_ConnHdlr vc_conn; + var integer procedureCode := ngap_pdu_get_procedure_code(msg); + + for (var integer i := 0; i < sizeof(NGapExpectTableProc); i := i+1) { + if (NGapExpectTableProc[i].procedureCode == procedureCode) { + vc_conn := NGapExpectTableProc[i].vc_conn; + if (vc_conn != null) { + return vc_conn; + } + } + } + + return null; +} + +private function SendToNGapExpectTableProc(NGAP_PDU msg) runs on NGAP_Emulation_CT { + var NGAP_ConnHdlr vc_conn; + var integer procedureCode := ngap_pdu_get_procedure_code(msg); + for (var integer i := 0; i < sizeof(NGapExpectTableProc); i := i+1) { if (NGapExpectTableProc[i].procedureCode == procedureCode) { vc_conn := NGapExpectTableProc[i].vc_conn; @@ -537,6 +577,23 @@ /* Pass message through */ NGAP.send(t_NGAP_Send(g_ngap_conn_id, msg)); } + /* NGAP from client: HandoverRequestAcknowledge */ + [] NGAP_CLIENT.receive(mw_ngap_succMsg(mw_n2_HandoverRequestAcknowledge)) -> value msg sender vc_conn { + /* Update table entry with ran_id; oly amf_id was known through HandoverReq so far: */ + ai := f_assoc_id_by_ngap_ids(valueof(f_NGAP_get_AMF_UE_NGAP_ID(msg)), omit); + NGapAssociationTable[ai].ran_ue_ngap_id := valueof(f_NGAP_get_RAN_UE_NGAP_ID(msg)); + /* Pass message through */ + NGAP.send(t_NGAP_Send(g_ngap_conn_id, msg)); + } + /* NGAP from client: HandoverNotify */ + [] NGAP_CLIENT.receive(mw_ngap_initMsg(mw_n2_HandoverNotify)) -> value msg sender vc_conn { + /* create a table entry about this connection */ + ai := f_assoc_id_by_ngap_ids(valueof(f_NGAP_get_AMF_UE_NGAP_ID(msg)), valueof(f_NGAP_get_RAN_UE_NGAP_ID(msg))); + /* Store ULI so we can use it for generating UlNasTransport from NAS */ + NGapAssociationTable[ai].uli := msg.initiatingMessage.value_.HandoverNotify.protocolIEs[2].value_.userLocationInformation; + /* Pass message through */ + NGAP.send(t_NGAP_Send(g_ngap_conn_id, msg)); + } /* NAS from client: Wrap in NGAP Uplink NAS Transport */ [] NGAP_CLIENT.receive(NG_NAS_UL_Message_Type:?) -> value ul_nas_msg sender vc_conn { var integer assoc_id := f_assoc_id_by_comp(vc_conn); @@ -608,7 +665,7 @@ } else { /* if not, call create_cb so it can create new ConnHdlr */ vc_conn := ops.create_cb.apply(mrf.msg, amf_ue_id, ran_ue_id, id); - f_ngap_id_table_add(vc_conn, amf_ue_id, valueof(ran_ue_id)); + f_ngap_id_table_add(vc_conn, amf_ue_id, ran_ue_id); NGAP_CLIENT.send(mrf.msg) to vc_conn; } if (match(mrf.msg, mw_ngap_initMsg(mw_n2_UEContextReleaseCommand))) { @@ -714,7 +771,7 @@ /* client/conn_hdlr side function to use procedure port to create expect (PDU) in emulation */ function f_create_ngap_expect_proc(integer procedureCode, NGAP_ConnHdlr hdlr) runs on NGAP_ConnHdlr { - NGAP_PROC.call(NGAPEM_register_proc:{procedureCode, self}) { + NGAP_PROC.call(NGAPEM_register_proc:{procedureCode, hdlr}) { [] NGAP_PROC.getreply(NGAPEM_register_proc:{?,?}) {}; } diff --git a/library/NGAP_Functions.ttcn b/library/NGAP_Functions.ttcn index 5d45c43..64e1450 100644 --- a/library/NGAP_Functions.ttcn +++ b/library/NGAP_Functions.ttcn @@ -40,6 +40,12 @@ case (id_PDUSessionResourceRelease) { return im.value_.pDUSessionResourceReleaseCommand.protocolIEs[0].value_.aMF_UE_NGAP_ID; } + case (id_HandoverResourceAllocation) { + return im.value_.handoverRequest.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } + case (id_HandoverNotification) { + return im.value_.HandoverNotify.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } /* TODO */ } } else if (ischosen(ngap.successfulOutcome)) { @@ -48,10 +54,15 @@ case (id_PathSwitchRequest) { return so.value_.PathSwitchRequestAcknowledge.protocolIEs[0].value_.aMF_UE_NGAP_ID; } + case (id_HandoverResourceAllocation) { + return so.value_.HandoverRequestAcknowledge.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } + case (id_HandoverPreparation) { + return so.value_.HandoverCommand.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } case (?) { return omit; /* TODO */ - /* return im.value_.SuccessfulOutcome.protocolIEs[0].value_.AMF_UE_NGAP_ID; */ } /* TODO */ } @@ -98,6 +109,9 @@ case (id_PathSwitchRequest) { return im.value_.PathSwitchRequest.protocolIEs[0].value_.RAN_UE_NGAP_ID; } + case (id_HandoverNotification) { + return im.value_.HandoverNotify.protocolIEs[1].value_.RAN_UE_NGAP_ID; + } /* TODO */ } } else if (ischosen(ngap.successfulOutcome)) { @@ -106,6 +120,12 @@ case (id_PathSwitchRequest) { return so.value_.PathSwitchRequestAcknowledge.protocolIEs[1].value_.rAN_UE_NGAP_ID; } + case (id_HandoverResourceAllocation) { + return so.value_.HandoverRequestAcknowledge.protocolIEs[1].value_.rAN_UE_NGAP_ID; + } + case (id_HandoverPreparation) { + return so.value_.HandoverCommand.protocolIEs[1].value_.rAN_UE_NGAP_ID; + } case (?) { return omit; /* TODO */ diff --git a/library/ngap/NGAP_EncDec.cc b/library/ngap/NGAP_EncDec.cc index 9e3ccd2..b024c32 100644 --- a/library/ngap/NGAP_EncDec.cc +++ b/library/ngap/NGAP_EncDec.cc @@ -149,4 +149,44 @@ return ret; } +OCTETSTRING enc__NGAP__HandoverRequiredTransfer(const NGAP__IEs::HandoverRequiredTransfer &p) +{ + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + p.encode(NGAP__IEs::HandoverRequiredTransfer_descr_, TTCN_buf, + TTCN_EncDec::CT_PER, PER_ALIGNED); + return OCTETSTRING(TTCN_buf.get_len(), TTCN_buf.get_data()); +} + +NGAP__IEs::HandoverRequiredTransfer dec__NGAP__HandoverRequiredTransfer(const OCTETSTRING &stream) +{ + NGAP__IEs::HandoverRequiredTransfer ret; + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + TTCN_buf.put_os(stream); + ret.decode(NGAP__IEs::HandoverRequiredTransfer_descr_, TTCN_buf, + TTCN_EncDec::CT_PER, PER_ALIGNED); + return ret; +} + +OCTETSTRING enc__NGAP__HandoverRequestAcknowledgeTransfer(const NGAP__IEs::HandoverRequestAcknowledgeTransfer &p) +{ + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + p.encode(NGAP__IEs::HandoverRequestAcknowledgeTransfer_descr_, TTCN_buf, + TTCN_EncDec::CT_PER, PER_ALIGNED); + return OCTETSTRING(TTCN_buf.get_len(), TTCN_buf.get_data()); +} + +NGAP__IEs::HandoverRequestAcknowledgeTransfer dec__NGAP__HandoverRequestAcknowledgeTransfer(const OCTETSTRING &stream) +{ + NGAP__IEs::HandoverRequestAcknowledgeTransfer ret; + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + TTCN_buf.put_os(stream); + ret.decode(NGAP__IEs::HandoverRequestAcknowledgeTransfer_descr_, TTCN_buf, + TTCN_EncDec::CT_PER, PER_ALIGNED); + return ret; +} + } diff --git a/library/ngap/NGAP_Types.ttcn b/library/ngap/NGAP_Types.ttcn index 394cb24..e4a9f4e 100644 --- a/library/ngap/NGAP_Types.ttcn +++ b/library/ngap/NGAP_Types.ttcn @@ -23,4 +23,11 @@ external function enc_NGAP_PathSwitchRequestTransfer(NGAP_IEs.PathSwitchRequestTransfer p) return octetstring; external function dec_NGAP_PathSwitchRequestTransfer(in octetstring pdu) return NGAP_IEs.PathSwitchRequestTransfer; + + external function enc_NGAP_HandoverRequiredTransfer(NGAP_IEs.HandoverRequiredTransfer p) return octetstring; + external function dec_NGAP_HandoverRequiredTransfer(in octetstring pdu) return NGAP_IEs.HandoverRequiredTransfer; + + external function enc_NGAP_HandoverRequestAcknowledgeTransfer(NGAP_IEs.HandoverRequestAcknowledgeTransfer p) return octetstring; + external function dec_NGAP_HandoverRequestAcknowledgeTransfer(in octetstring pdu) return NGAP_IEs.HandoverRequestAcknowledgeTransfer; + } -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42326?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I90c7cc6c92864732a36556163aed692b2a1531b0 Gerrit-Change-Number: 42326 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1
0
0
0
[S] Change in osmo-ttcn3-hacks[master]: 5gc: parametrize RequestType in f_pdu_sess_establish()
by pespin
13 Mar '26
13 Mar '26
pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42329?usp=email
) Change subject: 5gc: parametrize RequestType in f_pdu_sess_establish() ...................................................................... 5gc: parametrize RequestType in f_pdu_sess_establish() Change-Id: I69d6be5e581565720a21c719b0f982eb31ec2adf --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M library/NG_NAS_Osmo_Types.ttcn 3 files changed, 19 insertions(+), 9 deletions(-) Approvals: fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index bdb0c84..636a0a3 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -360,7 +360,7 @@ } private function f_TC_ue_context_release_with_pdu_session() runs on ConnHdlr { f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); f_sleep(1.0); f_ue_context_release(); } @@ -376,7 +376,7 @@ private function f_TC_pdu_sess_modification() runs on ConnHdlr { f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); f_sleep(1.0); f_pdu_sess_modify(); f_pdu_sess_release(); @@ -432,7 +432,7 @@ var PDU_SessionStatus pdu_session_status; f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); pdu_session_status := f_PDU_SessionStatus(); f_service_request_cm_idle(ul_data_status := pdu_session_status, pdu_sess_status := pdu_session_status); @@ -457,7 +457,7 @@ * UE signals that the active session is now inactive. AMF sends a PFCP Session Delete to SMF. */ private function f_TC_ue_service_request_cm_idle_inact_sess() runs on ConnHdlr { f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); f_service_request_cm_idle(pdu_sess_status := cs_PDU_SessionStatus('00000000'B, '00000000'B)); NGAP.receive(cr_NG_SERVICE_ACCEPT(p_PDU_SessionStatus := cr_PDU_SessionStatus('00000000'B, '00000000'B))); f_deregister(); @@ -495,7 +495,7 @@ var PDU_SessionStatus pdu_session_status; f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); pdu_session_status := f_PDU_SessionStatus(); f_service_request_cm_connected(ul_data_status := cs_PDU_SessionStatus('00000000'B, '00000000'B), pdu_sess_status := pdu_session_status); @@ -556,7 +556,7 @@ /* 3GPP TS 23.502 4.8.1.1(a) Connection Inactive procedure */ private function f_TC_connection_inactive() runs on ConnHdlr { f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); /* Figure 4.8.1.1a-1 step 2: "NG-RAN sends N2 MT Communication Handling request message * to AMF indicating the UE is transitioning to RRC_INACTIVE state". */ @@ -588,7 +588,7 @@ * 3GPP TS 23.502 4.8.2.3 Connection Resume procedure */ private function f_TC_connection_suspend() runs on ConnHdlr { f_register(); - f_pdu_sess_establish(false); + f_pdu_sess_establish(configure_userplane := false); f_ue_context_suspend(); f_ue_context_resume(); diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index e40cdd4..be6425e 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -526,7 +526,8 @@ } /* 3GPP TS 23.502 4.3.2.2 UE Requested PDU Session Establishment */ -function f_pdu_sess_establish(boolean configure_userplane := true) runs on ConnHdlr { +function f_pdu_sess_establish(BIT3 request_type := c_RequestType_initial_request, + boolean configure_userplane := true) runs on ConnHdlr { var template (value) NG_NAS_UL_Message_Type nas_ul_msg; var NAS_PDU nas_pdu; var NG_NAS_DL_Message_Type rx_nas, inner_nas; @@ -541,7 +542,7 @@ nas_ul_msg := cs_NG_UL_NAS_TRANSPORT(cs_PayloadContainerType(tsc_PayloadContainerESMMsg), cs_PayloadContainerLV(nas_pdu), p_PDU_SessionId := cs_NG_PDU_SessionIdTV(pdu_sess_id), - p_RequestType := cs_NG_Request_TypeTV('001'B), + p_RequestType := cs_NG_Request_TypeTV(request_type), p_DNN := cs_DNN_TLV(f_enc_dns_hostname(g_pars.ue_pars.apn))); NGAP.send(nas_ul_msg); as_ngap_handle_InitialCtxReq_withPDUSessionList(g_pars.ue_pars.amf_id); diff --git a/library/NG_NAS_Osmo_Types.ttcn b/library/NG_NAS_Osmo_Types.ttcn index a1a5263..f897246 100644 --- a/library/NG_NAS_Osmo_Types.ttcn +++ b/library/NG_NAS_Osmo_Types.ttcn @@ -37,6 +37,15 @@ const BIT4 c_PayloadContainer_SLPP_Message_Container := '1100'B; const BIT4 c_PayloadContainer_Multiple_Payloads := '1111'B; +/* 9.11.3.47 Request type */ +const BIT3 c_RequestType_initial_request := '001'B; +const BIT3 c_RequestType_existing_pdu_session := '010'B; +const BIT3 c_RequestType_initial_emergency_request := '011'B; +const BIT3 c_RequestType_existing_emergency_pdu_session := '100'B; +const BIT3 c_RequestType_modification_request := '101'B; +const BIT3 c_RequestType_ma_pdu_request := '110'B; +const BIT3 c_RequestType_reserved := '111'B; + const NAS_CauseValue_Type c_5GSM_Cause_RegularDeactivation := '00100100'B; /* 3GPP TS 24.501 9.11.3.50 Service type */ -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42329?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I69d6be5e581565720a21c719b0f982eb31ec2adf Gerrit-Change-Number: 42329 Gerrit-PatchSet: 4 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: 5gc: Introduce tests for emergency services
by pespin
13 Mar '26
13 Mar '26
pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42332?usp=email
) Change subject: 5gc: Introduce tests for emergency services ...................................................................... 5gc: Introduce tests for emergency services These tests are expected to fail since open5gs has no specific logic for emergency services in open5gs-amfd, and announces no Emergency Support in Registration Accept. Change-Id: Ie853b184da7ac8026bb0c360baabba762a7942e0 --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml M library/NG_NAS_Osmo_Templates.ttcn 4 files changed, 120 insertions(+), 5 deletions(-) Approvals: fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved Jenkins Builder: Verified osmith: Looks good to me, but someone else must approve diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index 636a0a3..b10cef5 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -41,6 +41,7 @@ import from NG_NAS_MsgContainers all; import from NG_NAS_Templates all; +import from NG_NAS_Osmo_Types all; import from NG_NAS_Osmo_Templates all; import from NG_NAS_Functions all; import from NG_CryptoFunctions all; @@ -613,6 +614,61 @@ vc_conn.done; } +/* 3GPP TS 23.501 5.16.4 Emergency Services + * 3GPP TS 23.502 4.13.4 Emergency Services + */ +private function f_TC_normal_reg_emergency_services() runs on ConnHdlr { + /* Validate this is set in Register Accept: + * .... 00.. = Emergency service support indicator (EMC): Emergency services not supported (0) + */ + var template (present) NG_NAS_DL_Message_Type exp_registration_accept := + cr_NG_REGISTRATION_ACCEPT(p_NwkFeatureSupport := cr_NG_NetworkFeatureSupport(emc := '11'B), + p_EmergNumList := *); + f_register(exp_registration_accept := exp_registration_accept); + f_pdu_sess_establish(request_type := c_RequestType_initial_emergency_request); + f_sleep(1.0); + f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname); + f_pdu_sess_release(); + f_deregister(); +} +testcase TC_normal_reg_emergency_services() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_normal_reg_emergency_services), pars); + vc_conn.done; +} + +/* 3GPP TS 23.501 5.16.4 Emergency Services + * 3GPP TS 23.502 4.13.4 Emergency Services + */ +private function f_TC_emergency_registration() runs on ConnHdlr { + /* Validate this is set in Register Accept: + * .... 00.. = Emergency service support indicator (EMC): Emergency services not supported (0) + */ + var template (present) NG_NAS_DL_Message_Type exp_registration_accept := + cr_NG_REGISTRATION_ACCEPT(p_NwkFeatureSupport := cr_NG_NetworkFeatureSupport(emc := '11'B), + p_EmergNumList := *); + f_register(registration_type := tsc_NG_RegistrationEmergency, + exp_registration_accept := exp_registration_accept); + f_pdu_sess_establish(request_type := c_RequestType_initial_emergency_request); + f_sleep(1.0); + f_ping4(g_pars.ue_pars.sess_pars.run_prog_pars.ping_hostname); + f_pdu_sess_release(); + f_deregister(); +} +testcase TC_emergency_registration() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_emergency_registration), pars); + vc_conn.done; +} + /* 3GPP TS 23.502 4.9.1.2.2 Xn based inter NG-RAN handover without User Plane function re-allocation */ private function f_TC_handover_inter_ngran_xn_source() runs on ConnHdlr { f_register(); @@ -840,6 +896,9 @@ execute( TC_connection_inactive() ); execute( TC_connection_suspend() ); + execute( TC_normal_reg_emergency_services() ); + execute( TC_emergency_registration() ); + execute( TC_handover_inter_ngran_xn() ); execute( TC_handover_inter_ngran_n2() ); execute( TC_handover_inter_ngran_n2_cancel() ); @@ -868,8 +927,7 @@ * - 3GPP TS 23.502 4.13.3.6 MT SMS over NAS in CM-IDLE state and RRC_INACTIVE with CN based MT communication state via 3GPP access * - 3GPP TS 23.502 4.13.3.7 MT SMS over NAS in CM-CONNECTED state via 3GPP access * - 3GPP TS 23.502 4.13.3.8 MT SMS over NAS via non-3GPP access - * - 3GPP TS 23.502 4.13.4 Emergency Services - * - 3GPP TS 23.502 4.13.4.2 Emergency Services Fallback + * - 3GPP TS 23.502 4.13.4.2 Emergency Services Fallback: Not supported by open5gs (see also 3GPP TS 23.501 5.16.4.11) * - 3GPP TS 23.502 4.13.5 Location Services procedures * - 3GPP TS 23.502 4.13.6.1 EPS fallback for IMS voice * - 3GPP TS 23.502 4.13.6.2 Inter RAT Fallback in 5GC for IMS voice diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index be6425e..ebe0376 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -695,13 +695,14 @@ } /* 3GPP TS 23.502 4.2.2.2.2 General Registration */ -function f_register() runs on ConnHdlr { +function f_register(BIT3 registration_type := tsc_NG_RegistrationInitial, + template (present) NG_NAS_DL_Message_Type exp_registration_accept := cr_NG_REGISTRATION_ACCEPT) runs on ConnHdlr { var template (value) NGAP_PDU tx_pdu; var template (value) NG_NAS_UL_Message_Type nas_ul_msg; var NAS_PDU nas_pdu; var NG_NAS_DL_Message_Type rx_nas; - nas_ul_msg := cs_NG_REGISTRATION_REQUEST(cs_RegistrationType(tsc_NG_RegistrationInitial, '1'B), + nas_ul_msg := cs_NG_REGISTRATION_REQUEST(cs_RegistrationType(registration_type, '1'B), g_pars.kset_id.nasKeySetId, g_pars.kset_id.tsc, cs_NG_MobileIdentitySUCI('0000'B /* Type IMSI */, @@ -730,7 +731,7 @@ /* After receiving DL NAS Transport above, the UE-AMF-Id became known in NGAP_Emulation: */ g_pars.ue_pars.amf_id := f_ngap_obtain_amf_id(); - NGAP.receive(cr_NG_REGISTRATION_ACCEPT) -> value rx_nas; + NGAP.receive(exp_registration_accept) -> value rx_nas; g_pars.ue_pars.guti := rx_nas.registration_Accept.guti.otherDigits; NGAP.send(cs_NG_REGISTRATION_COMPLETE); diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index e28ce57..0ad61e3 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -23,6 +23,12 @@ C5G_Tests.ttcn:MASKED TC_connection_suspend testcase </failure> </testcase> + <testcase classname='C5G_Tests' name='TC_normal_reg_emergency_services' time='MASKED'> + <error type='DTE'></error> + </testcase> + <testcase classname='C5G_Tests' name='TC_emergency_registration' time='MASKED'> + <error type='DTE'></error> + </testcase> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_xn' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_handover_inter_ngran_n2_cancel' time='MASKED'/> diff --git a/library/NG_NAS_Osmo_Templates.ttcn b/library/NG_NAS_Osmo_Templates.ttcn index 393ae69..7edb9f5 100644 --- a/library/NG_NAS_Osmo_Templates.ttcn +++ b/library/NG_NAS_Osmo_Templates.ttcn @@ -86,6 +86,56 @@ replayedNASMsgContainerValue := val }; +/* 24.501 cl 9.11.3.5 */ +template (present) NG_NetworkFeatureSupport cr_NG_NetworkFeatureSupport( + template (present) B1_Type mpsi := ?, + template (present) B1_Type iwk_N26 := ?, + template (present) B2_Type emf := ?, + template (present) B2_Type emc := ?, + template (present) B1_Type imsVoPS_n3GPP := ?, + template (present) B1_Type imsVoPS_3GPP := ?, + template B1_Type ng_UP_CIoT := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B1_Type ngIPHC_CP_CIoT := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B1_Type n3Data := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B1_Type ng_CP_CIoT := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B2_Type restrictEC := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B1_Type mcsi := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type emcn3 := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type spareBit := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type pr := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type rpr := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type piv := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type ncr := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + template B1_Type ngEHC_CP_CIoT := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B1_Type atsInd := *, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + template B1_Type ngLCS := * /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + ) := +{ + iei := '21'O, /* @sic R5s190109 sic@ */ + iel := *, /* present in case of LV or TLV; omit in case of V @sic R5s201526 sic@ */ + mpsi := mpsi, + iwk_N26 := iwk_N26, + emf := emf, + emc := emc, //@sic R5-198540 sic@ + imsVoPS_n3GPP := imsVoPS_n3GPP, + imsVoPS_3GPP := imsVoPS_3GPP, + ng_UP_CIoT := ng_UP_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngIPHC_CP_CIoT := ngIPHC_CP_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + n3Data := n3Data, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ng_CP_CIoT := ng_CP_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + restrictEC := restrictEC, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + mcsi := mcsi, + emcn3 := emcn3, + spareBit := spareBit, + pr := pr, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + rpr := rpr, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + piv := piv, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ncr := ncr, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngEHC_CP_CIoT := ngEHC_CP_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + atsInd := atsInd, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngLCS := ngLCS /* Sep20 @sic R5s201387 Baseline Moving sic@ */ +}; + /* 24.501 cl. 9.11.3.6 */ template (present) RegistrationResult cr_RegistrationResultLV(template (present) B3_Type p_Result := ?, -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42332?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Ie853b184da7ac8026bb0c360baabba762a7942e0 Gerrit-Change-Number: 42332 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: 5gc: Introduce tests for emergency services
by pespin
13 Mar '26
13 Mar '26
Attention is currently required from: fixeria. pespin has posted comments on this change by pespin. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42332?usp=email
) Change subject: 5gc: Introduce tests for emergency services ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42332?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Ie853b184da7ac8026bb0c360baabba762a7942e0 Gerrit-Change-Number: 42332 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Fri, 13 Mar 2026 09:33:53 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1
0
0
0
[S] Change in osmo-ttcn3-hacks[master]: 5gc: parametrize RequestType in f_pdu_sess_establish()
by pespin
13 Mar '26
13 Mar '26
pespin has posted comments on this change by pespin. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42329?usp=email
) Change subject: 5gc: parametrize RequestType in f_pdu_sess_establish() ...................................................................... Patch Set 3: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42329?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I69d6be5e581565720a21c719b0f982eb31ec2adf Gerrit-Change-Number: 42329 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Fri, 13 Mar 2026 09:33:51 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1
0
0
0
← Newer
1
...
93
94
95
96
97
98
99
...
157
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
Results per page:
10
25
50
100
200