pespin has uploaded this change for review. ( 
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(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/34/37634/1

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 33d1f33..1dae0a0 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*/
@@ -892,7 +892,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));
@@ -995,7 +997,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 https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37634?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib071fa97a354cb27263cd46dba8f468b4ddc0018
Gerrit-Change-Number: 37634
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to