Commit 7593edbf authored by Yann Garcia's avatar Yann Garcia
Browse files

Enhance UT to send user plane data

parent 8ed88a0a
Loading
Loading
Loading
Loading
+4 −0
Changes for etc/AtsNGAP/AtsNGAP_GNB_p_net.cfg_: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -47,6 +47,10 @@ LibNGAP_Pixits.PX_AMF_UE_NGAP_ID := 1

LibNGAP_Pixits.PX_TIME_ZONE        := '80'O # 0x40 for GMT+1, 0x80 for GMT+2

# User plane probe (TC_NGAP_GNB_PDU_01): the UPF tunnel endpoint given to the gNB is this host on N3, and the UE pings it
LibNGAP_Pixits.PX_TRANSPORT_LAYER_ADDRESS := '00001010101011100001001100001110'B # 10.174.19.14
LibNGAP_Pixits.PX_UT_PING_HOST := "10.174.19.14"

LibNGAP_Pixits.PX_PDU_SESSION_ID   := 1

LibNGAP_Pixits.PX_NR_ENCRYPTION_ALGORITHMS              := '1110000000000000'B
+41 −0
Changes for ttcn/AtsNGAP/NGAP_Steps.ttcn: 41 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -847,6 +847,47 @@ module NGAP_Steps { // TODO FSCOM f_xxx_UE_SecurityMode to be mmoved into NAG_NG
            return true;
        } // End of function f_NGAP_gnb_UE_await_data_call

        /**
         * @brief  Have the real UE send user plane traffic over its data call: ping PX_UT_PING_HOST.
         * @details Unless PX_UT_PING_HOST is empty: asks the upper tester for PING (AT+QPING on the modem,
         *          PX_UT_PING_COUNT echo requests, PX_UT_PING_TIMEOUT s each) and waits for its result, which is
         *          only logged. The gNB is expected to forward the echo requests as uplink G-PDUs to the UPF
         *          tunnel endpoint of the PDU session (PX_TRANSPORT_LAYER_ADDRESS, PX_GTP_TEID); as the test
         *          system does not handle GTP-U yet, no reply comes back, and only a capture on the test system
         *          host (UDP port 2152) shows whether they arrived.
         *          The UE stays in CM-CONNECTED meanwhile: no NGAP signalling is expected.
         * @note   The verdict is set by the UT dispatcher only (NGAP_UtDispatcher): inconc if the modem could not
         *         run the pings at all (e.g. the context of the data call is not usable by AT+QPING); lost
         *         replies are not a failure.
         * @return true if the modem ran the pings.
         */
        function f_NGAP_gnb_UE_ping() runs on gNBNGAPComponent return boolean {
            var UT_COMMON_CNF v_cnf;
            timer t_ping := int2float(PX_UT_PING_COUNT * PX_UT_PING_TIMEOUT) + 30.0;

            if (PX_UT_PING_HOST == "") {
                return false;
            }
            log(">>> f_NGAP_gnb_UE_ping: ", PX_UT_PING_HOST, ", ", PX_UT_PING_COUNT, " echo requests");
            fl_UT_ApplyCommand(utPtcMtcPort, cas_UT_Req(PING, CNF_REQUIRED, {
                                                                            cs_Ut_Parameter_Common("HOST", PX_UT_PING_HOST),
                                                                            cs_Ut_Parameter_Common("COUNT", int2str(PX_UT_PING_COUNT)),
                                                                            cs_Ut_Parameter_Common("TIMEOUT", int2str(PX_UT_PING_TIMEOUT))
                                                                            }), true);
            t_ping.start;
            alt {
                [] utPtcMtcPort.receive(car_UT_COMMON_CNF) -> value v_cnf {
                    t_ping.stop;
                }
                [] t_ping.timeout {
                    log("*** " & __SCOPE__ & ": INFO: no ping result from the upper tester ***");
                    return false;
                }
            }
            log("*** " & __SCOPE__ & ": INFO: ping ", PX_UT_PING_HOST, " result: ", v_cnf, " ***");
            return v_cnf.Result;
        } // End of function f_NGAP_gnb_UE_ping

        /**
         * @brief  Leave the real UE in a known state at the end of a test: deregistered, in flight mode.
         * @details Unless PX_UT_DEREGISTER_TIMEOUT is 0.0: asks the upper tester to switch the modem to flight
+4 −0
Changes for ttcn/AtsNGAP/NGAP_TCFunctions.ttcn: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -179,6 +179,10 @@ module NGAP_TCFunctions {
                    if (PICS_USE_AT_COMMANDS and v_setup) {
                        if (not f_NGAP_gnb_UE_await_data_call()) {
                            log("*** " & __SCOPE__ & ": INCONC: the PDU session is set up, but the UE data call is not connected. ***");
                        } else if (f_NGAP_gnb_UE_ping()) {
                            // User plane probe: the echo requests must reach PX_TRANSPORT_LAYER_ADDRESS as uplink
                            // G-PDUs (check with a capture on UDP port 2152); not checked by the test yet
                            log("*** " & __SCOPE__ & ": INFO: user plane traffic sent by the UE ***");
                        }
                    }
                }
+10 −0
Changes for ttcn/LibNGAP/lib/LibNGAP_Pixits.ttcn: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -750,6 +750,16 @@ module LibNGAP_Pixits {
     *        see f_NGAP_gnb_UE_Deregister. 0.0 to leave the UE as it is at the end of the test */
    modulepar float      PX_UT_DEREGISTER_TIMEOUT := 10.0;

    /** @desc Host the real UE pings over its data call once the PDU session is set up, to generate user plane traffic
     *        (uplink G-PDUs towards PX_TRANSPORT_LAYER_ADDRESS); empty to send no traffic. See f_NGAP_gnb_UE_ping */
    modulepar charstring PX_UT_PING_HOST := "";

    /** @desc Number of echo requests sent by the real UE (1..10); see f_NGAP_gnb_UE_ping */
    modulepar integer    PX_UT_PING_COUNT := 4;

    /** @desc Time, in seconds, the real UE waits for each echo reply (1..255); see f_NGAP_gnb_UE_ping */
    modulepar integer    PX_UT_PING_TIMEOUT := 4;

    /** @desc Whether, after its restart (AT+CFUN=1,1), the real UE (AT commands) is set to full functionality (AT+CFUN=1) and
     *        forced onto PX_UT_PLMN_MCC/PX_UT_PLMN_MNC (AT+COPS=1); see f_NGAP_gnb_UE_Register.
     *        false: it is only restarted, and registers by itself on the PLMN it selects. */
