pespin submitted this change.
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(-)
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)) {
To view, visit change 37634. To unsubscribe, or for help writing mail filters, visit settings.