pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43663?usp=email )
Change subject: smf: Encode NG-NAS PDU Session Establishment Request ......................................................................
smf: Encode NG-NAS PDU Session Establishment Request
Until now, the NAS message was hardcoded. Let's generate it ourselves instead, so we can pass the same PDU Session Id, etc.
Change-Id: If04c97c80e87f851ad0fb24ce089ccc0ff477fb0 --- M smf/SMF_Session_CT.ttcn M smf/SMF_Session_CT_5G.ttcn M smf/gen_links.sh M smf/regen_makefile.sh 4 files changed, 90 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/63/43663/1
diff --git a/smf/SMF_Session_CT.ttcn b/smf/SMF_Session_CT.ttcn index 11e9f3a..197717f 100644 --- a/smf/SMF_Session_CT.ttcn +++ b/smf/SMF_Session_CT.ttcn @@ -152,6 +152,10 @@ return valueof(pfcp_pars); }
+type record SessionPars_NGNAS { + OCT1 pti +}; + /* configuration data for a given Session */ type record SessionPars { hexstring imsi, @@ -179,7 +183,9 @@
SessionParsGy gy,
- PfcpParameters pfcp_pars + PfcpParameters pfcp_pars, + + SessionPars_NGNAS nas }
template (value) SessionPars @@ -210,7 +216,10 @@ validity_time := 0, cca_res_code := DIAMETER_SUCCESS }, - pfcp_pars := pfcp_pars + pfcp_pars := pfcp_pars, + nas := { + pti := '00'O + } }
diff --git a/smf/SMF_Session_CT_5G.ttcn b/smf/SMF_Session_CT_5G.ttcn index 01c7a9f..425675e 100644 --- a/smf/SMF_Session_CT_5G.ttcn +++ b/smf/SMF_Session_CT_5G.ttcn @@ -24,6 +24,12 @@ import from NGAP_IEs all; import from NGAP_Types all;
+import from NAS_CommonTypeDefs all; +import from NG_NAS_MsgContainers all; +import from NG_NAS_Osmo_Types all; +import from NG_NAS_Osmo_Templates all; +import from NG_NAS_Functions all; + import from PFCP_Emulation all; import from Mutex all;
@@ -96,16 +102,18 @@ var template (value) HTTP2_pseudo_headers pseudo_hdr; var template (value) HTTP2_header_list hdr_li; var template (value) HTTP2_header_block hb; + var template (value) NG_NAS_UL_Message_Type nas_ul_msg; + var ProcedureTransactionIdentifier pti := f_next_pti(); var template (value) octetstring body; var template (value) TS29502_Nsmf_PDUSession.PlmnId plmn_id := TS29502_Nsmf_PDUSession_Templates.ts_PlmnId("001", "001"); var template (value) TS29502_Nsmf_PDUSession.PlmnIdNid plmn_id_nid := TS29502_Nsmf_PDUSession_Templates.ts_PlmnIdNid(plmn_id.mcc, plmn_id.mnc); - var integer pduSessionId := 1; + var integer pdu_sess_id := 1;
var template (value) SmContextCreateData sm_contexts; var octetstring sm_contexts_enc; sm_contexts := ts_SmContextCreateData(supi := "imsi-" & g_pars.imsi_str, pei := "imeisv-0790219824011594", - pduSessionId := pduSessionId, + pduSessionId := pdu_sess_id, dnn := "internet", sNssai := TS29502_Nsmf_PDUSession_Templates.ts_Snssai(1), servingNfId := "foobar", @@ -117,11 +125,17 @@ ratType := ts_RatType(NR), ueLocation := ts_UserLocation(nrLocation := ts_NrLocation(tai := ts_Tai(plmn_id, "000001"), ncgi := ts_Ncgi(plmn_id, "000000000"))), - smContextStatusUri := f_amf_callback_uri(g_pars.imsi_str, "sm-context-status", pduSessionId)); + smContextStatusUri := f_amf_callback_uri(g_pars.imsi_str, "sm-context-status", pdu_sess_id)); sm_contexts_enc := f_enc_SmContextCreateData(valueof(sm_contexts));
var charstring boundary := "=-0EVVjxcWWFYNd1JXh1OQEg==" - var octetstring nas_enc := '2e0101c1ffff91a1'O; + + nas_ul_msg := cs_NG_PDU_SESSION_ESTABLISHMENT_REQUEST(cs_NG_PDU_SessionIdV(int2oct(pdu_sess_id, 1)), pti, + p_IntegrityProtMaxDataRate := cs_IntegrityProtMaxDataRateV('FF'O, 'FF'O), + p_PDU_SessionType := cs_PDU_SessionTypeTV(c_PDU_SessionType_IPv4), + p_SSC_Mode := cs_SSC_ModeTV('001'B)); + var octetstring nas_enc := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg)); + body := f_http2_encode_body_multipart_json_5gnas(sm_contexts_enc, nas_enc, boundary);
pseudo_hdr := ts_HTTP2_pseudo_headers("POST", @@ -446,4 +460,21 @@ } }
+ +/************ +* NG NAS +**************/ + +private function f_next_pti() runs on SMF_Session_CT return ProcedureTransactionIdentifier +{ + var integer i := oct2int(g_pars.nas.pti); + if (i >= 254) { + g_pars.nas.pti := '01'O; + } else { + g_pars.nas.pti := int2oct(i + 1, 1); + } + return g_pars.nas.pti; +} + + } diff --git a/smf/gen_links.sh b/smf/gen_links.sh index 29d860a..352f4a9 100755 --- a/smf/gen_links.sh +++ b/smf/gen_links.sh @@ -70,6 +70,45 @@ FILES="TS29571_CommonData.ttcn TS29502_Nsmf_PDUSession.ttcn TS29503_Nudm_SDM.ttcn TS29512_Npcf_SMPolicyControl.ttcn TS29518_Namf_Communication.ttcn " gen_links $DIR $FILES
+ +#################### +# NG_NAS start +#################### +DIR=$BASEDIR/nas/ccsrc/Externals +FILES="common_ext.cc " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/Common +FILES="CommonDefs.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/PicsPixit +FILES="EUTRA_NR_Parameters.ttcn NAS_5GC_Parameters.ttcn Parameters.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/CommonIP +FILES="CommonIP.ttcn LoopbackIP_PacketFilterTest.ttcn LoopbackIP.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/EPS_NAS +FILES="EPS_NAS_LoopBack_TypeDefs.ttcn EPS_NAS_TypeDefs.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/Common4G5G +FILES="Common4G5G_LoopBack.ttcn Common4G5G.ttcn EUTRA_NR_SecurityFunctions.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/NAS +FILES="NAS_AuthenticationCommon.ttcn NAS_AuxiliaryDefsAndFunctions.ttcn NAS_CommonTemplates.ttcn NAS_CommonTypeDefs.ttcn SMS_Templates.ttcn SMS_TypeDefs.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/nas/ttcn/Lib3GPP/NG_NAS +FILES="EAP_TypeDefs.ttcn NG_NAS_Common.ttcn NG_NAS_MsgContainers.ttcn NG_NAS_Templates.ttcn NG_NAS_TypeDefs.ttcn NG_V2X_MsgContainers.ttcn NG_V2X_TypeDefs.ttcn " +gen_links $DIR $FILES +#################### +# NG_NAS end +#################### + DIR=../library/ngap FILES="NGAP_CommonDataTypes.asn NGAP_Constants.asn NGAP_Containers.asn NGAP_IEs.asn NGAP_PDU_Contents.asn NGAP_PDU_Descriptions.asn " FILES+="NGAP_EncDec.cc NGAP_Types.ttcn NGAP_Pixits.ttcn NGAP_Templates.ttcn " @@ -88,7 +127,8 @@ FILES+="NTP_Functions.ttcn PFCP_Templates.ttcn PFCP_CodecPort.ttcn PFCP_CodecPort_CtrlFunct.ttcn PFCP_CodecPort_CtrlFunctDef.cc PFCP_Emulation.ttcn " FILES+="Mutex.ttcn " FILES+="HTTP2_CodecPort.ttcn HTTP2_CodecPort_CtrlFunct.ttcn HTTP2_CodecPort_CtrlFunctDef.cc HTTP2_Templates.ttcn HTTP2_Functions.ttcn HTTP2_Adapter.ttcn HTTP2_Server_Emulation.ttcn " -FILES+="TS29503_Nudm_SDM_Templates.ttcn TS29502_Nsmf_PDUSession_Templates.ttcn TS29512_Npcf_SMPolicyControl_Templates.ttcn TS29518_Namf_Communication_Templates.ttcn" +FILES+="TS29503_Nudm_SDM_Templates.ttcn TS29502_Nsmf_PDUSession_Templates.ttcn TS29512_Npcf_SMPolicyControl_Templates.ttcn TS29518_Namf_Communication_Templates.ttcn " +FILES+="NG_NAS_Osmo_Types.ttcn NG_NAS_Osmo_Templates.ttcn NG_NAS_Functions.ttcn " gen_links $DIR $FILES
gen_links_finish diff --git a/smf/regen_makefile.sh b/smf/regen_makefile.sh index b8c5a9a..a648078 100755 --- a/smf/regen_makefile.sh +++ b/smf/regen_makefile.sh @@ -6,6 +6,7 @@ *.ttcn *.ttcnpp BSSGP_EncDec.cc + common_ext.cc DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_EncDec.cc GTPC_EncDec.cc @@ -33,3 +34,5 @@ CPPFLAGS_TTCN3=""
. ../_buildsystem/regen_makefile.inc.sh + +sed -i -e 's/^LINUX_LIBS = -lxml2 -lsctp/LINUX_LIBS = -lxml2 -lsctp -lgnutls/' Makefile