+10 −5
Changes for ttcn/LibNGAP/lib_system/LibNGAP_Functions.ttcn: 10 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -1609,6 +1609,8 @@ module LibNGAP_Functions {
                                                                                 '00000001'O,
                                                                                 omit
                        ))));
        setverdict(pass, "Sent RETRIEVE_UE_INFORMATION NAS message");

        // Await UEInformationTransfer
        f_recv_NGAP_PDU(
                        mw_ngap_initMsg(
@@ -1618,6 +1620,7 @@ module LibNGAP_Functions {
                                                                                    PX_AMF_POINTER,
                                                                                    ?
                        ))));
        setverdict(pass)
    }

    /**
@@ -1662,7 +1665,7 @@ module LibNGAP_Functions {
                                                                                                                                                   m_tAI
                        )))));

        setverdict(pass);
        setverdict(pass, "Sent UplinkNASTransport NAS message");
    }

    /**
@@ -1691,6 +1694,7 @@ module LibNGAP_Functions {
                                                                                       vc_RAN_UE_ID,
                                                                                       ?
                                 )));
                setverdict(pass, "Received UERadioCapabilityInfoIndication NAS message");
            }
            [] N2_gNBaMF_P.check(receive(NGAP_PDU: ?)) {
                // continue
@@ -1716,7 +1720,7 @@ module LibNGAP_Functions {
            setverdict(fail);
        } else {
            log("*** " & __SCOPE__ & ": PASS: Expected NG_REGISTRATION_COMPLETE");
            setverdict(pass);
            setverdict(pass, "Received REGISTRATION_COMPLETE NAS message");
        }

        log("<<< f_await_registration_complete");
@@ -1799,7 +1803,7 @@ module LibNGAP_Functions {
                                                                                                                                                    m_tAI
                        )))));

        setverdict(pass);
        setverdict(pass, "Sent PDU_SESSION_ESTABLISHMENT_REQUEST NAS message");

        log("<<< f_send_pdu_session_establishment_request");
    }
@@ -1828,10 +1832,10 @@ module LibNGAP_Functions {
        var O1_Type v_pti;
        if (not f_get_pdu_session_establishment_request_ids(v_psi, v_pti)) {
            log("*** " & __SCOPE__ & ": FAIL: PDU_SESSION_ESTABLISHMENT_REQUEST mismatch.");
            setverdict(fail);
            setverdict(fail, "Received PDU_SESSION_ESTABLISHMENT_REQUEST NAS message");
        } else {
            log("*** " & __SCOPE__ & ": PASS: Expected PDU_SESSION_ESTABLISHMENT_REQUEST");
            setverdict(pass);
            setverdict(pass, "Received PDU_SESSION_ESTABLISHMENT_REQUEST NAS message");
        }
    }

@@ -2016,6 +2020,7 @@ module LibNGAP_Functions {
                                        }
                        ));
        if (not f_NGAP_check_received_PDU(mw_ngap_initMsg(mw_n2_initialUeMessage_conformant), "INITIAL UE MESSAGE")) {
            log("f_send_ue_context_release_command_await_service_request_send_service_accept: Received INITIAL UE MESSAGE does not conform");
            return;
        }
        vc_RAN_UE_ID := vc_recvNGAP_PDU.initiatingMessage.value_.InitialUEMessage.protocolIEs[f_NGAP_getIEIndex(vc_recvNGAP_PDU, id_RAN_UE_NGAP_ID)].value_.rAN_UE_NGAP_ID;
Loading