pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35653?usp=email )
Change subject: GSUP: Fix build of IEs in f_gen_tr_ies(), add PdpInfo(Compl) IEs to it ......................................................................
GSUP: Fix build of IEs in f_gen_tr_ies(), add PdpInfo(Compl) IEs to it
The previous conditions "isvalue()" were wrong. Passing an array of templates to isvalue() returns false, which is unexpected here.
Change-Id: Iaad47b1ec7e2a7477fa554df9caeb866ffa594eb --- M epdg/EPDG_Tests.ttcn M library/GSUP_Templates.ttcn 2 files changed, 117 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/53/35653/1
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index 554dd07..0e9cbed 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -506,8 +506,15 @@ GSUP.send(ts_GSUP_EPDGTunnel_REQ(g_pars.imsi)); f_GTP2C_CreateSession_success(); /* Expect a positive response back to the translator; */ + var template (present) GSUP_IEs pdp_info := { + tr_GSUP_IE_PDP_CONTEXT_ID(?), + tr_GSUP_IE_PDP_ADDRESS(?), + tr_GSUP_IE_APN(?), + tr_GSUP_IE_PDP_QOS(?), + tr_GSUP_IE_Charging_Characteristics(?) + }; alt { - [] GSUP.receive(tr_GSUP_EPDGTunnel_RES(g_pars.imsi)); + [] GSUP.receive(tr_GSUP_EPDGTunnel_RES(g_pars.imsi, pdp_info)); [] GSUP.receive(GSUP_PDU:?) -> value rx_gsup { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GSUP msg rx: ", rx_gsup)); } diff --git a/library/GSUP_Templates.ttcn b/library/GSUP_Templates.ttcn index ea2b489..68e4fd1 100644 --- a/library/GSUP_Templates.ttcn +++ b/library/GSUP_Templates.ttcn @@ -190,6 +190,34 @@ } } } +template (value) GSUP_IE ts_GSUP_IE_PdpInfo_ie(template (value) GSUP_IEs pdp_info) := { + tag := OSMO_GSUP_PDP_INFO_IE, + len := 0, /* overwritten */ + val := { + pdp_info := pdp_info + } +} + +template (present) GSUP_IE tr_GSUP_IE_PdpInfo(template (present) OCT1 ctx_id, + template (present) octetstring apn, + template (present) GSUP_PDP_Address pdp_address) := { + tag := OSMO_GSUP_PDP_INFO_IE, + len := ?, + val := { + pdp_info := { + tr_GSUP_IE_PDP_CONTEXT_ID(ctx_id), + tr_GSUP_IE_PDP_ADDRESS(pdp_address), + tr_GSUP_IE_APN(apn) + } + } +} +template (present) GSUP_IE tr_GSUP_IE_PdpInfo_ie(template (present) GSUP_IEs pdp_info := ?) := { + tag := OSMO_GSUP_PDP_INFO_IE, + len := ?, + val := { + pdp_info := pdp_info + } +}
template (value) GSUP_IE ts_GSUP_IE_PDP_CONTEXT_ID(template (value) OCT1 ctx_id) := { tag := OSMO_GSUP_PDP_CONTEXT_ID_IE, @@ -207,7 +235,6 @@ } }
- template (value) GSUP_IE ts_GSUP_IE_PDP_ADDRESS(template (value) GSUP_PDP_Address pdp_address) := { tag := OSMO_GSUP_PDP_ADDRESS_IE, len := 0, @@ -216,6 +243,14 @@ } }
+template (present) GSUP_IE tr_GSUP_IE_PDP_ADDRESS(template (present) GSUP_PDP_Address pdp_address := ?) := { + tag := OSMO_GSUP_PDP_ADDRESS_IE, + len := ?, + val := { + pdp_address := pdp_address + } +} + template (value) GSUP_IE ts_GSUP_IE_PDP_QOS(template (value) octetstring pdp_qos) := { tag := OSMO_GSUP_PDP_QOS_IE, len := 0, @@ -224,6 +259,29 @@ } }
+template (present) GSUP_IE tr_GSUP_IE_PDP_QOS(template (present) octetstring pdp_qos := ?) := { + tag := OSMO_GSUP_PDP_QOS_IE, + len := ?, + val := { + pdp_qos := pdp_qos + } +} + +template (value) GSUP_IE ts_GSUP_IE_Charging_Characteristics(template (value) octetstring charg_char) := { + tag := OSMO_GSUP_CHARG_CHAR_IE, + len := 0, + val := { + charg_char := charg_char + } +} + +template (present) GSUP_IE tr_GSUP_IE_Charging_Characteristics(template (present) octetstring charg_char := ?) := { + tag := OSMO_GSUP_CHARG_CHAR_IE, + len := ?, + val := { + charg_char := charg_char + } +}
template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template GSUP_IEs ies := *) := { msg_type := msgt, @@ -428,19 +486,25 @@
template (value) GSUP_PDU ts_GSUP_EPDGTunnel_RES(hexstring imsi, + template (value) GSUP_IEs pdp_info, GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG, octetstring destination_name := ''O) := ts_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)), + valueof(ts_GSUP_IE_PdpInfoCompl), + valueof(ts_GSUP_IE_PdpInfo_ie(pdp_info)), valueof(ts_GSUP_IE_Message_Class(message_class)), valueof(ts_GSUP_IE_Destination_Name(destination_name)) });
template (present) GSUP_PDU tr_GSUP_EPDGTunnel_RES(template (present) hexstring imsi, + template (present) GSUP_IEs pdp_info, template (present) GSUP_Message_Class message_class := OSMO_GSUP_MESSAGE_CLASS_IPSEC_EPDG, template octetstring destination_name := omit) := tr_GSUP(OSMO_GSUP_MSGT_EPDG_TUNNEL_RESULT, f_gen_tr_ies(imsi, + pdp_info_compl := true, + pdp_info := pdp_info, message_class := message_class, destination_name := destination_name));
@@ -1077,6 +1141,7 @@ }
private function f_gen_ts_ies(hexstring imsi, + template (omit) boolean pdp_info_compl := omit, template (omit) GSUP_Message_Class message_class := omit, template (omit) hexstring imei := omit, template (omit) GSUP_CnDomain dom := omit, @@ -1091,6 +1156,10 @@ ies := ies & { valueof(ts_GSUP_IE_CnDomain(dom)) }; }
+ if (isvalue(pdp_info_compl) and valueof(pdp_info_compl)) { + ies := ies & { valueof(ts_GSUP_IE_PdpInfoCompl) }; + } + if (isvalue(imei)) { ies := ies & { valueof(ts_GSUP_IE_IMEI(valueof(imei))) }; } @@ -1111,6 +1180,8 @@ }
private function f_gen_tr_ies(template hexstring imsi, + template boolean pdp_info_compl := omit, + template GSUP_IEs pdp_info := omit, template GSUP_Message_Class message_class := omit, template integer cause := omit, template hexstring msisdn := omit, @@ -1123,27 +1194,37 @@ }; var integer idx := 1;
- if (isvalue(cause)) { - ies[idx] := tr_GSUP_IE_Cause(cause); - idx := idx + 1; - } - - if (isvalue(msisdn)) { + if (not istemplatekind(msisdn, "omit")) { ies[idx] := tr_GSUP_IE_MSISDN(msisdn); idx := idx + 1; }
- if (isvalue(imei_result)) { + if (not istemplatekind(cause, "omit")) { + ies[idx] := tr_GSUP_IE_Cause(cause); + idx := idx + 1; + } + + if (not istemplatekind(pdp_info_compl, "omit")) { + ies[idx] := tr_GSUP_IE_PdpInfoCompl; + idx := idx + 1; + } + + if (not istemplatekind(pdp_info, "omit")) { + ies[idx] := tr_GSUP_IE_PdpInfo_ie(pdp_info); + idx := idx + 1; + } + + if (not istemplatekind(imei_result, "omit")) { ies[idx] := tr_GSUP_IE_IMEI_Result(imei_result); idx := idx + 1; }
- if (isvalue(message_class)) { + if (not istemplatekind(message_class, "omit")) { ies[idx] := tr_GSUP_IE_Message_Class(message_class); idx := idx + 1; }
- if (isvalue(source_name)) { + if (not istemplatekind(source_name, "omit")) { ies[idx] := tr_GSUP_IE_Source_Name(source_name); idx := idx + 1; } @@ -1151,8 +1232,12 @@ ies[idx] := *; idx := idx + 1;
- if (isvalue(destination_name)) { - ies[idx] := tr_GSUP_IE_Destination_Name(destination_name); + if (not istemplatekind(destination_name, "omit")) { + if (istemplatekind(destination_name, "*")) { + ies[idx] := *; + } else { + ies[idx] := tr_GSUP_IE_Destination_Name(destination_name); + } idx := idx + 1; }