pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37634?usp=email )
Change subject: Improve use of enumareted type GTP_Clause ......................................................................
Improve use of enumareted type GTP_Clause
Change-Id: Ib071fa97a354cb27263cd46dba8f468b4ddc0018 --- M library/GTPv1C_Templates.ttcn M sgsn/BSSGP_ConnHdlr.ttcn M sgsn/SGSN_Tests.ttcn 3 files changed, 46 insertions(+), 22 deletions(-)
Approvals: fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/library/GTPv1C_Templates.ttcn b/library/GTPv1C_Templates.ttcn index fe0db2b..a632b47 100644 --- a/library/GTPv1C_Templates.ttcn +++ b/library/GTPv1C_Templates.ttcn @@ -68,13 +68,18 @@ GTP_CAUSE_MS_IS_NOT_GPRS_RESPONDING (5), /* reserved */ GTP_CAUSE_REQUEST_ACCEPTED (128), - GTP_CAUSE_INVALID_MSG_FORMAT (193) + GTP_CAUSE_INVALID_MSG_FORMAT (193), + GTP_CAUSE_NO_RESOURCES_AVAILABLE (199) /* FIXME */ - }; + } with { encode "RAW" + variant "FIELDLENGTH(8)"; };
+ private function f_GTP_Cause_2_OCT1(template (value) GTP_Cause cause) return OCT1 { + return int2oct(enum2int(valueof(cause)), 1); + } template (value) Cause_gtpc ts_Cause_gtpc(template (value) GTP_Cause cause) := { type_gtpc := '01'O, - causevalue := enum2oct1_Cause_gtpc_tmpl(cause) + causevalue := f_GTP_Cause_2_OCT1(cause) } private function enum2oct1_Cause_gtpc_tmpl(template GTP_Cause inp) return template OCT1 { @@ -85,7 +90,7 @@ } else if (istemplatekind(inp, "?")) { return ?; } else { - return int2oct(enum2int(valueof(inp)), 1); + return f_GTP_Cause_2_OCT1(inp); } } template (present) Cause_gtpc tr_Cause_gtpc(template (present) GTP_Cause cause) := { @@ -937,13 +942,14 @@ spare := '0000000'B }
- template (value) GTPC_PDUs ts_CreatePdpRespPDU(OCT1 cause, OCT4 teid_data, OCT4 teid_ctrl, BIT4 nsapi, + template (value) GTPC_PDUs ts_CreatePdpRespPDU(template (value) GTP_Cause cause, + OCT4 teid_data, OCT4 teid_ctrl, BIT4 nsapi, octetstring ggsn_ip_sign, octetstring ggsn_ip_data, OCT4 chg_id, template (omit) EndUserAddress eua := omit, template (omit) Recovery_gtpc recovery := omit, template (omit) ProtConfigOptions pco := omit) := { createPDPContextResponse := { - cause := { '00'O, cause }, + cause := ts_Cause_gtpc(cause), reorderingRequired := ts_ReorderReq(false), recovery := recovery, teidDataI := { @@ -980,7 +986,7 @@ }
template (value) Gtp1cUnitdata ts_GTPC_CreatePdpResp(Gtp1cPeer peer, uint16_t seq, OCT4 teid, - OCT1 cause, + template (value) GTP_Cause cause, OCT4 teid_ctrl, OCT4 teid_data, BIT4 nsapi, octetstring ggsn_ip_sign, octetstring ggsn_ip_data, OCT4 chg_id, @@ -994,7 +1000,8 @@ eua, recovery, pco)), seq) }
- template (value) GTPC_PDUs ts_UpdatePdpRespGGSNPDU(OCT1 cause, OCT4 teid_data, OCT4 teid_ctrl, + template (value) GTPC_PDUs ts_UpdatePdpRespGGSNPDU(template (value) GTP_Cause cause, + OCT4 teid_data, OCT4 teid_ctrl, octetstring ggsn_ip_sign, octetstring ggsn_ip_data, OCT4 chg_id, template (omit) EndUserAddress eua := omit, template (omit) Recovery_gtpc recovery := omit, @@ -1002,7 +1009,7 @@ updatePDPContextResponse := { updatePDPContextResponseGGSN := {
- cause := { '00'O, cause }, + cause := ts_Cause_gtpc(cause), recovery := recovery, teidDataI := { type_gtpc := '00'O, @@ -1035,7 +1042,7 @@ }
template (value) Gtp1cUnitdata ts_GTPC_UpdatePdpRespGGSN(Gtp1cPeer peer, uint16_t seq, OCT4 teid, - OCT1 cause, + template (value) GTP_Cause cause, OCT4 teid_ctrl, OCT4 teid_data, octetstring ggsn_ip_sign, octetstring ggsn_ip_data, OCT4 chg_id, @@ -1245,10 +1252,10 @@ valueof(ts_DeletePdpPDU(nsapi, teardown_ind)), seq) }
- template (value) GTPC_PDUs ts_DeletePdpRespPDU(OCT1 cause, + template (value) GTPC_PDUs ts_DeletePdpRespPDU(template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED, template (omit) ProtConfigOptions pco := omit) := { deletePDPContextResponse := { - cause := { '00'O, cause }, + cause := ts_Cause_gtpc(cause), protConfigOptions := pco, userLocationInformation := omit, mS_TimeZone := omit, @@ -1258,7 +1265,7 @@ }
template (value) Gtp1cUnitdata ts_GTPC_DeletePdpResp(Gtp1cPeer peer, uint16_t seq, OCT4 teid, - OCT1 cause, + template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED, template (omit) ProtConfigOptions pco := omit) := { peer := peer, gtpc := ts_GTP1C_PDU(deletePDPContextResponse, teid, diff --git a/sgsn/BSSGP_ConnHdlr.ttcn b/sgsn/BSSGP_ConnHdlr.ttcn index de864b3..98e0e0e 100644 --- a/sgsn/BSSGP_ConnHdlr.ttcn +++ b/sgsn/BSSGP_ConnHdlr.ttcn @@ -699,7 +699,7 @@ octetstring apn optional, /* APN name */ ProtocolConfigOptionsV pco optional, /* protoco config opts */ OCT1 exp_rej_cause optional, /* expected SM reject cause */ - OCT1 gtp_resp_cause, /* GTP response cause */ + GTP_Cause gtp_resp_cause, /* GTP response cause */ OCT4 chg_id, /* GTP Charging Identifier */
OCT4 ggsn_tei_c, /* GGSN TEI Control*/ @@ -891,7 +891,9 @@ if (is_gb(ran_index)) { BSSGP[ran_index].clear; } - GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, apars.sgsn_tei_c, '7F'O)); + GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, + apars.sgsn_tei_c, + GTP_CAUSE_REQUEST_ACCEPTED)); } alt { [is_gb(ran_index)] BSSGP[ran_index].receive(tr_SM_DEACT_PDP_ACCEPT_MT(apars.tid)); @@ -994,7 +996,7 @@ apn := omit, pco := omit, exp_rej_cause := omit, - gtp_resp_cause := int2oct(128, 1), + gtp_resp_cause := GTP_CAUSE_REQUEST_ACCEPTED, chg_id := f_rnd_octstring(4),
/* FIXME: make below dynamic !! */ diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn index 92f081d..fe4b086 100644 --- a/sgsn/SGSN_Tests.ttcn +++ b/sgsn/SGSN_Tests.ttcn @@ -1071,7 +1071,7 @@ private function f_TC_attach_pdp_act_ggsn_reject(charstring id) runs on BSSGP_ConnHdlr { var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
- apars.gtp_resp_cause := int2oct(199, 1); /* no resources available */ + apars.gtp_resp_cause := GTP_CAUSE_NO_RESOURCES_AVAILABLE; apars.exp_rej_cause := '1a'O; /* insufficient resources */
/* first perform regular attach */ @@ -1149,7 +1149,9 @@ GTP[GTP_GGSN_IDX].receive(tr_GTPC_MsgType(?, deletePDPContextRequest, apars.ggsn_tei_c)) -> value g_ud { var integer seq_nr := oct2int(g_ud.gtpc.opt_part.sequenceNumber); log("Received deletePDPContextResponse " & int2str(i) & ", seq_nr=" & int2str(seq_nr)); - GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, apars.sgsn_tei_c, '7F'O)); + GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, + apars.sgsn_tei_c, + GTP_CAUSE_REQUEST_ACCEPTED)); } }
@@ -1233,7 +1235,9 @@ /* SGSN currently doesn't send this message because it expects GGSN to be non-reachable anyway */ seq_nr := oct2int(g_ud.gtpc.opt_part.sequenceNumber); log("Received deletePDPContextRequest seq_nr=" & int2str(seq_nr)); - GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, apars.sgsn_tei_c, '7F'O)); + GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, + apars.sgsn_tei_c, + GTP_CAUSE_REQUEST_ACCEPTED)); repeat; } [] GTP[GTP_GGSN_IDX].receive(tr_GTPC_MsgType(?, echoRequest, ?)) -> value g_ud { @@ -1312,7 +1316,7 @@ f_TC_attach(id);
/* Use this CTX ACT to send initial Restart counter to SGSN. */ - apars.gtp_resp_cause := int2oct(199, 1); /* no resources available */ + apars.gtp_resp_cause := GTP_CAUSE_NO_RESOURCES_AVAILABLE; apars.exp_rej_cause := '1a'O; /* insufficient resources */ f_pdp_ctx_act(apars, true);
@@ -1329,7 +1333,7 @@ IE. This should trigger the recovery path, but still this specific CTX activation should work. */ apars.exp_rej_cause := omit; /* default value for tests */ - apars.gtp_resp_cause := int2oct(128, 1); /* default value for tests */ + apars.gtp_resp_cause := GTP_CAUSE_REQUEST_ACCEPTED; /* default value for tests */ f_pdp_ctx_act(apars, true);
setverdict(pass); @@ -1420,7 +1424,9 @@ } var integer seq_nr := oct2int(g_ud_second.gtpc.opt_part.sequenceNumber); BSSGP[0].clear; - GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud_second.peer, seq_nr, apars.sgsn_tei_c, '7F'O)); + GTP[GTP_GGSN_IDX].send(ts_GTPC_DeletePdpResp(g_ud_second.peer, seq_nr, + apars.sgsn_tei_c, + GTP_CAUSE_REQUEST_ACCEPTED)); } alt { [] BSSGP[0].receive(tr_SM_DEACT_PDP_ACCEPT_MT(apars.tid)) {