pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40445?usp=email )
Change subject: WIP: PDU Session Req
......................................................................
WIP: PDU Session Req
Change-Id: If0769afd07a4bae7778d7a7c347cebaa5909b5f8
---
M 5gc/C5G_Tests.ttcn
M deps/Makefile
M library/NGAP_Functions.ttcn
M library/NG_NAS_Osmo_Templates.ttcn
M library/ngap/NGAP_Templates.ttcn
5 files changed, 273 insertions(+), 6 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/45/40445/1
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index cd7007b..f997e7b 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -19,6 +19,8 @@
import from Osmocom_Types all;
import from GSM_Types all;
+import from DNS_Helpers all;
+
import from Milenage_Functions all;
import from NGAP_PDU_Descriptions all;
@@ -62,6 +64,7 @@
octetstring mp_usim_key := '762a2206fe0b4151ace403c86a11e479'O;
octetstring mp_usim_opc := '3c6e0b8a9c15224a8228b9a98ca1531d'O;
uint24_t mp_tac := 1;
+ charstring mp_apn := "internet";
}
/* parameters of emulated gNB / ng-eNB */
@@ -383,7 +386,6 @@
ngiaCap := '40'O /* ONLY NIA1 supported */);
[] NGAP.receive(cr_NG_SECURITY_MODE_COMMAND(p_UECap := ue_sec_cap)) -> value rx_nas
{
- log("Rx inner NAS: ", rx_nas);
/* Configure integrity protection: */
cfg := {
set_nas_alg_int := NG_NAS_ALG_IP_NIA1
@@ -417,6 +419,66 @@
}
}
+private function f_pdu_sess_establish() runs on ConnHdlr {
+ var template (value) NG_NAS_UL_Message_Type nas_ul_msg;
+ var NGAP_PDU rx_ngap;
+ var NG_NAS_DL_Message_Type rx_nas;
+ var NAS_PDU nas_pdu;
+
+ nas_ul_msg :=
cs_NG_PDU_SESSION_ESTABLISHMENT_REQUEST(cs_NG_PDU_SessionIdV('01'O),
'01'O,
+ p_IntegrityProtMaxDataRate := cs_IntegrityProtMaxDataRateV('FF'O,
'FF'O),
+ p_PDU_SessionType := cs_PDU_SessionTypeTV('001'B), /* IPv4 */
+ p_SSC_Mode := cs_SSC_ModeTV('001'B));
+ nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg));
+ nas_ul_msg :=
cs_NG_UL_NAS_TRANSPORT(cs_PayloadContainerType(tsc_PayloadContainerESMMsg),
+ cs_PayloadContainerLV(nas_pdu),
+ p_PDU_SessionId := cs_NG_PDU_SessionIdTV('01'O),
+ p_RequestType := cs_NG_Request_TypeTV('001'B),
+ p_DNN := cs_DNN_TLV(f_enc_dns_hostname(mp_apn)));
+ NGAP.send(nas_ul_msg);
+
+ NGAP.receive(mw_ngap_initMsg(mw_n2_InitialContextSetupRequest_withPDUSessionList)) ->
value rx_ngap;
+ NGAP.receive(cr_NG_DL_NAS_TRANSPORT) -> value rx_nas;
+ log("PESPIN: Rx DL_NAST_TRANSPORT: ", rx_nas);
+
+ var NG_NAS_DL_Message_Type inner_nas :=
dec_NG_NAS_DL_Message_Type(rx_nas.dl_Nas_Transport.payload.payload);
+ log("PESPIN: Rx inner NAS: ", inner_nas);
+
+ /* TODO: the above is being decoded wrong;
+19:49:40.663833 1901 NGAP_Emulation.ttcn:570 Sent on NGAP_CLIENT to TC_ng_register0(4)
@NG_NAS_MsgContainers.NG_NAS_DL_Message_Type : {
+ dl_Nas_Transport := {
+ protocolDiscriminator := '01111110'B,
+ spareHalfOctet := '0'H,
+ securityHeaderType := '0000'B,
+ messageType := '01101000'B,
+ spareHalfOctet2 := '0'H,
+ payloadContainerType := {
+ iei := omit,
+ container := '0001'B
+ },
+ payload := {
+ iei := omit,
+ iel := '3500'O,
+ payload :=
'2E0101C211000901000631310101FF010603F42403F4242905010A2D0002220101790006012041010109250908696E7465726E65741201'O
+ },
+ pduSessionId := omit,
+ additionalInfo := omit,
+ gmmCause := omit,
+ backOffTimerValue := omit,
+ lowerBoundTimerValue := omit
+ }
+}
+
+ dl_Nas_Transport := {
+ The last '1201'O in .payload.payload should actually end up decoded in
pduSessionId!!!! Looks like a bug in TTCN3?
+*/
+
+ /* TODO: we should also decode
ngap.initiatingMessage.value_.initialContextSetupRequest.protocolIEs[id==id_PDUSessionResourceSetupListCxtReq].value_.pDUSessionResourceSetupListCxtReq.pDUSessionResourceSetupRequestTransfer
*/
+
+ /* TODO: answer with InitialContextSetupResponse */
+ f_sleep(5.0);
+}
+
private function f_register() runs on ConnHdlr {
var template (value) NGAP_PDU tx_pdu;
var template (value) NG_NAS_UL_Message_Type nas_ul_msg;
@@ -454,8 +516,7 @@
as_ngap_handle_configuration_update();
- /* TODO: PDU session establishment request */
- f_sleep(5.0);
+ f_pdu_sess_establish();
}
/* NG Setup procedure to 5GC using a Global gNB ID containing unknown/foreign PLMN.
diff --git a/deps/Makefile b/deps/Makefile
index 0792c09..37922d4 100644
--- a/deps/Makefile
+++ b/deps/Makefile
@@ -85,7 +85,7 @@
# Do not put references to branches here, except for local testing: this breaks the
caching
# logic of docker containers, which only invalidate their cached ttcn3 dependencies if
this
# file changed.
-nas_commit= eff069b772a53e16773638f07599e7936ffcdd9a
+nas_commit= a51e51b2739d93ed3212a3dd85878627676137ea
titan.Libraries.TCCUsefulFunctions_commit= R.35.B-6-gb3687da
titan.ProtocolEmulations.M3UA_commit= b58f92046e48a7b1ed531e243a2319ebca53bf4c
titan.ProtocolEmulations.SCCP_commit= 750a3e836831e58eae59d4757ef5d0c759f9ca5d
diff --git a/library/NGAP_Functions.ttcn b/library/NGAP_Functions.ttcn
index 523754e..f6c1389 100644
--- a/library/NGAP_Functions.ttcn
+++ b/library/NGAP_Functions.ttcn
@@ -25,6 +25,9 @@
case (id_DownlinkNASTransport) {
return im.value_.downlinkNASTransport.protocolIEs[0].value_.aMF_UE_NGAP_ID;
}
+ case (id_InitialContextSetup) {
+ return im.value_.initialContextSetupRequest.protocolIEs[0].value_.aMF_UE_NGAP_ID;
+ }
case (id_UEContextRelease) {
return
im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_NGAP_IDs.uE_NGAP_ID_pair.aMF_UE_NGAP_ID;
}
@@ -65,8 +68,11 @@
case (id_DownlinkNASTransport) {
return im.value_.downlinkNASTransport.protocolIEs[1].value_.RAN_UE_NGAP_ID;
}
+ case (id_InitialContextSetup) {
+ return im.value_.initialContextSetupRequest.protocolIEs[1].value_.RAN_UE_NGAP_ID;
+ }
case (id_UEContextRelease) {
- return
im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_NGAP_IDs.uE_NGAP_ID_pair.rAN_UE_NGAP_ID;
+ return
im.value_.uEContextReleaseCommand.protocolIEs[1].value_.uE_NGAP_IDs.uE_NGAP_ID_pair.rAN_UE_NGAP_ID;
}
/* TODO */
}
@@ -126,6 +132,19 @@
}
return omit;
}
+ case (id_InitialContextSetup) {
+ var InitialContextSetupRequest msg := im.value_.initialContextSetupRequest;
+ for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) {
+ if (msg.protocolIEs[i].id == id_PDUSessionResourceSetupListCxtReq) {
+ var PDUSessionResourceSetupListCxtReq req_li :=
msg.protocolIEs[i].value_.pDUSessionResourceSetupListCxtReq;
+ for (j := 0; j < lengthof(req_li); j := j+1) {
+ return req_li[j].nAS_PDU;
+ /* FIXME: we should be returning req_li[j].pDUSessionResourceSetupRequestTransfer
too... */
+ }
+ }
+ }
+ return omit;
+ }
}
}
return omit;
diff --git a/library/NG_NAS_Osmo_Templates.ttcn b/library/NG_NAS_Osmo_Templates.ttcn
index 9e61249..eaa8eda 100644
--- a/library/NG_NAS_Osmo_Templates.ttcn
+++ b/library/NG_NAS_Osmo_Templates.ttcn
@@ -101,6 +101,75 @@
resultValue := p_Result
};
+/* 24.501 cl. 9.11.3.21 */
+template (value) DNN
+cs_DNN_TLV(template (value) octetstring p_DNN) :=
+{
+ iei := '25'O,
+ iel := '00'O, /* overwritten by RAW encoder */
+ dnnValue := p_DNN
+};
+
+/* 24.501 cl. 9.11.3.39 */
+template (value) PayloadContainer
+cs_PayloadContainerLV(octetstring p_EncodedGSMMsg) :=
+{
+ iei := omit,
+ iel := '0000'O, /* overwritten by RAW encoder */
+ payload := p_EncodedGSMMsg
+};
+
+/* 24.501 cl. 9.11.3.41 */
+template (value) NG_PDU_SessionId
+cs_NG_PDU_SessionIdV(template (value) O1_Type p_Id := '00'O) := // @sic R5s190338
sic@
+{
+ iei := omit,
+ sessionId := p_Id
+};
+template (value) NG_PDU_SessionId
+cs_NG_PDU_SessionIdTV(template (value) O1_Type p_Id := '00'O) := // @sic
R5s190338 sic@
+{
+ iei := '12'O,
+ sessionId := p_Id
+};
+
+/* 24.501 cl. 9.11.3.47 */
+template (value) NG_Request_Type cs_NG_Request_TypeTV(B3_Type p_RequestValue) :=
+{
+ iei := '8'H,
+ spare := tsc_Spare1,
+ requestValue := p_RequestValue
+};
+
+
+/* 24.501 cl. 9.11.4.7 */
+template (value) IntegrityProtMaxDataRate
+cs_IntegrityProtMaxDataRateV(template (value) O1_Type maxDataRateUL,
+ template (value) O1_Type maxDataRateD) :=
+{
+ iei := omit,
+ maxDataRateUL := maxDataRateUL,
+ maxDataRateDL := maxDataRateD
+};
+
+/* 24.501 cl. 9.11.4.11 */
+template (value) PDU_SessionType
+cs_PDU_SessionTypeTV(template (value) B3_Type p_Type) :=
+{
+ iei := '9'H,
+ spare := tsc_Spare1,
+ typeValue := p_Type
+};
+
+/* 24.501 cl. 9.11.4.16 */
+template (value) SSC_Mode
+cs_SSC_ModeTV(B3_Type p_SSCMode) :=
+{
+ iei := 'A'H,
+ spare := tsc_Spare1,
+ sscModeValue := p_SSCMode
+};
+
/* 24.501 cl. 8.2.1 */
template (present) NG_NAS_DL_Message_Type
cr_NG_AUTHENTICATION_REQUEST(template (present) NAS_KsiValue p_KeySetId := ?,
@@ -278,6 +347,64 @@
}
}
+/* 24.501 cl. 8.2.10 */
+template (value) NG_NAS_UL_Message_Type
+cs_NG_UL_NAS_TRANSPORT(template (value) PayloadContainerType p_PayloadContainerType,
+ template (value) PayloadContainer p_PayloadContainer,
+ template (omit) NG_PDU_SessionId p_PDU_SessionId := omit,
+ template (omit) NG_PDU_SessionId p_OldPDU_SessionId := omit,
+ template (omit) NG_Request_Type p_RequestType := omit,
+ template (omit) S_NSSAI_Type p_S_NSSAI := omit,
+ template (omit) DNN p_DNN := omit,
+ template (omit) AdditionalInformation p_AdditionalInfo := omit,
+ template (omit) MA_PDUSessionInfo p_MA_PDUSessionInfo := omit,
+ template (omit) ReleaseAssistanceInd p_ReleaseAssistanceInd := omit) :=
+{
+ ul_Nas_Transport := {
+ protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1
*/
+ spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */
+ securityHeaderType := tsc_SHT_NoSecurityProtection,
+ messageType := tsc_MT_NG_UL_NASTransport, /* cl. 9.7 M V 1 */
+ spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */
+ payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 M V 1/2
*/
+ payload := p_PayloadContainer, /* cl. 9.11.3.39 M LV-E
3-65537 */
+ pduSessionId := p_PDU_SessionId, /* cl. 9.11.3.41 C TV 2
IEI=70 */
+ oldPDUSessionId := p_OldPDU_SessionId, /* cl. 9.11.3.41 O TV 3
IEI=61 */
+ requestType := p_RequestType, /* cl. 9.`0.3.47 O TV 1
IEI=8 */
+ s_NSSAI := p_S_NSSAI, /* cl. 9.11.2.8 O TLV 3-10
IEI=22 */
+ dnn := p_DNN, /* cl. 9.11.3.21 O TLV
3-102 IEI=25 */
+ additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n
IEI=24 */
+ maPDUSessionInfo := p_MA_PDUSessionInfo, /* cl. 9.11.3.31A O TV 1
IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */
+ releaseAssistanceInd := p_ReleaseAssistanceInd /* cl. 9.11.3.46A O TV 1
IEI=F Sep20 @sic R5s201387 Baseline Moving sic@ */
+ }
+}
+
+/* 24.501 cl. 8.2.11 */
+template (present) NG_NAS_DL_Message_Type
+cr_NG_DL_NAS_TRANSPORT(template (present) PayloadContainerType p_PayloadContainerType :=
?,
+ template (present) PayloadContainer p_Payload := ?,
+ template NG_PDU_SessionId p_PDU_SessionId := *,
+ template AdditionalInformation p_AdditionalInfo := *,
+ template GMM_GSM_Cause p_Cause := *,
+ template GPRS_Timer3 p_BackOff := *,
+ template GPRS_Timer3 p_LowerBoundTimerValue := *) :=
+{
+ dl_Nas_Transport := {
+ protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1
*/
+ spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */
+ securityHeaderType := tsc_SHT_NoSecurityProtection,
+ messageType := tsc_MT_NG_DL_NASTransport, /* cl. 9.7 M V 1 */
+ spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */
+ payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 M V 1/2
*/
+ payload := p_Payload, /* cl. 9.11.3.39 M LV-E
3-65537 */
+ pduSessionId := p_PDU_SessionId, /* cl. 9.11.3.41 C TV 2
IEI=70 */
+ additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n
IEI=24 */
+ gmmCause := p_Cause, /* cl. 9.11.3.2 O TV 2
IEI=58 */
+ backOffTimerValue := p_BackOff, /* cl. 9.11.2.5 O TLV 3
IEI=37 */
+ lowerBoundTimerValue := p_LowerBoundTimerValue /* cl. 9.11.2.5 O TLV 3
IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */
+ }
+}
+
/* 24.501 cl. 8.2.19 */
template (present) NG_NAS_DL_Message_Type
cr_NG_CONFIGURATION_UPDATE_COMMAND(template ConfigUpdateInd p_ConfigUpdateInd := *,
@@ -453,4 +580,52 @@
}
}
+/* 24.501 cl. 8.3.1 */
+template (omit) NG_NAS_UL_Message_Type
+cs_NG_PDU_SESSION_ESTABLISHMENT_REQUEST(template (value) NG_PDU_SessionId
p_PDU_SessionId,
+ template (value) ProcedureTransactionIdentifier p_PTI,
+ template (omit) IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := omit,
+ template (omit) PDU_SessionType p_PDU_SessionType := omit,
+ template (omit) SSC_Mode p_SSC_Mode := omit,
+ template (omit) NG_UE_SM_Cap p_UECap := omit,
+ template (omit) MaxNumPacketFilters p_MaxNumPacketFilters := omit,
+ template (omit) AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := omit,
+ template (omit) SM_PDU_DN_RequestContainer p_PDUReq := omit,
+ template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit,
+ template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit,
+ template (omit) DS_TT_EthernetPortMACAddr p_DS_TT_EthernetPortMACAddr := omit,
+ template (omit) UE_DS_TT_ResidenceTime p_UE_DS_TT_ResidenceTime := omit,
+ template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit,
+ template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit,
+ template (omit) PDU_Address p_SuggestedInterfaceId := omit,
+ template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit,
+ template (omit) RequestedMBSContainer p_RequestedMBS := omit,
+ template (omit) PDUSessionPairId p_PduSessionPairId := omit,
+ template (omit) RSN p_RSN := omit) := {
+ pdu_Session_Establishment_Request := {
+ protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V
1 */
+ pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V
1 */
+ procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1
*/
+ messageType := tsc_MT_NG_PDUSessionEstablishmentRequest, /* cl. 9.7
M V 1 */
+ integrityProtMaxDataRate := p_IntegrityProtMaxDataRate, /* cl. 9.11.4.7 M V 2
*/
+ pduSessionType := p_PDU_SessionType, /* cl. 9.11.4.11 O TV
1 IEI=9 */
+ sscMode := p_SSC_Mode, /* cl. 9.11.4.16 O TV
1 IEI=A */
+ smCapability := p_UECap, /* cl. 9.11.4.1 O
TLV 3-15 IEI=28 */
+ maxNumPacketFilters := p_MaxNumPacketFilters, /* cl. 9.11.4.6 O TV
3 IEI=55 */
+ alwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, /* cl. 9.11.4.4 O TV
1 IEI=B */
+ smPDU_RequestContainer := p_PDUReq, /* cl. 9.11.4.15 O
TLV ? ? */
+ extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O
TLV-E 4-65538 IEI=0x7B */
+ ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O
TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ds_TT_EthernetPortMACAddr := p_DS_TT_EthernetPortMACAddr, /* cl. 9.11.4.25 O
TLV 8 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ueDS_TT_ResidenceTime := p_UE_DS_TT_ResidenceTime, /* cl. 9.11.4.26 O
TLV 10 IEI=6F Sep20 @sic R5s201387 Baseline Moving sic@ */
+ portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O
TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O
TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */
+ suggestedInterfaceId := p_SuggestedInterfaceId, /* cl. 9.11.4.10 O
TLV 11 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */
+ serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O
TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ requestedMBS := p_RequestedMBS, /* cl. 9.11.4.30 O
TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ pduSessionPairId := p_PduSessionPairId, /* cl. 9.11.4.32 O
TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ rsn := p_RSN /* cl. 9.11.4.33 O
TLV 3 IEI=35 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ }
+}
+
}
diff --git a/library/ngap/NGAP_Templates.ttcn b/library/ngap/NGAP_Templates.ttcn
index dde7844..e9cd7a7 100644
--- a/library/ngap/NGAP_Templates.ttcn
+++ b/library/ngap/NGAP_Templates.ttcn
@@ -1380,11 +1380,13 @@
template (present) InitiatingMessage
mw_n2_InitialContextSetupRequest_withPDUSessionList(
template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?,
template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?,
+
template (present) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate := ?,
template (present) GUAMI p_gUAMI := ?,
template (present) PDUSessionResourceSetupListCxtReq
p_pDUSessionResourceSetupListCxtReq := ?,
template (present) AllowedNSSAI p_allowedNSSAI := ?,
template (present) UESecurityCapabilities p_uESecurityCapabilities := ?,
-
template (present) SecurityKey p_nextHopNH := ?
+
template (present) SecurityKey p_nextHopNH := ?,
+
template (present) MaskedIMEISV p_maskedIMEISV := ?
) := {
procedureCode := id_InitialContextSetup,
criticality := reject,
@@ -1402,6 +1404,11 @@
value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID }
},
{
+
id := id_UEAggregateMaximumBitRate,
+
criticality := reject,
+
value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate }
+
},
+
{
id := id_GUAMI,
criticality := reject,
value_ := { GUAMI := p_gUAMI }
@@ -1425,6 +1432,11 @@
id := id_SecurityKey,
criticality := reject,
value_ := { SecurityKey := p_nextHopNH }
+
},
+
{ /* Optional: */
+
id := id_MaskedIMEISV,
+
criticality := ignore,
+
value_ := { maskedIMEISV := p_maskedIMEISV }
}
}
}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40445?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: If0769afd07a4bae7778d7a7c347cebaa5909b5f8
Gerrit-Change-Number: 40445
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>