fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42362?usp=email )
Change subject: s1gw: use REST interface to check PFCP assoc state
......................................................................
s1gw: use REST interface to check PFCP assoc state
It's quicker to query the IUT using the REST interface rather than
waiting for StatsD metric "gauge.pfcp.associated.value" to be received.
As a bonus, we "learn" the local/remote RTS from the S1GW, which can
be used in new PFCP related testcases.
Change-Id: Iec7594e79f533b08ee93b443a39cb9c8ff03da43
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
2 files changed, 13 insertions(+), 16 deletions(-)
Approvals:
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
osmith: Looks good to me, approved
diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index 574a2d0..fd171d3 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -434,16 +434,7 @@
function f_ConnHdlr_pfcp_assoc_handler(charstring id)
runs on ConnHdlr {
- var charstring key_name := g_pars.statsd_prefix & "gauge.pfcp.associated.value";
- var StatsDMetricKeys statsd_keys := { valueof(ts_StatsDMetricKey(key_name, "g")) };
- var StatsDMetrics statsd_snapshot := f_statsd_snapshot(statsd_keys, since_last_snapshot := false);
- var boolean pfcp_associated := statsd_snapshot[0].val == 1;
-
- if (not pfcp_associated) {
- log("Waiting for IUT to associate over PFCP");
- f_ConnHdlr_pfcp_assoc_setup();
- }
-
+ f_ConnHdlr_pfcp_assoc_setup();
setverdict(pass);
}
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index b7b01b1..f86546c 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -76,6 +76,7 @@
var S1AP_ServerList vc_S1APSRVs := {};
var PFCP_Emulation_CT vc_PFCP;
var StatsD_Checker_CT vc_STATSD;
+ var PfcpAssocInfo g_pfcp_assoc;
};
private altstep as_Tguard() runs on test_CT {
@@ -98,11 +99,11 @@
if (s1apsrv_start) {
f_init_s1ap_srv(num_mmes);
}
+ f_init_rest();
if (upf_start) {
f_init_pfcp();
f_pfcp_assoc();
}
- f_init_rest();
}
/* compute the IP address for pool MME server [idx]: mp_mme_bind_ip + idx */
@@ -140,11 +141,16 @@
var verdicttype verdict;
var ConnHdlr vc_conn;
- vc_conn := f_ConnHdlr_spawn(refers(f_ConnHdlr_pfcp_assoc_handler),
- pars := valueof(t_ConnHdlrPars));
- vc_conn.done -> value verdict;
- if (verdict != pass) {
- Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ g_pfcp_assoc := f_REST_PfcpAssocState();
+ if (g_pfcp_assoc.state != connected) {
+ log("Waiting for IUT to associate over PFCP");
+ vc_conn := f_ConnHdlr_spawn(refers(f_ConnHdlr_pfcp_assoc_handler),
+ pars := valueof(t_ConnHdlrPars));
+ vc_conn.done -> value verdict;
+ if (verdict != pass) {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+ g_pfcp_assoc := f_REST_PfcpAssocState();
}
}
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42362?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: Iec7594e79f533b08ee93b443a39cb9c8ff03da43
Gerrit-Change-Number: 42362
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy(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>
fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42372?usp=email )
Change subject: s1gw: add README.md
......................................................................
s1gw: add README.md
Change-Id: Ib5c1326c4260bf552b561a42f7ff9d3f28f89579
---
A s1gw/README.md
1 file changed, 154 insertions(+), 0 deletions(-)
Approvals:
laforge: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
osmith: Looks good to me, but someone else must approve
Jenkins Builder: Verified
diff --git a/s1gw/README.md b/s1gw/README.md
new file mode 100644
index 0000000..8bdeeca
--- /dev/null
+++ b/s1gw/README.md
@@ -0,0 +1,154 @@
+# What is this?
+
+This is a TTCN-3 testsuite for osmo-s1gw.
+
+## What is osmo-s1gw?
+
+**OsmoS1GW** is an S1AP gateway (proxy) between eNBs and an MME.
+It terminates S1AP SCTP connections from eNBs on one side, forwards
+S1AP to/from the MMEs on the other, and coordinates user-plane bearer
+setup with a UPF via PFCP. It is implemented in Erlang.
+
+```
+eNB --[S1AP/SCTP]--> S1GW --[S1AP/SCTP]--> MME
+ |
+ [PFCP/UDP]
+ |
+ UPF
+```
+
+Network address layout in tests:
+- eNB-facing: S1GW=127.0.1.1, eNB(s)=127.0.1.10+
+- MME-facing: S1GW=127.0.2.1, MME=127.0.2.10+
+- UPF-facing: S1GW=127.0.3.1, UPF=127.0.3.10
+- StatsD: 127.0.4.10:8125, REST: 127.0.0.1:8080
+
+## Running the testsuite
+
+```bash
+# From repo root:
+./testenv.py run s1gw
+
+# Build only:
+make s1gw
+
+# Run manually (osmo-s1gw must already be running):
+cd s1gw
+../start-testsuite.sh s1gw/S1GW_Tests S1GW_Tests.cfg
+
+# Single test case:
+../start-testsuite.sh s1gw/S1GW_Tests S1GW_Tests.cfg S1GW_Tests.TC_e_rab_setup
+```
+
+## Module Overview
+
+| File | Purpose |
+|---|---|
+| `S1GW_Tests.ttcn` | Top-level test cases, `f_init_*`, control block |
+| `S1GW_ConnHdlr.ttcn` | Per-eNB connection handler; all protocol helper functions |
+| `S1AP_Server.ttcn` | MME emulator; routes S1AP PDUs to ConnHdlr subscribers |
+| `S1GW_UEMux.ttcn` | UE multiplexer for multi-UE tests (128 concurrent UEs, by default) |
+| `S1GW_REST_Types.ttcn` | JSON/REST data types for management API |
+| `S1GW_REST_Functions.ttcn` | REST helper functions (metrics, PFCP, MME/E-RAB mgmt) |
+
+## Architecture & Key Patterns
+
+### Component Hierarchy
+
+```
+test_CT (extends StatsD_Checker_CT, http_CT)
+ ├── S1AP_Server_CT (MME emulator, one instance)
+ ├── PFCP_Emulation_CT (UPF emulator, one instance)
+ └── ConnHdlr [0..N] (one per emulated eNB)
+ └── UEMux_CT / UEMuxUE_CT (only in TC_uemux_* tests)
+```
+
+`test_CT` starts in `f_init()`, which brings up the REST interface,
+S1AP server, PFCP emulation, and StatsD checker before spawning any
+ConnHdlr instances.
+
+### ConnHdlr Lifecycle
+
+Every test case follows this lifecycle via `f_TC_exec()`:
+
+```
+f_ConnHdlr_spawn()
+ → f_ConnHdlr_s1ap_connect() # TCP/SCTP connect to S1GW eNB-facing port
+ → f_ConnHdlr_s1ap_register() # register with S1AP_Server
+ → f_ConnHdlr_s1ap_setup() # S1AP SetupRequest/Response exchange
+ → [test body runs]
+ → f_ConnHdlr_s1ap_disconnect()
+ → f_ConnHdlr_s1ap_unregister()
+```
+
+Multi-eNB tests spawn N ConnHdlr instances, run them in parallel
+via `interleave`, then join.
+
+### E-RAB Parameter Tracking (`ERab` / `ERabList`)
+
+Each bearer is tracked with transport endpoints for all four forwarding
+directions (access↔core in both send/receive), plus UPF PFCP SEIDs and
+TEID/IP combos. These are populated during setup and then asserted
+during modification/release to verify S1GW correctly translates addresses.
+
+```ttcn
+type record ERab {
+ ERabParams u2c, -- UPF→Core side (what S1GW programs into UPF)
+ ERabParams c2u, -- Core→UPF side
+ ERabParams a2u, -- Access→UPF side
+ ERabParams u2a, -- UPF→Access side
+ ERabParams u2cm, -- modified variant
+ ERabParams u2am, -- modified variant
+ OCT8 pfcp_loc_seid,
+ OCT8 pfcp_rem_seid
+}
+```
+
+### PFCP Session Mutex
+
+`f_ConnHdlr_erab_setup_req()` acquires a mutex before establishing the
+PFCP session. This serialises concurrent E-RAB setups across eNBs
+because the initial PFCP trigger uses SEID=0, which cannot be
+unambiguously routed without locking.
+
+### Bidirectional PDU Helpers
+
+All S1AP send/receive functions come in two directional variants:
+
+- `f_ConnHdlr_tx_s1ap_from_enb()` / `f_ConnHdlr_rx_s1ap_from_enb()` — eNB -> S1GW -> MME direction
+- `f_ConnHdlr_tx_s1ap_from_mme()` / `f_ConnHdlr_rx_s1ap_from_mme()` — MME -> S1GW -> eNB direction
+
+Similarly for PFCP: `f_ConnHdlr_pfcp_expect()`, `f_ConnHdlr_pfcp_reply()`.
+
+### Test Case Parameterisation
+
+Test bodies are passed as function references to `f_TC_exec()`, which handles ConnHdlr
+spawn/teardown. This lets the same test body run with varying eNB count or E-RAB count
+just by changing parameters — e.g. `TC_e_rab_setup` and `TC_e_rab_setup_multi` share
+`f_TC_e_rab_setup`.
+
+### StatsD Validation
+
+Many tests call `f_statsd_expect()` at the end to assert S1GW exported the right metrics
+(connection counts, forwarded packet counters, PFCP association state). These expectations
+are declared with `StatsDExpect` records before the test body runs and checked after.
+
+### REST Interface
+
+`S1GW_REST_Functions.ttcn` wraps HTTP GET/POST calls for inspecting and controlling live
+S1GW state (PFCP association, MME pool, E-RAB list). Used both for supplementary assertions
+(e.g. verifying StatsD metrics are consistent with REST state) and as the primary mechanism
+in REST-focused test cases.
+
+## Test Case Groups
+
+| Group | What's Covered |
+|---|---|
+| Connection | eNB connect/disconnect, MME-initiated teardown, MME unavailable |
+| E-RAB | Bearer setup/release/modify in both directions, PFCP rejection |
+| Initial Context | Attach bearer setup, UE context lifecycle |
+| UE Mux | Concurrent multi-UE operation (128 UEs) via UEMux |
+| Handover | X2/S1 handover preparation, resource allocation, partial failure |
+| PFCP | UPF heartbeat exchange |
+| MME Pool | MME fallback on rejection/timeout, impatient eNB disconnect during pool selection |
+| REST | MME pool listing, runtime add/delete, fallback after runtime delete |
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42372?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: Ib5c1326c4260bf552b561a42f7ff9d3f28f89579
Gerrit-Change-Number: 42372
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy(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>
fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42359?usp=email )
Change subject: s1gw: add testcases for impatient eNB during MME pool selection
......................................................................
s1gw: add testcases for impatient eNB during MME pool selection
Two new test cases covering scenarios where the eNB disconnects before
S1 setup completes, targeting specific states of the enb_proxy FSM:
* TC_mme_pool_enb_disc_wait_s1setup_req: eNB connects but disconnects
before sending S1SetupReq (enb_proxy in wait_s1setup_req). No MME
connection is ever attempted; S1GW must handle the disconnect cleanly.
* TC_mme_pool_enb_disc_wait_s1setup_rsp: eNB sends S1SetupReq, S1GW
forwards it to the first pool MME (enb_proxy in wait_s1setup_rsp),
then eNB disconnects before the response arrives. S1GW must detect
the eNB disconnect and close the open MME connection in response.
A new helper S1GW_ConnHdlr.f_ConnHdlr_s1ap_close() is added for these
tests: unlike f_ConnHdlr_s1ap_disconnect(), it closes the eNB-side
socket without waiting for an S1APSRV_EVENT_CONN_DOWN from a pool
server (since in these scenarios either no MME connection exists
yet, or the CONN_DOWN is captured by the test body directly).
Change-Id: I5d27cdafcb9f595a2d3db59beff17cd55de2539e
Related: SYS#7052
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
M s1gw/expected-results.xml
3 files changed, 82 insertions(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, but someone else must approve
fixeria: Looks good to me, approved
diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index 2c900fe..574a2d0 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -179,6 +179,18 @@
log("eNB connection closed");
}
+/* Close the eNB-side SCTP connection without waiting for pool server events.
+ * For use in 'impatient eNB' scenarios where the eNB initiates teardown before
+ * S1 setup completes and no S1APSRV_EVENT_CONN_DOWN is expected in return. */
+function f_ConnHdlr_s1ap_close() runs on ConnHdlr {
+ f_ConnHdlr_conn_track_disable();
+ S1AP_CodecPort_CtrlFunct.f_IPL4_close(S1AP_ENB, g_s1ap_conn_id,
+ { sctp := c_SctpTuple_S1AP });
+ g_s1ap_conn_id := -1;
+ unmap(self:S1AP_ENB, system:S1AP_CODEC_PT);
+ log("eNB connection closed");
+}
+
function f_ConnHdlr_s1ap_expect_shutdown() runs on ConnHdlr {
S1AP_ENB.receive(tr_SctpShutDownEvent(g_s1ap_conn_id));
S1AP_ENB.receive(tr_SctpAssocChange(SCTP_SHUTDOWN_COMP, g_s1ap_conn_id));
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index 5fffb09..d870be8 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -1135,6 +1135,71 @@
{ S1APSRV_SETUP_REJECT, S1APSRV_SETUP_REJECT, S1APSRV_SETUP_REJECT });
}
+/* MME pool test: eNB connects but disconnects before sending S1SetupReq
+ * (S1GW is in wait_s1setup_req); S1GW must handle the disconnect cleanly
+ * and must not attempt to connect to any MME. */
+function f_TC_mme_pool_enb_disc_wait_s1setup_req(charstring id) runs on ConnHdlr {
+ f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
+
+ /* disconnect before S1SetupReq: S1GW is in wait_s1setup_req,
+ * no MME connection is ever attempted */
+ f_ConnHdlr_s1ap_close();
+ setverdict(pass);
+}
+testcase TC_mme_pool_enb_disc_wait_s1setup_req() runs on test_CT {
+ f_TC_exec_pool(refers(f_TC_mme_pool_enb_disc_wait_s1setup_req), 1,
+ { S1APSRV_SETUP_ACCEPT });
+}
+
+/* MME pool test: eNB connects, sends S1SetupReq, S1GW forwards it to an MME
+ * (S1GW is in wait_s1setup_rsp), then eNB disconnects before the response arrives.
+ * S1GW must detect the eNB disconnect and close the MME connection. */
+function f_TC_mme_pool_enb_disc_wait_s1setup_rsp(charstring id) runs on ConnHdlr {
+ var S1AP_Server_CT vc_srv := g_pars.pool_srvs[0];
+ var S1AP_PDU pdu;
+ timer T;
+
+ f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
+ f_ConnHdlr_conn_track_disable();
+
+ /* pre-register with the pool server, then trigger MME selection */
+ f_ConnHdlr_s1ap_register_to(g_pars.genb_id, vc_srv);
+ f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_SetupReq(g_pars.genb_id, c_SupportedTAs, v32));
+
+ /* wait until S1GW has forwarded SetupReq to the MME (now in wait_s1setup_rsp) */
+ g_s1ap_server := vc_srv;
+ T.start(10.0);
+ alt {
+ [] S1AP_CONN.receive(S1APSRV_Event:S1APSRV_EVENT_CONN_UP) from vc_srv { repeat; }
+ [] S1AP_CONN.receive(tr_S1AP_SetupReq) from vc_srv -> value pdu { T.stop; }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for S1SetupReq on pool server");
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+ }
+
+ /* eNB disconnects impatient; S1GW must close the MME connection in response */
+ f_ConnHdlr_s1ap_close();
+
+ T.start(10.0);
+ alt {
+ [] S1AP_CONN.receive(S1APSRV_Event:S1APSRV_EVENT_CONN_DOWN) from vc_srv {
+ T.stop;
+ setverdict(pass);
+ }
+ [] T.timeout {
+ setverdict(fail, "S1GW did not close MME connection after eNB disconnect");
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+ }
+
+ f_ConnHdlr_s1ap_unregister_from(g_pars.genb_id, vc_srv);
+}
+testcase TC_mme_pool_enb_disc_wait_s1setup_rsp() runs on test_CT {
+ f_TC_exec_pool(refers(f_TC_mme_pool_enb_disc_wait_s1setup_rsp), 1,
+ { S1APSRV_SETUP_ACCEPT });
+}
+
control {
execute( TC_setup() );
execute( TC_setup_multi() );
@@ -1174,6 +1239,8 @@
execute( TC_mme_pool_reject_fallback() );
execute( TC_mme_pool_timeout_fallback() );
execute( TC_mme_pool_all_reject() );
+ execute( TC_mme_pool_enb_disc_wait_s1setup_req() );
+ execute( TC_mme_pool_enb_disc_wait_s1setup_rsp() );
}
}
diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml
index 28fcf71..0769764 100644
--- a/s1gw/expected-results.xml
+++ b/s1gw/expected-results.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<testsuite name='S1GW_Tests' tests='36' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'>
+<testsuite name='S1GW_Tests' tests='38' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'>
<testcase classname='S1GW_Tests' name='TC_setup' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_setup_multi' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_conn_term_by_mme' time='MASKED'/>
@@ -38,4 +38,6 @@
<testcase classname='S1GW_Tests' name='TC_mme_pool_reject_fallback' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_mme_pool_timeout_fallback' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_mme_pool_all_reject' time='MASKED'/>
+ <testcase classname='S1GW_Tests' name='TC_mme_pool_enb_disc_wait_s1setup_req' time='MASKED'/>
+ <testcase classname='S1GW_Tests' name='TC_mme_pool_enb_disc_wait_s1setup_rsp' time='MASKED'/>
</testsuite>
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42359?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: I5d27cdafcb9f595a2d3db59beff17cd55de2539e
Gerrit-Change-Number: 42359
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy(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>
Attention is currently required from: pespin.
fixeria has posted comments on this change by fixeria. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42359?usp=email )
Change subject: s1gw: add testcases for impatient eNB during MME pool selection
......................................................................
Patch Set 1: Code-Review+2
(1 comment)
File s1gw/S1GW_Tests.ttcn:
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42359/comment/b6070adf_d795… :
PS1, Line 1147: setverdict(pass);
> maybe f_sleep(1. […]
I don't think `f_sleep()` does anything useful here other than making the test execution time longer. I'll better add checking if the eNB is connected and then disconnected via the REST interface in a follow-up patch.
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42359?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: I5d27cdafcb9f595a2d3db59beff17cd55de2539e
Gerrit-Change-Number: 42359
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(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: pespin <pespin(a)sysmocom.de>
Gerrit-Comment-Date: Wed, 18 Mar 2026 11:42:11 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: pespin <pespin(a)sysmocom.de>
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42423?usp=email )
Change subject: 5gc: Update mobility procedure status
......................................................................
5gc: Update mobility procedure status
There's no procedure to do direct mobility between GERAN/UTRAN and 5GS
according to spec, and IP preservation is not supported either through
indirect mobility GERAN/UTRAN<->EUTRAN<->5GS.
Regarding 3GPP TS 23.502 Annex G, open5gs-smfd supports Gn interface but
only when working against a 4G MME, not through 5GS (PCF and AMF).
Related specs:
*3GPP TS 23.501:
** 5.17.2.4 Mobility between 5GS and GERAN/UTRAN
** Annex L (normative): Support of GERAN/UTRAN access
* 3GPP TS 23.502 4.11.5 Impacts to 5GC Procedures
* 3GPP TS 23.632 5.3 5GC-EPC Mobility Scenarios
Change-Id: I6bb8672fbd553a1a2a51b97a8360658afa0fddff
---
M 5gc/C5G_Tests.ttcn
1 file changed, 4 insertions(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
osmith: Looks good to me, approved
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index 109749a..aab19d6 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -1025,7 +1025,10 @@
* - 3GPP TS 23.502 4.13.6.1 EPS fallback for IMS voice: Not supported by open5gs (https://github.com/open5gs/open5gs/issues/2534)
* - 3GPP TS 23.502 4.13.6.2 Inter RAT Fallback in 5GC for IMS voice: Not supported by open5gs (https://github.com/open5gs/open5gs/issues/2534)
* - 3GPP TS 23.502 4.13.6.3 Transfer of PDU session used for IMS voice from non-3GPP access to 5GS: Not supported by open5gs (https://github.com/open5gs/open5gs/issues/2534)
- * - 3GPP TS 23.502 Annex G (normative): Support of GERAN/UTRAN access by SMF+PGW-C
+ * - 3GPP TS 23.632 5.3.2 Mobility from 5GC to EPC: Nudm_UECM_AMFDeregistration not supported by open5gs
+ * - 3GPP TS 23.632 5.3.3 Mobility from EPC to 5GC: Not supported by open5gs (missing Nhss interface use in UDM)
+ * - 3GPP TS 23.632 5.2.3 Vector Generation in UDM/ARPF: Not supported by open5gs (missing Nudm_UEAuthentication_GetHssAv in UDM)
+ * - 3GPP TS 23.502 Annex G (normative): Support of GERAN/UTRAN access by SMF+PGW-C: Not supported by open5gs (Gn<->N7 (to PCF) in open5gs-smfd)
*
* - Emergency call (PDU Sess Establish "Request Type"="Emergency Request")
* - PDU Session Type IPv6
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42423?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: I6bb8672fbd553a1a2a51b97a8360658afa0fddff
Gerrit-Change-Number: 42423
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>