aboutsummaryrefslogtreecommitdiffstats
path: root/library/DIAMETER_ts29_212_Templates.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/DIAMETER_ts29_212_Templates.ttcn')
-rw-r--r--library/DIAMETER_ts29_212_Templates.ttcn105
1 files changed, 105 insertions, 0 deletions
diff --git a/library/DIAMETER_ts29_212_Templates.ttcn b/library/DIAMETER_ts29_212_Templates.ttcn
new file mode 100644
index 00000000..73d51777
--- /dev/null
+++ b/library/DIAMETER_ts29_212_Templates.ttcn
@@ -0,0 +1,105 @@
+module DIAMETER_ts29_212_Templates {
+
+/* (C) 2023 by sysmocom s.f.m.c. GmbH <info@sysmocom.de
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * Templates for AVPs and messages for TS 29.212
+ */
+
+import from General_Types all;
+import from DIAMETER_Types all;
+import from DIAMETER_Templates all;
+import from Osmocom_Types all;
+import from Misc_Helpers all;
+
+/*******************************
+ * S6a 3GPP TS 29.212 section 7
+ *******************************/
+
+/* 3GPP TS 29.212 Section 5.1 */
+const uint32_t c_DIAMETER_3GPP_Gx_AID := 16777238;
+
+/* 3GPP TS 29.212 5.6.2 Credit-Control-Request (CC-Request, CCR) Command */
+template (present) PDU_DIAMETER
+tr_DIA_Gx_CCR(template (present) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST)
+:= tr_DIAMETER(flags:='11000000'B, cmd_code:=Credit_Control,
+ avps := superset(
+ tr_AVP_SessionId,
+ tr_AVP_OriginHost,
+ tr_AVP_OriginRealm,
+ tr_AVP_DestinationRealm,
+ tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
+ tr_AVP_CcReqType(req_type),
+ tr_AVP_CcReqNum(?)
+ ));
+
+template (value) PDU_DIAMETER
+ts_DIA_Gx_CCR(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
+ template (value) octetstring sess_id,
+ template (value) DCC_NONE_Subscription_Id subscr_id,
+ template (value) DNAS_NONE_Called_Station_Id called_station_id,
+ template (value) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST,
+ template (value) AVP_Unsigned32 req_num := '00000000'O)
+:= ts_DIAMETER(flags:='11000000'B, cmd_code:=Credit_Control,
+ app_id:=int2oct(c_DIAMETER_3GPP_Gx_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
+ avps := {
+ ts_AVP_SessionId(sess_id),
+ ts_AVP_OriginHost("pcrf.localdomain"),
+ ts_AVP_OriginRealm("localdomain"),
+ ts_AVP_DestinationRealm("localdomain"),
+ ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
+ ts_AVP_CcReqType(req_type),
+ ts_AVP_CcReqNum(req_num),
+ ts_AVP_SubcrId(subscr_id),
+ ts_AVP_3GPP_CalledStationId(called_station_id)
+ });
+
+/* 3GPP TS 29.212 5.6.3 Credit-Control-Answer (CC-Answer, CCA) Command */
+template (value) PDU_DIAMETER
+ts_DIA_Gx_CCA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
+ template (value) octetstring sess_id,
+ template (value) DCC_NONE_CC_Request_Type req_type,
+ template (value) AVP_Unsigned32 req_num)
+:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
+ app_id:=int2oct(c_DIAMETER_3GPP_Gx_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
+ avps := {
+ ts_AVP_SessionId(sess_id),
+ ts_AVP_ResultCode(DIAMETER_SUCCESS),
+ ts_AVP_OriginHost("pcrf.localdomain"),
+ ts_AVP_OriginRealm("localdomain"),
+ ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
+ ts_AVP_CcReqType(req_type),
+ ts_AVP_CcReqNum(req_num),
+ ts_AVP_PCC_3GPP_QoS_Information({
+ ts_AVP_PCC_3GPP_APN_Aggregate_Max_Bitrate_UL(33554432),
+ ts_AVP_PCC_3GPP_APN_Aggregate_Max_Bitrate_DL(52428800)
+ }),
+ ts_AVP_PCC_3GPP_Default_EPS_Bearer_QoS({
+ ts_AVP_PCC_3GPP_QoS_Class_Identifier(9),
+ ts_AVP_PCC_3GPP_AllocRetenPrio(2)
+ })
+ // supported features
+ // origin
+ });
+
+template (present) PDU_DIAMETER
+tr_DIA_Gx_CCA(template (present) octetstring sess_id := ?,
+ template (present) DCC_NONE_CC_Request_Type req_type := ?,
+ template (present) DIAMETER_Resultcode res_code := DIAMETER_SUCCESS)
+:= tr_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
+ avps := superset(
+ tr_AVP_SessionId(sess_id),
+ tr_AVP_ResultCode(res_code),
+ tr_AVP_OriginHost,
+ tr_AVP_OriginRealm,
+ tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
+ tr_AVP_CcReqType(req_type),
+ tr_AVP_CcReqNum(?)
+ ));
+
+} /* module */