From 6ac68484525d15f371f5cf07d25b81478982b12c Mon Sep 17 00:00:00 2001 From: Lars Wischhof Date: Mon, 2 Mar 2026 22:24:00 +0100 Subject: [PATCH 1/3] MecResponseApp: Fix missing localUePort In the recent refactoring, the localUePort was removed from the MecBaseApp. Since it is required in the MecResponseApp, this commit adds it there. Note that this problem was not detected by the fingerprint tests, since these run only for 5s but the start time of the MecResponseApp in the test scenario is 5s. A later commit will therefore increase the start time for MecResponseApp and other apps having this issue. --- src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.ned | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.ned b/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.ned index 6e19f0d26..4431b619b 100644 --- a/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.ned +++ b/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.ned @@ -30,6 +30,8 @@ simple MecResponseApp extends MecAppBase int responsePacketSize @unit(B) = default(50B); + int localUePort; + int minInstructions = default(9000000); int maxInstructions = default(11000000); } From 54746da4b1ca1588ba25337d3fbc5ff817f9ba68 Mon Sep 17 00:00:00 2001 From: Lars Wischhof Date: Mon, 2 Mar 2026 22:26:13 +0100 Subject: [PATCH 2/3] MecRTVideoStreamingReceiver: Fix missing localUePort In the recent refactoring, the localUePort was removed from the MecBaseApp. Since it is required in the MecRTVideoStreamingReciever, this commit adds it there. Note that this problem was not detected by the fingerprint tests, since these run only for 5s but the start time of the MecRTVideoStreaming in the test scenario is a random value of up to 90s. A later commit will therefore increase the fingerprint time for MecRTVideoStreamingReceiver and other apps having this issue. --- .../RealTimeVideoStreamingApp/MecRTVideoStreamingReceiver.ned | 1 + 1 file changed, 1 insertion(+) diff --git a/src/simu5g/apps/mec/RealTimeVideoStreamingApp/MecRTVideoStreamingReceiver.ned b/src/simu5g/apps/mec/RealTimeVideoStreamingApp/MecRTVideoStreamingReceiver.ned index 270c0a90b..2de88b24a 100644 --- a/src/simu5g/apps/mec/RealTimeVideoStreamingApp/MecRTVideoStreamingReceiver.ned +++ b/src/simu5g/apps/mec/RealTimeVideoStreamingApp/MecRTVideoStreamingReceiver.ned @@ -26,5 +26,6 @@ simple MecRTVideoStreamingReceiver extends MecAppBase @class(MecRTVideoStreamingReceiver); @display("i=block/app;is=s"); int packetSize @unit(B) = default(10B); + int localUePort; double initialPlayoutDelay @unit(s) = 150ms; } From 84178849cd136aa6ef32c44c799e053877dab5ad Mon Sep 17 00:00:00 2001 From: Lars Wischhof Date: Mon, 2 Mar 2026 22:31:28 +0100 Subject: [PATCH 3/3] RniService: fix incomplete CamelCase renaming In the recent refactorings, the RNIService was renamed to RniService. However, not all service names were adapted. As a consequence, in the service registry the Service was registered correctly with the name "RniService" but later requested as "RNIService" leading to a situation where the service is not found and not available. This caused a segment violation since the service pointer was not checked for being null. This fix corrects the naming and also adds a check to determine if the service pointer is null. --- simulations/nr/mec/README.md | 2 +- .../ApplicationDescriptors/ResponseApp.json | 2 +- .../ApplicationDescriptors/RnisTestApp.json | 2 +- simulations/nr/mec/rnisTest/README.txt | 6 ++--- .../MecRequestResponseApp/MecResponseApp.cc | 8 +++---- tests/fingerprint/simulations.csv | 24 +++++++++---------- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/simulations/nr/mec/README.md b/simulations/nr/mec/README.md index f907048fe..1c2b512c5 100644 --- a/simulations/nr/mec/README.md +++ b/simulations/nr/mec/README.md @@ -19,7 +19,7 @@ The "numMecServices" parameter selects the number of MEC services running on the ``` *.mecHost.mecPlatform.numMecServices = 1 -*.mecHost.mecPlatform.mecService[0].typename = "RNIService" +*.mecHost.mecPlatform.mecService[0].typename = "RniService" *.mecHost.mecPlatform.mecService[0].localAddress = "mecHost.mecPlatform" *.mecHost.mecPlatform.mecService[0].localPort = 10020 ``` diff --git a/simulations/nr/mec/requestResponseApp/ApplicationDescriptors/ResponseApp.json b/simulations/nr/mec/requestResponseApp/ApplicationDescriptors/ResponseApp.json index d038262d0..27bf10f40 100644 --- a/simulations/nr/mec/requestResponseApp/ApplicationDescriptors/ResponseApp.json +++ b/simulations/nr/mec/requestResponseApp/ApplicationDescriptors/ResponseApp.json @@ -12,7 +12,7 @@ "appServiceRequired": [ { "ServiceDependency" :{ - "serName" : "RNIService", + "serName" : "RniService", "version" : "v1", "serCategory": "Network" } diff --git a/simulations/nr/mec/rnisTest/ApplicationDescriptors/RnisTestApp.json b/simulations/nr/mec/rnisTest/ApplicationDescriptors/RnisTestApp.json index 6aa5b21e3..483449702 100644 --- a/simulations/nr/mec/rnisTest/ApplicationDescriptors/RnisTestApp.json +++ b/simulations/nr/mec/rnisTest/ApplicationDescriptors/RnisTestApp.json @@ -12,7 +12,7 @@ "appServiceRequired": [ { "ServiceDependency" :{ - "serName" : "RNIService", + "serName" : "RniService", "version" : "v2", "serCategory": "RNI" } diff --git a/simulations/nr/mec/rnisTest/README.txt b/simulations/nr/mec/rnisTest/README.txt index 38656ce97..f192426ef 100644 --- a/simulations/nr/mec/rnisTest/README.txt +++ b/simulations/nr/mec/rnisTest/README.txt @@ -6,7 +6,7 @@ The simulations/NR/mec/rnisTest folder includes a simulation example that shows and use the Radio Network Information Service. The RnisTest configuration in the omnetpp.ini file represents a scenario with one UE in a single-cell -network, endowed with one MEC Host. The MEC Platform within the MEC Host provides the RNIService. +network, endowed with one MEC Host. The MEC Platform within the MEC Host provides the RniService. The UE runs the UeRnisTestApp locally and interacts with the MecRnisTestApp residing at the MEC Host. The implementation of the applications can be found in apps/mec/RnisTestApp folder. @@ -14,8 +14,8 @@ The implementation of the applications can be found in apps/mec/RnisTestApp fold At the beginning of the simulation, the UE requests to MEC Orchestrator to instantiate a new MecRnisTestApp. Upon receiving an acknowledgement indicating that the MEC app has been deployed, the UeRnisTestApp sends a "start" message to the MecRnisTestApp, triggering a periodic request for -information to the RNIService from the MEC app. -The RNIService replies with a message in JSON format including the L2Measurements, as specified by +information to the RniService from the MEC app. +The RniService replies with a message in JSON format including the L2Measurements, as specified by the ETSI MEC specifications about the RNIS API. Each response obtained by the MEC app is forwarded to the UE app, which in turn prints it out to the Qtenv log (and to a file, if the logger flag has been set).con diff --git a/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.cc b/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.cc index 3348a6628..dad9b23d2 100644 --- a/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.cc +++ b/src/simu5g/apps/mec/MecRequestResponseApp/MecResponseApp.cc @@ -164,7 +164,7 @@ void MecResponseApp::handleMp1Message(int connId) if (!jsonBody.empty()) { jsonBody = jsonBody[0]; std::string serName = jsonBody["serName"]; - if (serName == "RNIService") { + if (serName == "RniService") { if (jsonBody.contains("transportInfo")) { nlohmann::json endPoint = jsonBody["transportInfo"]["endPoint"]["addresses"]; EV << "address: " << endPoint["host"] << " port: " << endPoint["port"] << endl; @@ -176,7 +176,7 @@ void MecResponseApp::handleMp1Message(int connId) } } else { - EV << "MecPlatooningApp::handleMp1Message - RNIService not found" << endl; + EV << "MecPlatooningApp::handleMp1Message - RniService not found" << endl; serviceAddress_ = L3Address(); } } @@ -221,7 +221,7 @@ void MecResponseApp::doComputation() void MecResponseApp::sendGetRequest() { //check if the ueAppAddress is specified - if (serviceSocket_->getState() == inet::TcpSocket::CONNECTED) { + if (serviceSocket_ != NULL && serviceSocket_->getState() == inet::TcpSocket::CONNECTED) { EV << "MecResponseApp::sendGetRequest(): send request to the Location Service" << endl; std::stringstream uri; uri << "/example/rni/v2/queries/layer2_meas"; //TODO filter the request to get less data @@ -243,7 +243,7 @@ void MecResponseApp::established(int connId) // once the connection with the Service Registry has been established, obtain the // endPoint (address+port) of the Location Service - const char *uri = "/example/mec_service_mgmt/v1/services?ser_name=RNIService"; + const char *uri = "/example/mec_service_mgmt/v1/services?ser_name=RniService"; std::string host = mp1Socket_->getRemoteAddress().str() + ":" + std::to_string(mp1Socket_->getRemotePort()); Http::sendGetRequest(mp1Socket_, host.c_str(), uri); diff --git a/tests/fingerprint/simulations.csv b/tests/fingerprint/simulations.csv index eef8a7245..d18b294ef 100644 --- a/tests/fingerprint/simulations.csv +++ b/tests/fingerprint/simulations.csv @@ -84,17 +84,17 @@ /simulations/nr/mec/multiMecHost/, -f omnetpp.ini -c MultiMec -r 0, 20s, 0c01-c7b5/tplx;c6f8-ec85/~tNl;e58a-847e/sz, PASS, /simulations/nr/mec/multiOperator/, -f omnetpp.ini -c MultiOperator_MultiMec -r 0, 20s, c183-b1c3/tplx;a202-f6a6/~tNl;cc38-1a03/sz, PASS, /simulations/nr/mec/multiOperator/, -f omnetpp.ini -c MultiOperator_SingleMec -r 0, 20s, 7453-5838/tplx;5837-c83e/~tNl;16ba-7503/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c best_case -r 0, 5s, d2fc-dc3c/tplx;adec-e439/~tNl;f173-dc15/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c best_case_load_gen -r 0, 5s, d2fc-dc3c/tplx;adec-e439/~tNl;f173-dc15/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c bgUEs_gnb1 -r 0, 5s, c2a1-90a8/tplx;adec-e439/~tNl;b658-0a63/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c bgUEs_gnb2 -r 0, 5s, c2a1-90a8/tplx;adec-e439/~tNl;b658-0a63/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c farRNI -r 0, 5s, 238a-f3c0/tplx;adec-e439/~tNl;7361-1ae9/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c MultiMec -r 0, 5s, c2a1-90a8/tplx;adec-e439/~tNl;b658-0a63/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c nearRNI -r 0, 5s, 4f00-54a0/tplx;adec-e439/~tNl;13f8-3e9e/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c nearRNI_bgUEs_gnb1 -r 0, 5s, 4f00-54a0/tplx;adec-e439/~tNl;13f8-3e9e/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c nearRNI_bgUEs_gnb2 -r 0, 5s, 4f00-54a0/tplx;adec-e439/~tNl;13f8-3e9e/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c worst_case -r 0, 5s, d2fc-dc3c/tplx;adec-e439/~tNl;f173-dc15/sz, PASS, -/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c worst_case_load_gen -r 0, 5s, d2fc-dc3c/tplx;adec-e439/~tNl;f173-dc15/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c best_case -r 0, 10s, 2d01-2d89/tplx;646f-e204/~tNl;9843-27a5/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c best_case_load_gen -r 0, 10s, 070a-89e5/tplx;68c9-daad/~tNl;6443-27aa/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c bgUEs_gnb1 -r 0, 10s, eb0e-1658/tplx;865f-562a/~tNl;ab2c-d2d2/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c bgUEs_gnb2 -r 0, 10s, eb0e-1658/tplx;865f-562a/~tNl;ab2c-d2d2/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c farRNI -r 0, 10s, 0228-ea68/tplx;92d5-51b1/~tNl;8a0a-1273/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c MultiMec -r 0, 10s, eb0e-1658/tplx;865f-562a/~tNl;ab2c-d2d2/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c nearRNI -r 0, 10s, dc22-f3a4/tplx;124b-f628/~tNl;0d13-0af5/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c nearRNI_bgUEs_gnb1 -r 0, 10s, dc22-f3a4/tplx;124b-f628/~tNl;0d13-0af5/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c nearRNI_bgUEs_gnb2 -r 0, 10s, dc22-f3a4/tplx;124b-f628/~tNl;0d13-0af5/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c worst_case -r 0, 10s, 170c-d176/tplx;e749-180f/~tNl;6443-27aa/sz, PASS, +/simulations/nr/mec/requestResponseApp/, -f omnetpp.ini -c worst_case_load_gen -r 0, 10s, 49b7-5399/tplx;9753-99a0/~tNl;6443-27aa/sz, PASS, /simulations/nr/mec/rnisTest/, -f omnetpp.ini -c RnisTest -r 0, 5s, c9a0-d49e/tplx;633f-50d8/~tNl;6ae9-f4dc/sz, PASS, /simulations/nr/mec/singleMecHost/, -f omnetpp.ini -c BgGeneratorApp -r 0, 5s, a64d-8180/tplx;1cf9-34be/~tNl;9ff0-3d43/sz, PASS, /simulations/nr/mec/singleMecHost/, -f omnetpp.ini -c LoadGenerator -r 0, 5s, f45b-c2e3/tplx;527b-faab/~tNl;9ff0-3d43/sz, PASS, @@ -120,7 +120,7 @@ /simulations/nr/tutorial/, -f omnetpp.ini -c Multiple-UEs -r 0, 5s, 1c69-a30b/tplx;fae1-004b/~tNl;911b-750d/sz, PASS, /simulations/nr/tutorial/, -f omnetpp.ini -c Numerology -r 0, 5s, fb28-e3fd/tplx;d46b-e1ec/~tNl;e91e-f3d9/sz, PASS, /simulations/nr/tutorial/, -f omnetpp.ini -c Single-UE -r 0, 5s, f524-33c2/tplx;8675-5f47/~tNl;8da4-38f2/sz, PASS, -/simulations/nr/videostreaming_dataset_generator/, -f omnetpp.ini -c UrbanNetwork -r 0, 5s, 03fa-04ee/tplx;56e7-b598/~tNl;7b04-51bc/sz, PASS, +/simulations/nr/videostreaming_dataset_generator/, -f omnetpp.ini -c UrbanNetwork -r 0, 10s, 5987-db9a/tplx;8c3b-d289/~tNl;2b40-6bb9/sz, PASS, /tutorials/nr/, -f omnetpp.ini -c BgTraffic -r 0, 5s, 9e6c-745b/tplx;77bc-4597/~tNl;3421-2729/sz, PASS, /tutorials/nr/, -f omnetpp.ini -c CarrierAggregation -r 0, 5s, dd77-d910/tplx;6f78-f509/~tNl;e1f6-d784/sz, PASS, /tutorials/nr/, -f omnetpp.ini -c Multiple-UEs -r 0, 5s, e36e-b3c6/tplx;9607-cd9f/~tNl;b433-42c8/sz, PASS,