2017-12-28 21:51:51 +00:00
|
|
|
module GSUP_Types {
|
|
|
|
|
2018-01-03 20:07:52 +00:00
|
|
|
/* GSUP_Types, defining abstract TTCN-3 data types for the GSUP protocol.
|
|
|
|
*
|
|
|
|
* GSUP is a non-standard protocol used between OsmoMSC/OsmoSGSN and OsmoHLR
|
|
|
|
* in order to replace the complex TCAP/MAP protocol.
|
|
|
|
*
|
2019-05-27 09:54:11 +00:00
|
|
|
* (C) 2017-2019 by Harald Welte <laforge@gnumonks.org>
|
|
|
|
* contributions by sysmocom - s.f.m.c. GmbH
|
2018-01-03 20:07:52 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
|
|
* (at your option) any later version.
|
2019-05-27 09:54:11 +00:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
2018-01-03 20:07:52 +00:00
|
|
|
*/
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
import from General_Types all;
|
|
|
|
import from Osmocom_Types all;
|
|
|
|
|
|
|
|
type enumerated GSUP_IEI {
|
|
|
|
OSMO_GSUP_IMSI_IE ('01'O),
|
|
|
|
OSMO_GSUP_CAUSE_IE ('02'O),
|
|
|
|
OSMO_GSUP_AUTH_TUPLE_IE ('03'O),
|
|
|
|
OSMO_GSUP_PDP_INFO_COMPL_IE ('04'O),
|
|
|
|
OSMO_GSUP_PDP_INFO_IE ('05'O),
|
|
|
|
OSMO_GSUP_CANCEL_TYPE_IE ('06'O),
|
|
|
|
OSMO_GSUP_FREEZE_PTMSI_IE ('07'O),
|
|
|
|
OSMO_GSUP_MSISDN_IE ('08'O),
|
|
|
|
OSMO_GSUP_HLR_NUMBER_IE ('09'O),
|
|
|
|
OSMO_GSUP_PDP_CONTEXT_ID_IE ('10'O),
|
|
|
|
OSMO_GSUP_PDP_TYPE_IE ('11'O),
|
|
|
|
OSMO_GSUP_ACCESS_POINT_NAME_IE ('12'O),
|
|
|
|
OSMO_GSUP_PDP_QOS_IE ('13'O),
|
|
|
|
OSMO_GSUP_CHARG_CHAR_IE ('14'O),
|
|
|
|
|
|
|
|
OSMO_GSUP_RAND_IE ('20'O),
|
|
|
|
OSMO_GSUP_SRES_IE ('21'O),
|
|
|
|
OSMO_GSUP_KC_IE ('22'O),
|
|
|
|
OSMO_GSUP_IK_IE ('23'O),
|
|
|
|
OSMO_GSUP_CK_IE ('24'O),
|
|
|
|
OSMO_GSUP_AUTN_IE ('25'O),
|
|
|
|
OSMO_GSUP_AUTS_IE ('26'O),
|
|
|
|
OSMO_GSUP_RES_IE ('27'O),
|
2018-06-02 14:05:04 +00:00
|
|
|
OSMO_GSUP_CN_DOMAIN_IE ('28'O),
|
|
|
|
|
|
|
|
OSMO_GSUP_SESSION_ID_IE ('30'O),
|
|
|
|
OSMO_GSUP_SESSION_STATE_IE ('31'O),
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
OSMO_GSUP_SS_INFO_IE ('35'O),
|
|
|
|
|
|
|
|
/* SM related IEs (see 3GPP TS 29.002, section 7.6.8) */
|
|
|
|
OSMO_GSUP_SM_RP_MR_IE ('40'O),
|
|
|
|
OSMO_GSUP_SM_RP_DA_IE ('41'O),
|
|
|
|
OSMO_GSUP_SM_RP_OA_IE ('42'O),
|
|
|
|
OSMO_GSUP_SM_RP_UI_IE ('43'O),
|
|
|
|
OSMO_GSUP_SM_RP_CAUSE_IE ('44'O),
|
2018-11-12 20:04:02 +00:00
|
|
|
OSMO_GSUP_SM_RP_MMS_IE ('45'O),
|
2019-02-22 14:02:48 +00:00
|
|
|
OSMO_GSUP_SM_ALERT_RSN_IE ('46'O),
|
|
|
|
|
|
|
|
OSMO_GSUP_IMEI_IE ('50'O),
|
2019-05-06 23:20:17 +00:00
|
|
|
OSMO_GSUP_IMEI_RESULT_IE ('51'O),
|
|
|
|
|
|
|
|
OSMO_GSUP_MESSAGE_CLASS_IE ('0a'O),
|
|
|
|
|
|
|
|
OSMO_GSUP_SOURCE_NAME_IE ('60'O),
|
|
|
|
OSMO_GSUP_DESTINATION_NAME_IE ('61'O),
|
|
|
|
OSMO_GSUP_AN_APDU_IE ('62'O),
|
|
|
|
OSMO_GSUP_CAUSE_RR_IE ('63'O),
|
|
|
|
OSMO_GSUP_CAUSE_BSSAP_IE ('64'O),
|
|
|
|
OSMO_GSUP_CAUSE_SM_IE ('65'O)
|
2017-12-28 21:51:51 +00:00
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
|
|
|
type enumerated GSUP_MessageType {
|
|
|
|
OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST ('00000100'B),
|
|
|
|
OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR ('00000101'B),
|
|
|
|
OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT ('00000110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST ('00001000'B),
|
|
|
|
OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR ('00001001'B),
|
|
|
|
OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT ('00001010'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_AUTH_FAIL_REPORT ('00001011'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_PURGE_MS_REQUEST ('00001100'B),
|
|
|
|
OSMO_GSUP_MSGT_PURGE_MS_ERROR ('00001101'B),
|
|
|
|
OSMO_GSUP_MSGT_PURGE_MS_RESULT ('00001110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_INSERT_DATA_REQUEST ('00010000'B),
|
|
|
|
OSMO_GSUP_MSGT_INSERT_DATA_ERROR ('00010001'B),
|
|
|
|
OSMO_GSUP_MSGT_INSERT_DATA_RESULT ('00010010'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_DELETE_DATA_REQUEST ('00010100'B),
|
|
|
|
OSMO_GSUP_MSGT_DELETE_DATA_ERROR ('00010101'B),
|
|
|
|
OSMO_GSUP_MSGT_DELETE_DATA_RESULT ('00010110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST ('00011100'B),
|
|
|
|
OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR ('00011101'B),
|
2018-06-02 14:05:04 +00:00
|
|
|
OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT ('00011110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_REQUEST ('00100000'B),
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_ERROR ('00100001'B),
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
OSMO_GSUP_MSGT_PROC_SS_RESULT ('00100010'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST ('00100100'B),
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR ('00100101'B),
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT ('00100110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST ('00101000'B),
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR ('00101001'B),
|
2018-11-12 20:04:02 +00:00
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT ('00101010'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST ('00101100'B),
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_ERROR ('00101101'B),
|
2019-02-22 14:02:48 +00:00
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_RESULT ('00101110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST ('00110000'B),
|
|
|
|
OSMO_GSUP_MSGT_CHECK_IMEI_ERROR ('00110001'B),
|
2019-05-06 23:20:17 +00:00
|
|
|
OSMO_GSUP_MSGT_CHECK_IMEI_RESULT ('00110010'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_REQUEST ('00110100'B),
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_ERROR ('00110101'B),
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_RESULT ('00110110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_SUBSEQUENT_HANDOVER_REQUEST ('00111000'B),
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_SUBSEQUENT_HANDOVER_ERROR ('00111001'B),
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_SUBSEQUENT_HANDOVER_RESULT ('00111010'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_E_SEND_END_SIGNAL_REQUEST ('00111100'B),
|
|
|
|
OSMO_GSUP_MSGT_E_SEND_END_SIGNAL_ERROR ('00111101'B),
|
|
|
|
OSMO_GSUP_MSGT_E_SEND_END_SIGNAL_RESULT ('00111110'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_E_PROCESS_ACCESS_SIGNALLING_REQUEST ('01000000'B),
|
|
|
|
OSMO_GSUP_MSGT_E_FORWARD_ACCESS_SIGNALLING_REQUEST ('01000100'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_E_CLOSE ('01000111'B),
|
|
|
|
OSMO_GSUP_MSGT_E_ABORT ('01001011'B),
|
|
|
|
|
|
|
|
OSMO_GSUP_MSGT_E_ROUTING_ERROR ('01001110'B)
|
2017-12-28 21:51:51 +00:00
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
|
|
|
type enumerated GSUP_CancelType {
|
2018-09-16 01:33:30 +00:00
|
|
|
OSMO_GSUP_CANCEL_TYPE_UPDATE (0),
|
|
|
|
OSMO_GSUP_CANCEL_TYPE_WITHDRAW (1)
|
2017-12-28 21:51:51 +00:00
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
|
|
|
type enumerated GSUP_CnDomain {
|
|
|
|
OSMO_GSUP_CN_DOMAIN_PS (1),
|
|
|
|
OSMO_GSUP_CN_DOMAIN_CS (2)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
2019-02-22 14:02:48 +00:00
|
|
|
type enumerated GSUP_IMEIResult {
|
|
|
|
OSMO_GSUP_IMEI_RESULT_ACK (0),
|
|
|
|
OSMO_GSUP_IMEI_RESULT_NACK (1)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
2018-06-02 14:05:04 +00:00
|
|
|
type enumerated GSUP_SessionState {
|
|
|
|
OSMO_GSUP_SESSION_STATE_NONE (0),
|
|
|
|
OSMO_GSUP_SESSION_STATE_BEGIN (1),
|
|
|
|
OSMO_GSUP_SESSION_STATE_CONTINUE (2),
|
|
|
|
OSMO_GSUP_SESSION_STATE_END (3)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
2019-05-06 23:20:17 +00:00
|
|
|
type enumerated GSUP_Message_Class {
|
|
|
|
OSMO_GSUP_MESSAGE_CLASS_UNSET (0),
|
|
|
|
OSMO_GSUP_MESSAGE_CLASS_SUBSCRIBER_MANAGEMENT (1),
|
|
|
|
OSMO_GSUP_MESSAGE_CLASS_SMS (2),
|
|
|
|
OSMO_GSUP_MESSAGE_CLASS_USSD (3),
|
|
|
|
OSMO_GSUP_MESSAGE_CLASS_INTER_MSC (4)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
2018-01-26 23:48:13 +00:00
|
|
|
type record GSUP_MSISDN {
|
|
|
|
uint8_t len,
|
|
|
|
hexstring digits optional
|
|
|
|
} with { variant (len) "LENGTHTO(digits)" };
|
|
|
|
|
2019-02-22 14:02:48 +00:00
|
|
|
type record GSUP_IMEI {
|
|
|
|
uint8_t len,
|
|
|
|
hexstring digits optional
|
|
|
|
} with { variant (len) "LENGTHTO(digits)" };
|
|
|
|
|
2019-05-06 23:20:17 +00:00
|
|
|
type enumerated GSUP_AN_PROTO {
|
|
|
|
OSMO_GSUP_AN_PROTO_48006 (1),
|
|
|
|
OSMO_GSUP_AN_PROTO_25413 (2)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
|
|
|
type record GSUP_AN_APDU {
|
|
|
|
GSUP_AN_PROTO proto,
|
|
|
|
octetstring pdu
|
|
|
|
};
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
type record GSUP_IE {
|
|
|
|
GSUP_IEI tag,
|
|
|
|
uint8_t len,
|
|
|
|
GSUP_IeValue val
|
|
|
|
} with { variant (len) "LENGTHTO(val)"
|
|
|
|
variant (val) "CROSSTAG(imsi, tag = OSMO_GSUP_IMSI_IE;
|
|
|
|
cause, tag = OSMO_GSUP_CAUSE_IE;
|
|
|
|
cancel_type, tag = OSMO_GSUP_CANCEL_TYPE_IE;
|
2018-01-22 20:22:32 +00:00
|
|
|
auth_tuple, tag = OSMO_GSUP_AUTH_TUPLE_IE;
|
2017-12-28 21:51:51 +00:00
|
|
|
auts, tag = OSMO_GSUP_AUTS_IE;
|
|
|
|
rand, tag = OSMO_GSUP_RAND_IE;
|
2018-01-22 20:22:32 +00:00
|
|
|
sres, tag = OSMO_GSUP_SRES_IE;
|
|
|
|
kc, tag = OSMO_GSUP_KC_IE;
|
|
|
|
ik, tag = OSMO_GSUP_IK_IE;
|
|
|
|
ck, tag = OSMO_GSUP_CK_IE;
|
|
|
|
autn, tag = OSMO_GSUP_AUTN_IE;
|
|
|
|
res, tag = OSMO_GSUP_RES_IE;
|
2017-12-28 21:51:51 +00:00
|
|
|
msisdn, tag = OSMO_GSUP_MSISDN_IE;
|
|
|
|
hlr_number, tag = OSMO_GSUP_HLR_NUMBER_IE;
|
|
|
|
cn_domain, tag = OSMO_GSUP_CN_DOMAIN_IE;
|
2018-02-17 19:57:34 +00:00
|
|
|
pdp_info, tag = OSMO_GSUP_PDP_INFO_IE;
|
|
|
|
apn, tag = OSMO_GSUP_ACCESS_POINT_NAME_IE;
|
|
|
|
pdp_qos, tag = OSMO_GSUP_PDP_QOS_IE;
|
|
|
|
pdp_type, tag = OSMO_GSUP_PDP_TYPE_IE;
|
|
|
|
charg_char, tag = OSMO_GSUP_CHARG_CHAR_IE;
|
2018-06-02 14:05:04 +00:00
|
|
|
session_state, tag = OSMO_GSUP_SESSION_STATE_IE;
|
|
|
|
session_id, tag = OSMO_GSUP_SESSION_ID_IE;
|
|
|
|
ss_info, tag = OSMO_GSUP_SS_INFO_IE;
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
sm_rp_mr, tag = OSMO_GSUP_SM_RP_MR_IE;
|
|
|
|
sm_rp_da, tag = OSMO_GSUP_SM_RP_DA_IE;
|
|
|
|
sm_rp_oa, tag = OSMO_GSUP_SM_RP_OA_IE;
|
|
|
|
sm_rp_ui, tag = OSMO_GSUP_SM_RP_UI_IE;
|
|
|
|
sm_rp_cause, tag = OSMO_GSUP_SM_RP_CAUSE_IE;
|
|
|
|
sm_rp_mms, tag = OSMO_GSUP_SM_RP_MMS_IE;
|
2018-11-12 20:04:02 +00:00
|
|
|
sm_alert_rsn, tag = OSMO_GSUP_SM_ALERT_RSN_IE;
|
2019-02-22 14:02:48 +00:00
|
|
|
imei, tag = OSMO_GSUP_IMEI_IE;
|
|
|
|
imei_result, tag = OSMO_GSUP_IMEI_RESULT_IE;
|
2019-05-06 23:20:17 +00:00
|
|
|
message_class, tag = OSMO_GSUP_MESSAGE_CLASS_IE;
|
|
|
|
source_name, tag = OSMO_GSUP_SOURCE_NAME_IE;
|
|
|
|
destination_name, tag = OSMO_GSUP_DESTINATION_NAME_IE;
|
|
|
|
an_apdu, tag = OSMO_GSUP_AN_APDU_IE;
|
|
|
|
cause_rr, tag = OSMO_GSUP_CAUSE_RR_IE;
|
|
|
|
cause_bssap, tag = OSMO_GSUP_CAUSE_BSSAP_IE;
|
|
|
|
cause_sm, tag = OSMO_GSUP_CAUSE_SM_IE;
|
2018-02-17 19:57:34 +00:00
|
|
|
)"
|
2017-12-28 21:51:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
type record of GSUP_IE GSUP_IEs;
|
|
|
|
|
|
|
|
type union GSUP_IeValue {
|
|
|
|
hexstring imsi,
|
|
|
|
integer cause,
|
|
|
|
GSUP_CancelType cancel_type,
|
|
|
|
//boolean pdp_info_compl,
|
|
|
|
//boolean freeze_ptmsi,
|
|
|
|
GSUP_IEs auth_tuple,
|
|
|
|
octetstring auts,
|
|
|
|
octetstring rand,
|
2018-01-22 20:22:32 +00:00
|
|
|
octetstring sres,
|
|
|
|
octetstring kc,
|
|
|
|
octetstring ik,
|
|
|
|
octetstring ck,
|
|
|
|
octetstring autn,
|
|
|
|
octetstring res,
|
2018-01-26 23:48:13 +00:00
|
|
|
GSUP_MSISDN msisdn,
|
2017-12-28 21:51:51 +00:00
|
|
|
octetstring hlr_number,
|
|
|
|
GSUP_CnDomain cn_domain,
|
2018-02-17 19:57:34 +00:00
|
|
|
/* PDP context + nested IEs */
|
|
|
|
GSUP_IEs pdp_info,
|
|
|
|
octetstring apn,
|
|
|
|
octetstring pdp_qos,
|
|
|
|
OCT2 pdp_type,
|
2018-06-02 14:05:04 +00:00
|
|
|
octetstring charg_char,
|
|
|
|
/* Session information */
|
|
|
|
GSUP_SessionState session_state,
|
|
|
|
OCT4 session_id,
|
|
|
|
/* Supplementary Services */
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
octetstring ss_info,
|
|
|
|
/* Short Message Service */
|
|
|
|
OCT1 sm_rp_mr,
|
|
|
|
GSUP_SM_RP_DA sm_rp_da,
|
|
|
|
GSUP_SM_RP_OA sm_rp_oa,
|
|
|
|
octetstring sm_rp_ui,
|
|
|
|
OCT1 sm_rp_cause,
|
2018-11-12 20:04:02 +00:00
|
|
|
OCT1 sm_rp_mms,
|
2019-02-22 14:02:48 +00:00
|
|
|
GSUP_SM_ALERT_RSN_Type sm_alert_rsn,
|
|
|
|
|
|
|
|
GSUP_IMEI imei,
|
2019-05-06 23:20:17 +00:00
|
|
|
GSUP_IMEIResult imei_result,
|
|
|
|
|
|
|
|
GSUP_Message_Class message_class,
|
|
|
|
|
|
|
|
octetstring source_name,
|
|
|
|
octetstring destination_name,
|
|
|
|
|
|
|
|
GSUP_AN_APDU an_apdu,
|
|
|
|
|
|
|
|
OCT1 cause_rr,
|
|
|
|
OCT1 cause_bssap,
|
|
|
|
OCT1 cause_sm
|
2017-12-28 21:51:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
type record GSUP_PDU {
|
|
|
|
GSUP_MessageType msg_type,
|
|
|
|
GSUP_IEs ies
|
|
|
|
};
|
|
|
|
|
|
|
|
external function enc_GSUP_PDU(in GSUP_PDU msg) return octetstring
|
|
|
|
with { extension "prototype(convert) encode(RAW)" };
|
|
|
|
|
|
|
|
external function dec_GSUP_PDU(in octetstring msg) return GSUP_PDU
|
|
|
|
with { extension "prototype(convert) decode(RAW)" };
|
|
|
|
|
2018-01-24 19:52:38 +00:00
|
|
|
function f_gsup_postprocess_decoded(inout GSUP_PDU gsup) {
|
|
|
|
if (gsup.ies[0].tag == OSMO_GSUP_IMSI_IE) {
|
|
|
|
/* if last digit is 'F', then there's an odd number of digits and we must strip the F */
|
|
|
|
var integer num_digits := lengthof(gsup.ies[0].val.imsi);
|
|
|
|
if (gsup.ies[0].val.imsi[num_digits-1] == 'F'H) {
|
|
|
|
gsup.ies[0].val.imsi := substr(gsup.ies[0].val.imsi, 0, num_digits-1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function f_gsup_preprocess_encoded(inout GSUP_PDU gsup) {
|
|
|
|
if (ischosen(gsup.ies[0].val.imsi)) {
|
|
|
|
/* if number of digits is odd, add a 'F' as padding at the end */
|
|
|
|
var integer num_digits := lengthof(gsup.ies[0].val.imsi);
|
|
|
|
if (num_digits rem 2 == 1) {
|
|
|
|
gsup.ies[0].val.imsi := gsup.ies[0].val.imsi & 'F'H;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-26 23:48:13 +00:00
|
|
|
template (value) GSUP_MSISDN ts_GSUP_MSISDN(hexstring digits,
|
|
|
|
BIT3 ton := '000'B,
|
|
|
|
BIT4 npi := '0000'B) := {
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
/* numberingPlanIdentification := npi,
|
|
|
|
typeOfNumber := ton,
|
|
|
|
ext1 := '0'B, */
|
|
|
|
digits := digits
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_MSISDN tr_GSUP_MSISDN(template hexstring digits,
|
|
|
|
template BIT3 ton := ?,
|
|
|
|
template BIT4 npi := ?) := {
|
|
|
|
len := ?,
|
|
|
|
/* numberingPlanIdentification := npi,
|
|
|
|
typeOfNumber := ton,
|
|
|
|
ext1 := '0'B, */
|
|
|
|
digits := digits
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
|
2018-01-22 20:22:32 +00:00
|
|
|
template GSUP_IE ts_GSUP_IE_AuthTuple2G(octetstring rand, octetstring sres,
|
|
|
|
octetstring kc) := {
|
|
|
|
tag := OSMO_GSUP_AUTH_TUPLE_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
auth_tuple := {
|
|
|
|
valueof(ts_GSUP_IE_RAND(rand)),
|
|
|
|
valueof(ts_GSUP_IE_SRES(sres)),
|
|
|
|
valueof(ts_GSUP_IE_Kc(kc))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE ts_GSUP_IE_AuthTuple2G3G(octetstring rand, octetstring sres,
|
|
|
|
octetstring kc, octetstring ik,
|
|
|
|
octetstring ck, octetstring autn,
|
|
|
|
octetstring res) := {
|
|
|
|
tag := OSMO_GSUP_AUTH_TUPLE_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
auth_tuple := {
|
|
|
|
valueof(ts_GSUP_IE_RAND(rand)),
|
|
|
|
valueof(ts_GSUP_IE_SRES(sres)),
|
|
|
|
valueof(ts_GSUP_IE_Kc(kc)),
|
|
|
|
valueof(ts_GSUP_IE_IK(ik)),
|
|
|
|
valueof(ts_GSUP_IE_CK(ck)),
|
|
|
|
valueof(ts_GSUP_IE_AUTN(autn)),
|
|
|
|
valueof(ts_GSUP_IE_RES(res))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-17 19:57:34 +00:00
|
|
|
template GSUP_IE ts_GSUP_IE_PdpInfo(octetstring apn, octetstring pdp_type, octetstring pdp_qos) := {
|
|
|
|
tag := OSMO_GSUP_PDP_INFO_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
pdp_info := {
|
|
|
|
valueof(ts_GSUP_IE_APN(apn)),
|
|
|
|
valueof(ts_GSUP_IE_PDP_TYPE(pdp_type)),
|
|
|
|
valueof(ts_GSUP_IE_PDP_QOS(pdp_qos))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_PDP_TYPE(OCT2 pdp_type) := {
|
|
|
|
tag := OSMO_GSUP_PDP_TYPE_IE,
|
|
|
|
len := 0,
|
|
|
|
val := {
|
|
|
|
pdp_type := pdp_type
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_PDP_QOS(octetstring pdp_qos) := {
|
|
|
|
tag := OSMO_GSUP_PDP_QOS_IE,
|
|
|
|
len := 0,
|
|
|
|
val := {
|
|
|
|
pdp_qos := pdp_qos
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template GSUP_IEs ies := *) := {
|
|
|
|
msg_type := msgt,
|
|
|
|
ies := ies
|
|
|
|
}
|
|
|
|
|
2018-01-27 14:38:18 +00:00
|
|
|
template GSUP_PDU tr_GSUP_IMSI(template GSUP_MessageType msgt := ?, template hexstring imsi) := {
|
|
|
|
msg_type := msgt,
|
|
|
|
ies := { tr_GSUP_IE_IMSI(imsi), * }
|
|
|
|
}
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template GSUP_PDU ts_GSUP(GSUP_MessageType msgt, GSUP_IEs ies := {}) := {
|
|
|
|
msg_type := msgt,
|
|
|
|
ies := ies
|
|
|
|
}
|
|
|
|
|
2019-06-04 13:54:17 +00:00
|
|
|
template (value) GSUP_IMEI ts_GSUP_IMEI(hexstring digits) := {
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
digits := digits
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IMEI tr_GSUP_IMEI(template hexstring digits) := {
|
|
|
|
len := ?,
|
|
|
|
digits := digits
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-27 14:35:19 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_SAI_REQ(hexstring imsi) :=
|
2017-12-28 21:51:51 +00:00
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { valueof(ts_GSUP_IE_IMSI(imsi)) });
|
|
|
|
|
2018-01-22 02:00:17 +00:00
|
|
|
template GSUP_PDU tr_GSUP_SAI_REQ(template hexstring imsi) :=
|
2018-01-27 14:38:18 +00:00
|
|
|
tr_GSUP_IMSI(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, imsi);
|
2018-01-22 02:00:17 +00:00
|
|
|
|
2018-09-04 14:10:14 +00:00
|
|
|
template GSUP_PDU tr_GSUP_SAI_REQ_UMTS_AKA_RESYNC(
|
|
|
|
template hexstring imsi,
|
|
|
|
template octetstring auts,
|
|
|
|
template octetstring rand) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_AUTS(auts),
|
|
|
|
tr_GSUP_IE_RAND(rand),
|
|
|
|
*
|
|
|
|
});
|
|
|
|
|
2018-01-22 20:22:32 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_SAI_RES(hexstring imsi, GSUP_IE auth_tuple) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), auth_tuple });
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer cause) :=
|
2018-01-23 18:53:52 +00:00
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
|
2017-12-28 21:51:51 +00:00
|
|
|
tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
|
|
|
|
|
2018-01-27 14:35:19 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_SAI_ERR(hexstring imsi, integer cause) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
|
2018-01-23 18:53:52 +00:00
|
|
|
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template GSUP_PDU tr_GSUP_SAI_RES(template hexstring imsi) :=
|
2018-03-01 20:20:39 +00:00
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, {
|
2017-12-28 21:51:51 +00:00
|
|
|
tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE), * });
|
|
|
|
|
2018-03-01 20:20:39 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_UL_REQ(hexstring imsi) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)) });
|
|
|
|
|
2018-01-21 12:55:22 +00:00
|
|
|
template GSUP_PDU tr_GSUP_UL_REQ(template hexstring imsi) :=
|
2018-01-27 14:38:18 +00:00
|
|
|
tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, imsi);
|
2018-01-21 12:55:22 +00:00
|
|
|
|
2018-01-27 14:35:19 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_UL_RES(hexstring imsi) :=
|
2018-01-21 12:55:22 +00:00
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)) });
|
|
|
|
|
2018-03-01 20:20:39 +00:00
|
|
|
template GSUP_PDU tr_GSUP_UL_RES(template hexstring imsi) :=
|
|
|
|
tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, imsi);
|
|
|
|
|
2018-01-27 14:35:19 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_UL_ERR(hexstring imsi, integer cause) :=
|
2018-01-21 18:09:08 +00:00
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
|
|
|
|
|
2018-03-01 20:20:39 +00:00
|
|
|
template GSUP_PDU tr_GSUP_UL_ERR(template hexstring imsi, template integer cause := ?) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
|
|
|
|
|
2018-01-27 14:35:19 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_ISD_REQ(hexstring imsi, hexstring msisdn) :=
|
2018-01-21 18:09:08 +00:00
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_MSISDN(msisdn)) });
|
|
|
|
|
2018-03-01 20:20:39 +00:00
|
|
|
template GSUP_PDU tr_GSUP_ISD_REQ(template hexstring imsi, template hexstring msisdn := ?) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
|
2018-03-01 21:43:28 +00:00
|
|
|
tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_MSISDN(msisdn), * });
|
2018-03-01 20:20:39 +00:00
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_ISD_RES(hexstring imsi) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)) });
|
|
|
|
|
2018-01-21 18:09:08 +00:00
|
|
|
template GSUP_PDU tr_GSUP_ISD_RES(template hexstring imsi) :=
|
2018-01-27 14:38:18 +00:00
|
|
|
tr_GSUP_IMSI(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, imsi);
|
2017-12-28 21:51:51 +00:00
|
|
|
|
2018-01-24 21:00:36 +00:00
|
|
|
template GSUP_PDU tr_GSUP_AUTH_FAIL_IND(hexstring imsi) :=
|
2018-01-27 14:38:18 +00:00
|
|
|
tr_GSUP_IMSI(OSMO_GSUP_MSGT_AUTH_FAIL_REPORT, imsi);
|
2017-12-28 21:51:51 +00:00
|
|
|
|
2018-01-27 14:58:16 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_CL_REQ(hexstring imsi, GSUP_CancelType ctype) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CancelType(ctype)) });
|
|
|
|
|
|
|
|
template GSUP_PDU tr_GSUP_CL_RES(template hexstring imsi) :=
|
|
|
|
tr_GSUP_IMSI(OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT, imsi);
|
|
|
|
|
|
|
|
template GSUP_PDU tr_GSUP_CL_ERR(template hexstring imsi, template integer cause := ?) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR, {
|
2018-05-22 15:08:36 +00:00
|
|
|
tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause), * });
|
2018-01-27 14:58:16 +00:00
|
|
|
|
2018-03-01 22:40:17 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_PURGE_MS_REQ(hexstring imsi, GSUP_CnDomain dom) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CnDomain(dom)) });
|
|
|
|
|
2018-02-17 14:24:48 +00:00
|
|
|
template GSUP_PDU tr_GSUP_PURGE_MS_REQ(template hexstring imsi, template GSUP_CnDomain dom := ?) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_CnDomain(dom) });
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_PURGE_MS_RES(hexstring imsi) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)) });
|
|
|
|
|
2018-03-01 22:40:17 +00:00
|
|
|
template GSUP_PDU tr_GSUP_PURGE_MS_RES(template hexstring imsi) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi), * });
|
|
|
|
|
|
|
|
template GSUP_PDU tr_GSUP_PURGE_MS_ERR(template hexstring imsi, template integer cause) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_ERROR, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
|
|
|
|
|
2019-06-04 13:54:17 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_REQ(hexstring imsi, hexstring imei) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_IMEI(imei)) });
|
|
|
|
|
2019-07-03 08:57:35 +00:00
|
|
|
template GSUP_PDU tr_GSUP_CHECK_IMEI_REQ(
|
|
|
|
template hexstring imsi,
|
|
|
|
template hexstring imei
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_IMEI(imei),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SUBSCRIBER_MANAGEMENT)
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_RES(hexstring imsi, GSUP_IMEIResult result) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_IMEI_Result(result)) });
|
|
|
|
|
2019-06-04 13:54:17 +00:00
|
|
|
template GSUP_PDU tr_GSUP_CHECK_IMEI_RES(template hexstring imsi, template GSUP_IMEIResult result) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_IMEI_Result(result) });
|
|
|
|
|
2019-07-03 08:57:35 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_ERR(hexstring imsi, integer cause) :=
|
|
|
|
ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, {
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
|
|
|
|
|
2019-06-04 13:54:17 +00:00
|
|
|
template GSUP_PDU tr_GSUP_CHECK_IMEI_ERR(template hexstring imsi, template integer cause) :=
|
|
|
|
tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, {
|
|
|
|
tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
|
|
|
|
|
2018-01-27 14:58:16 +00:00
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_CancelType(GSUP_CancelType ctype) := {
|
|
|
|
tag := OSMO_GSUP_CANCEL_TYPE_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
cancel_type := ctype
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_CancelType(template GSUP_CancelType ctype) :=
|
|
|
|
tr_GSUP_IE(OSMO_GSUP_CANCEL_TYPE_IE, GSUP_IeValue:{cancel_type:=ctype});
|
|
|
|
|
2018-02-17 14:24:48 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE_CnDomain(template GSUP_CnDomain domain) :=
|
|
|
|
tr_GSUP_IE(OSMO_GSUP_CN_DOMAIN_IE, GSUP_IeValue:{cn_domain:=domain});
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val := ?) := {
|
|
|
|
tag := iei,
|
|
|
|
len := ?,
|
|
|
|
val := val
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
|
|
|
|
tag := OSMO_GSUP_IMSI_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
imsi := imsi
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_IMSI(template hexstring imsi) := {
|
|
|
|
tag := OSMO_GSUP_IMSI_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
imsi := imsi
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-21 18:09:08 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_MSISDN(hexstring msisdn) := {
|
|
|
|
tag := OSMO_GSUP_MSISDN_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
2018-01-26 23:48:13 +00:00
|
|
|
msisdn := ts_GSUP_MSISDN(msisdn)
|
2018-01-21 18:09:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_MSISDN(template hexstring msisdn) := {
|
|
|
|
tag := OSMO_GSUP_MSISDN_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
2018-01-26 23:48:13 +00:00
|
|
|
msisdn := tr_GSUP_MSISDN(msisdn)
|
2018-01-21 18:09:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
|
|
|
|
tag := OSMO_GSUP_CAUSE_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
cause := cause
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
|
|
|
|
tag := OSMO_GSUP_CAUSE_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
cause := cause
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
|
|
|
|
tag := OSMO_GSUP_AUTS_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
auts := auts
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-04 14:10:14 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE_AUTS(template octetstring auts) := {
|
|
|
|
tag := OSMO_GSUP_AUTS_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
auts := auts
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
|
|
|
|
tag := OSMO_GSUP_RAND_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
rand := rand
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-04 14:10:14 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE_RAND(template octetstring rand) := {
|
|
|
|
tag := OSMO_GSUP_RAND_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
rand := rand
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-22 20:22:32 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SRES(octetstring sres) := {
|
|
|
|
tag := OSMO_GSUP_SRES_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sres := sres
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_Kc(octetstring kc) := {
|
|
|
|
tag := OSMO_GSUP_KC_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
kc := kc
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_IK(octetstring ik) := {
|
|
|
|
tag := OSMO_GSUP_IK_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
ik := ik
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_CK(octetstring ck) := {
|
|
|
|
tag := OSMO_GSUP_CK_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
ck := ck
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_AUTN(octetstring autn) := {
|
|
|
|
tag := OSMO_GSUP_AUTN_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
autn := autn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_RES(octetstring res) := {
|
|
|
|
tag := OSMO_GSUP_RES_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
res := res
|
|
|
|
}
|
|
|
|
}
|
2017-12-28 21:51:51 +00:00
|
|
|
|
2018-02-17 19:57:34 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_APN(octetstring apn) := {
|
|
|
|
tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
apn := apn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-01 22:40:17 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_CnDomain(GSUP_CnDomain dom) := {
|
|
|
|
tag := OSMO_GSUP_CN_DOMAIN_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
cn_domain := dom
|
|
|
|
}
|
|
|
|
}
|
2017-12-28 21:51:51 +00:00
|
|
|
|
2018-06-02 14:05:04 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SessionId(OCT4 sid) := {
|
|
|
|
tag := OSMO_GSUP_SESSION_ID_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
session_id := sid
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SessionId(template OCT4 sid) := {
|
|
|
|
tag := OSMO_GSUP_SESSION_ID_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
session_id := sid
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SessionState(GSUP_SessionState state) := {
|
|
|
|
tag := OSMO_GSUP_SESSION_STATE_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
session_state := state
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SessionState(template GSUP_SessionState state) := {
|
|
|
|
tag := OSMO_GSUP_SESSION_STATE_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
session_state := state
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_RP_MR(OCT1 ref) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_MR_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_rp_mr := ref
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_RP_MR(template OCT1 ref) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_MR_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_rp_mr := ref
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_RP_CAUSE(OCT1 cause) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_CAUSE_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_rp_cause := cause
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_RP_CAUSE(template OCT1 cause) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_CAUSE_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_rp_cause := cause
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_RP_MMS(OCT1 mms) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_MMS_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_rp_mms := mms
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_RP_MMS(template OCT1 mms) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_MMS_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_rp_mms := mms
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-04 13:54:17 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_IMEI(hexstring imei) := {
|
2019-02-22 14:02:48 +00:00
|
|
|
tag := OSMO_GSUP_IMEI_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
2019-06-04 13:54:17 +00:00
|
|
|
imei := ts_GSUP_IMEI(imei)
|
2019-02-22 14:02:48 +00:00
|
|
|
}
|
|
|
|
}
|
2019-06-04 13:54:17 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE_IMEI(template hexstring imei) := {
|
2019-02-22 14:02:48 +00:00
|
|
|
tag := OSMO_GSUP_IMEI_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
2019-06-04 13:54:17 +00:00
|
|
|
imei := tr_GSUP_IMEI(imei)
|
2019-02-22 14:02:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-04 13:54:17 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_IMEI_Result(GSUP_IMEIResult result) := {
|
2019-02-22 14:02:48 +00:00
|
|
|
tag := OSMO_GSUP_IMEI_RESULT_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
imei_result := result
|
|
|
|
}
|
|
|
|
}
|
2019-06-04 13:54:17 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE_IMEI_Result(template GSUP_IMEIResult result) := {
|
2019-02-22 14:02:48 +00:00
|
|
|
tag := OSMO_GSUP_IMEI_RESULT_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
imei_result := result
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
/* Possible identity types for SM-RP-{OA|DA} IEs */
|
|
|
|
type enumerated GSUP_SM_RP_ODA_IdType {
|
|
|
|
OSMO_GSUP_SM_RP_ODA_ID_NONE ('00'O),
|
|
|
|
OSMO_GSUP_SM_RP_ODA_ID_IMSI ('01'O),
|
|
|
|
OSMO_GSUP_SM_RP_ODA_ID_MSISDN ('02'O),
|
|
|
|
OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR ('03'O),
|
|
|
|
/* Special value for noSM-RP-DA and noSM-RP-OA */
|
|
|
|
OSMO_GSUP_SM_RP_ODA_ID_NULL ('FF'O)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
|
|
|
/**
|
|
|
|
* SM-RP-DA represents the SM Destination Address, see 7.6.8.1.
|
|
|
|
* It can be either of the following:
|
|
|
|
* - IMSI
|
|
|
|
* - LMSI (not implemented)
|
|
|
|
* - MSISDN
|
|
|
|
* - roaming number (not implemented)
|
|
|
|
* - service centre address
|
|
|
|
*/
|
|
|
|
type union GSUP_SM_RP_DA_ID {
|
|
|
|
hexstring imsi,
|
|
|
|
hexstring msisdn,
|
|
|
|
hexstring smsc_addr
|
|
|
|
};
|
|
|
|
|
|
|
|
type record GSUP_SM_RP_DA {
|
|
|
|
GSUP_SM_RP_ODA_IdType id_type,
|
|
|
|
GSUP_SM_RP_DA_ID id_enc optional
|
2018-12-14 01:00:33 +00:00
|
|
|
} with { variant (id_enc) "CROSSTAG(
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
imsi, id_type = OSMO_GSUP_SM_RP_ODA_ID_IMSI;
|
|
|
|
msisdn, id_type = OSMO_GSUP_SM_RP_ODA_ID_MSISDN;
|
|
|
|
smsc_addr, id_type = OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR;
|
|
|
|
/* FIXME: how to handle noSM-RP-DA? */
|
|
|
|
)"
|
|
|
|
};
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_IMSI(hexstring imsi) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_IMSI,
|
|
|
|
id_enc := { imsi := imsi }
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_IMSI(template hexstring imsi) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_IMSI,
|
|
|
|
id_enc := { imsi := imsi }
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_MSISDN(hexstring msisdn) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
|
|
|
|
id_enc := { msisdn := msisdn }
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_MSISDN(template hexstring msisdn) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
|
|
|
|
id_enc := { msisdn := msisdn }
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_SMSC_ADDR(hexstring smsc_addr) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
|
|
|
|
id_enc := { smsc_addr := smsc_addr }
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_SMSC_ADDR(template hexstring smsc_addr) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
|
|
|
|
id_enc := { smsc_addr := smsc_addr }
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_NULL := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
|
|
|
|
id_enc := omit
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_NULL := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
|
|
|
|
id_enc := omit
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_RP_DA(GSUP_SM_RP_DA val) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_DA_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_rp_da := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_RP_DA(template GSUP_SM_RP_DA val) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_DA_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_rp_da := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* SM-RP-OA represents the SM Originating Address, see 7.6.8.2.
|
|
|
|
* It can be either of the following:
|
|
|
|
* - MSISDN
|
|
|
|
* - service centre address
|
|
|
|
*/
|
|
|
|
type union GSUP_SM_RP_OA_ID {
|
|
|
|
hexstring msisdn,
|
|
|
|
hexstring smsc_addr
|
|
|
|
};
|
|
|
|
|
|
|
|
type record GSUP_SM_RP_OA {
|
|
|
|
GSUP_SM_RP_ODA_IdType id_type,
|
|
|
|
GSUP_SM_RP_OA_ID id_enc optional
|
2018-12-14 01:00:33 +00:00
|
|
|
} with { variant (id_enc) "CROSSTAG(
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
msisdn, id_type = OSMO_GSUP_SM_RP_ODA_ID_MSISDN;
|
|
|
|
smsc_addr, id_type = OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR;
|
|
|
|
/* FIXME: how to handle noSM-RP-OA? */
|
|
|
|
)"
|
|
|
|
};
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_MSISDN(hexstring msisdn) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
|
|
|
|
id_enc := { msisdn := msisdn }
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_MSISDN(template hexstring msisdn) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_MSISDN,
|
|
|
|
id_enc := { msisdn := msisdn }
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_SMSC_ADDR(hexstring smsc_addr) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
|
|
|
|
id_enc := { smsc_addr := smsc_addr }
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_SMSC_ADDR(template hexstring smsc_addr) := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_SMSC_ADDR,
|
|
|
|
id_enc := { smsc_addr := smsc_addr }
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_NULL := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
|
|
|
|
id_enc := omit
|
|
|
|
}
|
|
|
|
template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_NULL := {
|
|
|
|
id_type := OSMO_GSUP_SM_RP_ODA_ID_NULL,
|
|
|
|
id_enc := omit
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_RP_OA(GSUP_SM_RP_OA val) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_OA_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_rp_oa := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_RP_OA(template GSUP_SM_RP_OA val) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_OA_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_rp_oa := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* SM-RP-UI represents the SM TPDU, see 7.6.8.4 */
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_RP_UI(octetstring val) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_UI_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_rp_ui := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_RP_UI(template octetstring val) := {
|
|
|
|
tag := OSMO_GSUP_SM_RP_UI_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_rp_ui := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-12 20:04:02 +00:00
|
|
|
/* SM Alert Reason types, see 7.6.8.8 */
|
|
|
|
type enumerated GSUP_SM_ALERT_RSN_Type {
|
|
|
|
GSUP_SM_ALERT_RSN_TYPE_NONE ('00'O),
|
|
|
|
GSUP_SM_ALERT_RSN_TYPE_MS_PRESENT ('01'O),
|
|
|
|
GSUP_SM_ALERT_RSN_TYPE_MEM_AVAIL ('02'O)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
|
|
|
/* SM Alert Reason IE (used in READY-FOR-SM), see 7.6.8.8 */
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SM_ALERT_RSN(GSUP_SM_ALERT_RSN_Type rsn) := {
|
|
|
|
tag := OSMO_GSUP_SM_ALERT_RSN_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
sm_alert_rsn := rsn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SM_ALERT_RSN(template GSUP_SM_ALERT_RSN_Type rsn) := {
|
|
|
|
tag := OSMO_GSUP_SM_ALERT_RSN_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
sm_alert_rsn := rsn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-02 14:05:04 +00:00
|
|
|
template (value) GSUP_IE ts_GSUP_IE_SSInfo(octetstring ss) := {
|
|
|
|
tag := OSMO_GSUP_SS_INFO_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
ss_info := ss
|
|
|
|
}
|
|
|
|
}
|
|
|
|
template GSUP_IE tr_GSUP_IE_SSInfo(template octetstring ss) := {
|
|
|
|
tag := OSMO_GSUP_SS_INFO_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
ss_info := ss
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-06 23:20:17 +00:00
|
|
|
template GSUP_IE tr_GSUP_IE_Message_Class(template GSUP_Message_Class val) := {
|
|
|
|
tag := OSMO_GSUP_MESSAGE_CLASS_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
message_class := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_Message_Class(GSUP_Message_Class val) := {
|
|
|
|
tag := OSMO_GSUP_MESSAGE_CLASS_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
message_class := val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_Source_Name(template octetstring name) := {
|
|
|
|
tag := OSMO_GSUP_SOURCE_NAME_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
source_name := name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_Source_Name(octetstring name) := {
|
|
|
|
tag := OSMO_GSUP_SOURCE_NAME_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
source_name := name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_Destination_Name(template octetstring name) := {
|
|
|
|
tag := OSMO_GSUP_DESTINATION_NAME_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
destination_name := name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_Destination_Name(octetstring name) := {
|
|
|
|
tag := OSMO_GSUP_DESTINATION_NAME_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
destination_name := name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template GSUP_IE tr_GSUP_IE_AN_APDU(template GSUP_AN_APDU an_apdu) := {
|
|
|
|
tag := OSMO_GSUP_AN_APDU_IE,
|
|
|
|
len := ?,
|
|
|
|
val := {
|
|
|
|
an_apdu := an_apdu
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_IE ts_GSUP_IE_AN_APDU(GSUP_AN_APDU an_apdu) := {
|
|
|
|
tag := OSMO_GSUP_AN_APDU_IE,
|
|
|
|
len := 0, /* overwritten */
|
|
|
|
val := {
|
|
|
|
an_apdu := an_apdu
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-20 21:18:54 +00:00
|
|
|
private function f_gen_ts_ss_ies(
|
2018-06-02 14:05:04 +00:00
|
|
|
hexstring imsi,
|
|
|
|
OCT4 sid,
|
|
|
|
GSUP_SessionState state,
|
2019-06-14 19:51:22 +00:00
|
|
|
template (omit) octetstring ss := omit,
|
|
|
|
template (omit) integer cause := omit
|
2018-06-20 21:18:54 +00:00
|
|
|
) return GSUP_IEs {
|
|
|
|
/* Mandatory IEs */
|
|
|
|
var GSUP_IEs ies := {
|
2019-06-14 19:51:22 +00:00
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi))
|
2018-06-20 21:18:54 +00:00
|
|
|
};
|
|
|
|
|
2019-06-14 19:51:22 +00:00
|
|
|
/* Cause IE is needed for PROC_SS_ERR */
|
|
|
|
if (isvalue(cause)) {
|
|
|
|
ies := ies & { valueof(ts_GSUP_IE_Cause(valueof(cause))) };
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Mandatory session IEs */
|
|
|
|
ies := ies & { valueof(ts_GSUP_IE_SessionId(sid)) };
|
|
|
|
ies := ies & { valueof(ts_GSUP_IE_SessionState(state)) };
|
|
|
|
|
2018-06-20 21:18:54 +00:00
|
|
|
/* Optional SS payload */
|
|
|
|
if (isvalue(ss)) {
|
2019-06-14 19:51:22 +00:00
|
|
|
ies := ies & { valueof(ts_GSUP_IE_SSInfo(valueof(ss))) };
|
2018-06-02 14:05:04 +00:00
|
|
|
}
|
2018-06-20 21:18:54 +00:00
|
|
|
|
|
|
|
return ies;
|
|
|
|
}
|
|
|
|
private function f_gen_tr_ss_ies(
|
2018-06-02 14:05:04 +00:00
|
|
|
template hexstring imsi,
|
|
|
|
template OCT4 sid := ?,
|
|
|
|
template GSUP_SessionState state := ?,
|
2019-06-14 19:51:22 +00:00
|
|
|
template octetstring ss := omit,
|
|
|
|
template integer cause := omit
|
2018-06-20 21:18:54 +00:00
|
|
|
) return template GSUP_IEs {
|
|
|
|
/* Mandatory IEs */
|
|
|
|
var template GSUP_IEs ies := {
|
2019-06-14 19:51:22 +00:00
|
|
|
tr_GSUP_IE_IMSI(imsi)
|
2018-06-20 21:18:54 +00:00
|
|
|
};
|
2019-06-14 19:51:22 +00:00
|
|
|
var integer idx := 1;
|
|
|
|
|
|
|
|
/* Cause IE is needed for PROC_SS_ERR */
|
|
|
|
if (istemplatekind(cause, "*")) {
|
|
|
|
ies[idx] := *;
|
|
|
|
idx := idx + 1;
|
|
|
|
} else if (not istemplatekind(cause, "omit")) {
|
|
|
|
ies[idx] := tr_GSUP_IE_Cause(cause);
|
|
|
|
idx := idx + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Mandatory session IEs */
|
|
|
|
ies[idx] := tr_GSUP_IE_SessionId(sid);
|
|
|
|
ies[idx + 1] := tr_GSUP_IE_SessionState(state);
|
|
|
|
idx := idx + 2;
|
2018-06-20 21:18:54 +00:00
|
|
|
|
|
|
|
/* Optional SS payload */
|
|
|
|
if (istemplatekind(ss, "*")) {
|
2019-06-14 19:51:22 +00:00
|
|
|
ies[idx] := *;
|
|
|
|
idx := idx + 1;
|
2018-06-20 21:18:54 +00:00
|
|
|
} else if (not istemplatekind(ss, "omit")) {
|
2019-06-14 19:51:22 +00:00
|
|
|
ies[idx] := tr_GSUP_IE_SSInfo(ss);
|
|
|
|
idx := idx + 1;
|
2018-06-02 14:05:04 +00:00
|
|
|
}
|
2018-06-20 21:18:54 +00:00
|
|
|
|
2019-05-11 08:58:15 +00:00
|
|
|
/* the GSUP Message Class IE is optional, as old implementations don't have it yet */
|
|
|
|
var template GSUP_IEs ies2 := ies;
|
2019-06-14 19:51:22 +00:00
|
|
|
ies2[idx] := tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_USSD);
|
|
|
|
idx := idx + 1;
|
2019-05-11 08:58:15 +00:00
|
|
|
|
|
|
|
return (ies, ies2);
|
2018-06-20 21:18:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_PROC_SS_REQ(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT4 sid,
|
|
|
|
GSUP_SessionState state,
|
|
|
|
template (omit) octetstring ss := omit
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_REQUEST,
|
|
|
|
f_gen_ts_ss_ies(imsi, sid, state, ss)
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_PROC_SS_REQ(
|
|
|
|
template hexstring imsi,
|
|
|
|
template OCT4 sid := ?,
|
|
|
|
template GSUP_SessionState state := ?,
|
|
|
|
template octetstring ss := *
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_REQUEST,
|
|
|
|
f_gen_tr_ss_ies(imsi, sid, state, ss)
|
2018-06-02 14:05:04 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_PROC_SS_RES(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT4 sid,
|
|
|
|
GSUP_SessionState state,
|
2018-06-20 21:18:54 +00:00
|
|
|
template (omit) octetstring ss := omit
|
2018-06-02 14:05:04 +00:00
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_RESULT,
|
2018-06-20 21:18:54 +00:00
|
|
|
f_gen_ts_ss_ies(imsi, sid, state, ss)
|
2018-06-02 14:05:04 +00:00
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_PROC_SS_RES(
|
|
|
|
template hexstring imsi,
|
|
|
|
template OCT4 sid := ?,
|
|
|
|
template GSUP_SessionState state := ?,
|
2018-06-20 21:18:54 +00:00
|
|
|
template octetstring ss := *
|
2018-06-02 14:05:04 +00:00
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_RESULT,
|
2018-06-20 21:18:54 +00:00
|
|
|
f_gen_tr_ss_ies(imsi, sid, state, ss)
|
2018-06-02 14:05:04 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_PROC_SS_ERR(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT4 sid,
|
2018-11-28 17:18:05 +00:00
|
|
|
GSUP_SessionState state,
|
2018-06-02 14:05:04 +00:00
|
|
|
integer cause
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_ERROR,
|
2019-06-14 19:51:22 +00:00
|
|
|
f_gen_ts_ss_ies(imsi, sid, state, cause := cause)
|
2018-06-02 14:05:04 +00:00
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_PROC_SS_ERR(
|
|
|
|
template hexstring imsi,
|
|
|
|
template OCT4 sid := ?,
|
2018-11-28 17:18:05 +00:00
|
|
|
template GSUP_SessionState state := ?,
|
2018-06-02 14:05:04 +00:00
|
|
|
template integer cause := ?
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_PROC_SS_ERROR,
|
2019-06-14 19:51:22 +00:00
|
|
|
f_gen_tr_ss_ies(imsi, sid, state, cause := cause)
|
2018-06-02 14:05:04 +00:00
|
|
|
);
|
2017-12-28 21:51:51 +00:00
|
|
|
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_REQ(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
|
|
|
|
GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
|
|
|
|
octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MO_FORWARD_SM_REQ(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
|
|
|
|
template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
|
|
|
|
template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
|
|
|
tr_GSUP_IE_SM_RP_DA(sm_rp_da),
|
|
|
|
tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_UI(sm_rp_ui),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_RES(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MO_FORWARD_SM_RES(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_ERR(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MO_FORWARD_SM_ERR(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_REQ(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
|
|
|
|
GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
|
|
|
|
octetstring sm_rp_ui, /* SM TPDU, see 7.6.8.4 */
|
|
|
|
OCT1 sm_rp_mms /* MMS (More Messages to Send), see 7.6.8.7 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* TODO: add MT-specific fields (and IEs):
|
|
|
|
* - smDeliveryTimer
|
|
|
|
* - smDeliveryStartTime
|
|
|
|
*/
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MMS(sm_rp_mms))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MT_FORWARD_SM_REQ(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
|
|
|
|
template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
|
|
|
|
template octetstring sm_rp_ui, /* SM TPDU, see 7.6.8.4 */
|
|
|
|
template OCT1 sm_rp_mms /* MMS (More Messages to Send), see 7.6.8.7 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* TODO: add MT-specific fields (and IEs):
|
|
|
|
* - smDeliveryTimer
|
|
|
|
* - smDeliveryStartTime
|
|
|
|
*/
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
|
|
|
tr_GSUP_IE_SM_RP_DA(sm_rp_da),
|
|
|
|
tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
|
|
|
|
tr_GSUP_IE_SM_RP_UI(sm_rp_ui),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_MMS(sm_rp_mms),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_RES(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MT_FORWARD_SM_RES(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_ERR(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MT_FORWARD_SM_ERR(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
library/GSUP_Types.ttcn: add MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:
- MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
- MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),
which are used to forward MO/MT short messages.
This change replicates both services as GSUP messages:
- OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
- OSMO_GSUP_MSGT_MT_FORWARD_SM_*.
Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:
- OSMO_GSUP_SM_RP_MR_IE (see note below),
- OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
- OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
- OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
- OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
- OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),
where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TLV of the following format:
- T: identity type (see 'GSUP_SM_RP_ODA_IdType'),
- L: identity length,
- V: encoded identity itself.
According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.
In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.
Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-09-23 13:28:23 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
2018-11-12 20:04:02 +00:00
|
|
|
template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_REQ(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
GSUP_SM_ALERT_RSN_Type sm_alert_rsn /* SM Alert Reason, see 7.6.8.8 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
|
|
|
|
valueof(ts_GSUP_IE_SM_ALERT_RSN(sm_alert_rsn))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_REQ(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
template GSUP_SM_ALERT_RSN_Type sm_alert_rsn := ? /* SM Alert Reason, see 7.6.8.8 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_REQUEST,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_ALERT_RSN(sm_alert_rsn),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
2018-11-12 20:04:02 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_RES(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_RESULT,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_RES(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ? /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_RESULT,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
2018-11-12 20:04:02 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_MO_READY_FOR_SM_ERR(
|
|
|
|
hexstring imsi,
|
|
|
|
OCT1 sm_rp_mr, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
OCT1 sm_rp_cause /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_ERROR,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_MR(sm_rp_mr)),
|
|
|
|
valueof(ts_GSUP_IE_SM_RP_CAUSE(sm_rp_cause))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
template GSUP_PDU tr_GSUP_MO_READY_FOR_SM_ERR(
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template OCT1 sm_rp_mr := ?, /* Message Reference, see GSM TS 04.11, 8.2.3 */
|
|
|
|
template OCT1 sm_rp_cause := ? /* RP-Cause value, see GSM TS 04.11, 8.2.5.4 */
|
|
|
|
) := tr_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_READY_FOR_SM_ERROR,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_SM_RP_MR(sm_rp_mr),
|
2019-05-06 23:20:17 +00:00
|
|
|
tr_GSUP_IE_SM_RP_CAUSE(sm_rp_cause),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SMS)
|
2018-11-12 20:04:02 +00:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
2018-06-24 20:27:47 +00:00
|
|
|
function f_gsup_find_ie(GSUP_PDU msg, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {
|
|
|
|
for (var integer i := 0; i < sizeof(msg.ies); i := i+1) {
|
|
|
|
if (msg.ies[i].tag == iei) {
|
|
|
|
ret := msg.ies[i].val;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2019-05-06 23:20:17 +00:00
|
|
|
template GSUP_AN_APDU t_GSUP_AN_APDU(
|
|
|
|
template GSUP_AN_PROTO an_proto := ?,
|
|
|
|
template octetstring pdu := ?
|
|
|
|
) := {
|
|
|
|
proto := an_proto,
|
|
|
|
pdu := pdu
|
|
|
|
};
|
|
|
|
|
|
|
|
template GSUP_PDU tr_GSUP_E_AN_APDU(
|
|
|
|
template GSUP_MessageType msgt,
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template octetstring source_name := ?,
|
|
|
|
template octetstring destination_name := ?,
|
|
|
|
template GSUP_AN_APDU an_apdu := ?
|
|
|
|
) := tr_GSUP(
|
|
|
|
msgt,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC),
|
|
|
|
tr_GSUP_IE_Source_Name(source_name),
|
|
|
|
tr_GSUP_IE_Destination_Name(destination_name),
|
|
|
|
tr_GSUP_IE_AN_APDU(an_apdu)
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template GSUP_PDU tr_GSUP_E_NO_PDU(
|
|
|
|
template GSUP_MessageType msgt,
|
|
|
|
template hexstring imsi := ?,
|
|
|
|
template octetstring source_name := ?,
|
|
|
|
template octetstring destination_name := ?
|
|
|
|
) := tr_GSUP(
|
|
|
|
msgt,
|
|
|
|
{
|
|
|
|
tr_GSUP_IE_IMSI(imsi),
|
|
|
|
tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC),
|
|
|
|
tr_GSUP_IE_Source_Name(source_name),
|
|
|
|
tr_GSUP_IE_Destination_Name(destination_name)
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_E_AN_APDU(
|
|
|
|
GSUP_MessageType msgt,
|
|
|
|
hexstring imsi,
|
|
|
|
octetstring source_name,
|
|
|
|
octetstring destination_name,
|
|
|
|
GSUP_AN_APDU an_apdu
|
|
|
|
) := ts_GSUP(
|
|
|
|
msgt,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC)),
|
|
|
|
valueof(ts_GSUP_IE_Source_Name(source_name)),
|
|
|
|
valueof(ts_GSUP_IE_Destination_Name(destination_name)),
|
|
|
|
valueof(ts_GSUP_IE_AN_APDU(an_apdu))
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
template (value) GSUP_PDU ts_GSUP_E_PrepareHandoverResult(
|
|
|
|
hexstring imsi,
|
|
|
|
hexstring msisdn,
|
|
|
|
octetstring source_name,
|
|
|
|
octetstring destination_name,
|
|
|
|
GSUP_AN_APDU an_apdu
|
|
|
|
) := ts_GSUP(
|
|
|
|
OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_RESULT,
|
|
|
|
{
|
|
|
|
valueof(ts_GSUP_IE_IMSI(imsi)),
|
|
|
|
valueof(ts_GSUP_IE_MSISDN(msisdn)),
|
|
|
|
valueof(ts_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_INTER_MSC)),
|
|
|
|
valueof(ts_GSUP_IE_Source_Name(source_name)),
|
|
|
|
valueof(ts_GSUP_IE_Destination_Name(destination_name)),
|
|
|
|
valueof(ts_GSUP_IE_AN_APDU(an_apdu))
|
|
|
|
}
|
|
|
|
);
|
2018-06-24 20:27:47 +00:00
|
|
|
|
2017-12-28 21:51:51 +00:00
|
|
|
} with { encode "RAW"; variant "FIELDORDER(msb)" }
|