pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35405?usp=email )
Change subject: Split Diameter TS 29.272 templates into its own file ......................................................................
Split Diameter TS 29.272 templates into its own file
This allows more easily finding, understanding and using the tons of templates coming from different specs.
Change-Id: I2e6b813a9e4ff98eef575aaaf46dbcf9f1a5d2d4 --- M dia2gsup/DIA2GSUP_Tests.ttcn M dia2gsup/gen_links.sh M ggsn_tests/GGSN_Tests.ttcn M ggsn_tests/gen_links.sh M hss/HSS_Tests.ttcn M hss/gen_links.sh M library/DIAMETER_Templates.ttcn A library/DIAMETER_ts29_272_Templates.ttcn M mme/MME_Tests.ttcn M mme/gen_links.sh M pgw/PGW_Tests.ttcn M pgw/gen_links.sh 12 files changed, 660 insertions(+), 616 deletions(-)
Approvals: osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/dia2gsup/DIA2GSUP_Tests.ttcn b/dia2gsup/DIA2GSUP_Tests.ttcn index e12f17b..6e59460 100644 --- a/dia2gsup/DIA2GSUP_Tests.ttcn +++ b/dia2gsup/DIA2GSUP_Tests.ttcn @@ -11,6 +11,7 @@
import from DIAMETER_Types all; import from DIAMETER_Templates all; +import from DIAMETER_ts29_272_Templates all; import from DIAMETER_Emulation all;
type component MTC_CT { diff --git a/dia2gsup/gen_links.sh b/dia2gsup/gen_links.sh index d0002eb..52939f6 100755 --- a/dia2gsup/gen_links.sh +++ b/dia2gsup/gen_links.sh @@ -36,7 +36,8 @@ FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc " FILES+="Osmocom_CTRL_Types.ttcn " FILES+="L3_Common.ttcn " -FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn DIAMETER_Templates.ttcn " +FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn " +FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn " FILES+="IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp " FILES+="GSUP_Types.ttcn GSUP_Emulation.ttcn " diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn index 435f71d..a1aab9b 100644 --- a/ggsn_tests/GGSN_Tests.ttcn +++ b/ggsn_tests/GGSN_Tests.ttcn @@ -34,6 +34,7 @@
import from DIAMETER_Types all; import from DIAMETER_Templates all; + import from DIAMETER_ts29_272_Templates all; import from DIAMETER_Emulation all;
const integer GTP0_PORT := 3386; diff --git a/ggsn_tests/gen_links.sh b/ggsn_tests/gen_links.sh index c30e3da..b51620e 100755 --- a/ggsn_tests/gen_links.sh +++ b/ggsn_tests/gen_links.sh @@ -60,7 +60,8 @@ DIR=../library FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPCP_Types.ttcn PAP_Types.ttcn " FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Templates.ttcn Osmocom_Gb_Types.ttcn " -FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn DIAMETER_Templates.ttcn " +FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn " +FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn " FILES+="Osmocom_VTY_Functions.ttcn " gen_links $DIR $FILES
diff --git a/hss/HSS_Tests.ttcn b/hss/HSS_Tests.ttcn index bd493c4..a5503a7 100644 --- a/hss/HSS_Tests.ttcn +++ b/hss/HSS_Tests.ttcn @@ -7,6 +7,7 @@
import from DIAMETER_Types all; import from DIAMETER_Templates all; +import from DIAMETER_ts29_272_Templates all; import from DIAMETER_Emulation all;
type record of hexstring SubscriberConfigs; diff --git a/hss/gen_links.sh b/hss/gen_links.sh index b97d53f..7160832 100755 --- a/hss/gen_links.sh +++ b/hss/gen_links.sh @@ -23,7 +23,8 @@
DIR=../library FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc " -FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn DIAMETER_Templates.ttcn " +FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn " +FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn " gen_links $DIR $FILES
ignore_pp_results diff --git a/library/DIAMETER_Templates.ttcn b/library/DIAMETER_Templates.ttcn index 9a3e739..05a6ea7 100644 --- a/library/DIAMETER_Templates.ttcn +++ b/library/DIAMETER_Templates.ttcn @@ -102,28 +102,10 @@ DIAMETER_ERROR_EAP_CODE_UNKNOWN (5048) };
-/* 3GPP TS 29.272 section 7.4. Errors in Experimental-Result-Code */ -type enumerated DIAMETER_ExperimentalResultcode { - /* transient */ - DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181), - DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT (4182), - /* permanent */ - DIAMETER_ERROR_USER_UNKNOWN (5001), - DIAMETER_AUTHORIZATION_REJECTED (5003), - DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004), - DIAMETER_MISSING_AVP (5005), - DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION (5420), - DIAMETER_ERROR_RAT_NOT_ALLOWED (5421), - DIAMETER_ERROR_EQUIPMENT_UNKNOWN (5422), - DIAMETER_ERROR_UNKOWN_SERVING_NODE (5423) -} - /* Gy : 3GPP TS 32.299 7.1.6, RFC4006 3.1 */ const uint32_t c_DIAMETER_CREDIT_CONTROL_AID := 4; -/* 3GPP TS 29.272 Section 7.1.8 */ + const uint32_t c_DIAMETER_3GPP_Gx_AID := 16777238; -const uint32_t c_DIAMETER_3GPP_S6_AID := 16777251; -const uint32_t c_DIAMETER_3GPP_S13_AID := 16777252; const uint32_t c_DIAMETER_3GPP_S7_AID := 16777308;
const octetstring c_def_sess_id := char2oct("ttcn3.session"); @@ -667,196 +649,6 @@ template (present) GenericAVP tr_AVP_UserNameImsi(template (present) hexstring imsi := ?) := tr_AVP_UserName(char2oct_tmpl(hex2str_tmpl(imsi)));
- -/* TS 29.272 7.3.53 RAND */ -template (value) GenericAVP ts_AVP_RAND(template (value) octetstring rand) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_RAND), - avp_data := { - avp_AAA_3GPP_RAND := rand - } - } -} - -/* TS 29.272 7.3.54 XRES */ -template (value) GenericAVP ts_AVP_XRES(template (value) octetstring xres) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_XRES), - avp_data := { - avp_AAA_3GPP_XRES := xres - } - } -} - -/* TS 29.272 7.3.55 XRES */ -template (value) GenericAVP ts_AVP_AUTN(template (value) octetstring autn) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AUTN), - avp_data := { - avp_AAA_3GPP_AUTN := autn - } - } -} - -/* TS 29.272 7.3.56 KASME */ -template (value) GenericAVP ts_AVP_KASME(template (value) octetstring kasme) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME), - avp_data := { - avp_AAA_3GPP_KASME := kasme - } - } -} - -/* TS 29.272 7.3.23 Item-Number */ -template (value) GenericAVP ts_AVP_ItemNumber(uint32_t num) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME), - avp_data := { - avp_AAA_3GPP_Item_Number := int2oct(num, 4) - } - } -} - -/* TS 29.272 7.3.18 E-UTRAN Vector */ -template (value) GenericAVP ts_AVP_EutranVec(uint32_t item_num, octetstring rand, octetstring xres, - octetstring autn, octetstring kasme) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_E_UTRAN_Vector), - avp_data := { - avp_AAA_3GPP_E_UTRAN_Vector := { - ts_AVP_ItemNumber(item_num), - ts_AVP_RAND(rand), - ts_AVP_XRES(xres), - ts_AVP_AUTN(autn), - ts_AVP_KASME(kasme) - } - } - } -} - -/* TS 29.272 7.3.2 Subscription-Data */ -template (value) GenericAVP ts_AVP_3GPP_SubscriptionData(template (value) AVP_list content) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data), - avp_data := { - avp_AAA_3GPP_Subscription_Data := content - } - } -} -template (present) GenericAVP -tr_AVP_3GPP_SubscriptionData(template (present) AVP_list content := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data), - avp_data := { - avp_AAA_3GPP_Subscription_Data := content - } - } -} - - -/* TS 29.272 7.3.17 Authentication-Info */ -template (value) GenericAVP ts_AVP_3GPP_AuthInfo(template (value) AVP_list content) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info), - avp_data := { - avp_AAA_3GPP_Authentication_Info := content - } - } -} -template (present) GenericAVP -tr_AVP_3GPP_AuthInfo(template (present) AVP_list content := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info), - avp_data := { - avp_AAA_3GPP_Authentication_Info := content - } - } -} - -/* TS 29.272 7.3.9 Visited-PLMN-Id */ -template (value) GenericAVP ts_AVP_3GPP_VisitedPlmnId(template (value) octetstring id) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id), - avp_data := { - avp_AAA_3GPP_Visited_PLMN_Id := id - } - } -} -template (present) GenericAVP tr_AVP_3GPP_VisitedPlmnId(template (present) octetstring id := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id), - avp_data := { - avp_AAA_3GPP_Visited_PLMN_Id := id - } - } -} - -/* TS 29.272 7.3.13 RAT-Type */ -template (value) GenericAVP ts_AVP_PCC_3GPP_RatType(template (value) PCC_3GPP_RAT_Type rat_type) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type), - avp_data := { - avp_PCC_3GPP_RAT_Type := rat_type - } - } -} -template (present) GenericAVP tr_AVP_PCC_3GPP_RatType(template (present) PCC_3GPP_RAT_Type rat_type := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type), - avp_data := { - avp_PCC_3GPP_RAT_Type := rat_type - } - } -} - -template (present) GenericAVP tr_AVP_GI_3GPP_RatType(template (present) GI_3GPP_3GPP_RAT_Type rat_type := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_RAT_Type), - avp_data := { - avp_GI_3GPP_3GPP_RAT_Type := rat_type - } - } -} - -/* TS 29.272 7.3.7 ULR-Flags */ -template (value) GenericAVP ts_AVP_3GPP_UlrFlags(template (value) UINT32 flags) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags), - avp_data := { - avp_AAA_3GPP_ULR_Flags := flags - } - } -} -template (present) GenericAVP tr_AVP_3GPP_UlrFlags(template (present) UINT32 flags := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags), - avp_data := { - avp_AAA_3GPP_ULR_Flags := flags - } - } -} - -/* TS 29.272 7.3.8 ULA-Flags */ -template (value) GenericAVP ts_AVP_3GPP_UlaFlags(template (value) UINT32 flags) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags), - avp_data := { - avp_AAA_3GPP_ULA_Flags := flags - } - } -} -template (present) GenericAVP tr_AVP_3GPP_UlaFlags(template (present) UINT32 flags := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags), - avp_data := { - avp_AAA_3GPP_ULA_Flags := flags - } - } -} - - - template (value) GenericAVP ts_AVP_NumOfReqVectors(template (value) UINT32 num_req := '00000004'O) := { avp := { avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Number_Of_Requested_Vectors), @@ -889,61 +681,6 @@ } }
- -/* TS 29.272 7.3.27 Context-Identifier */ -template (present) GenericAVP tr_AVP_3GPP_ContextId(template (present) uint32_t ctx := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier), - avp_data := { - avp_AAA_3GPP_Context_Identifier := int2oct_tmpl(ctx, 4) - } - } -} -template (value) GenericAVP ts_AVP_3GPP_ContextId(uint32_t ctx) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier), - avp_data := { - avp_AAA_3GPP_Context_Identifier := int2oct(ctx, 4) - } - } -} - -/* Ts 29.272 7.3.29 Subscriber-Status */ -template (present) GenericAVP tr_AVP_3GPP_SubscriberStatus(template (present) AAA_3GPP_Subscriber_Status sts) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status), - avp_data := { - avp_AAA_3GPP_Subscriber_Status := sts - } - } -} -template (value) GenericAVP ts_AVP_3GPP_SubscriberStatus(template (value) AAA_3GPP_Subscriber_Status sts) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status), - avp_data := { - avp_AAA_3GPP_Subscriber_Status := sts - } - } -} - -/* Ts 29.272 7.3.30 Operator-Determined-Barring */ -template (present) GenericAVP tr_AVP_3GPP_OperatorDeterminedBarring(template (present) uint32_t val := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Operator_Determined_Barring), - avp_data := { - avp_AAA_3GPP_Operator_Determined_Barring := int2oct_tmpl(val, 4) - } - } -} -template (value) GenericAVP ts_AVP_3GPP_OperatorDeterminedBarring(uint32_t val) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Operator_Determined_Barring), - avp_data := { - avp_AAA_3GPP_Operator_Determined_Barring := int2oct(val, 4) - } - } -} - template (present) GenericAVP tr_AVP_3GPP_SubscrRauTauTmr(template (present) uint32_t tmr := ?) := { avp := { avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer), @@ -962,73 +699,6 @@ } }
-/* TS 29.272 7.3.33 All-APN-Configurations-Included-Indicator */ -template (present) GenericAVP tr_AVP_3GPP_AllApnConfigsIncl(template (present) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator), - avp_data := { - avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind - } - } -} -template (value) GenericAVP ts_AVP_3GPP_AllApnConfigsIncl(template (value) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := All_APN_CONFIGURATIONS_INCLUDED) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator), - avp_data := { - avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind - } - } -} - -/* TS 29.272 7.3.34 APN-Configuration-Profile */ -template (present) GenericAVP tr_AVP_3GPP_ApnConfigProfile(template (present) AVP_list content := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile), - avp_data := { - avp_AAA_3GPP_APN_Configuration_Profile := content - } - } -} -template (value) GenericAVP ts_AVP_3GPP_ApnConfigProfile(template (value) AVP_list content) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile), - avp_data := { - avp_AAA_3GPP_APN_Configuration_Profile := content - } - } -} - -/* TS 29.272 7.3.35 APN-Configuration */ -template (present) GenericAVP tr_AVP_3GPP_ApnConfig(template (present) uint32_t ctx := ?, - template (present) AAA_3GPP_PDN_Type pdn_type := ?, - template (present) charstring apn := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration), - avp_data := { - avp_AAA_3GPP_APN_Configuration := superset( - tr_AVP_3GPP_ContextId(ctx), - tr_AVP_3GPP_PdnType(pdn_type), - tr_AVP_ServiceSelection(apn), - tr_AVP_3GPP_EpsSubscrQosProfile(?, ?) - ) - } - } -} -template (value) GenericAVP ts_AVP_3GPP_ApnConfig(uint32_t ctx, AAA_3GPP_PDN_Type pdn_type, - charstring apn) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration), - avp_data := { - avp_AAA_3GPP_APN_Configuration := { - ts_AVP_3GPP_ContextId(ctx), - ts_AVP_3GPP_PdnType(pdn_type), - ts_AVP_ServiceSelection(apn), - ts_AVP_3GPP_EpsSubscrQosProfile(1, 1) - } - } - } -} - /* Service-Selection, TS 29.272 7.3.36, TS 29.273 5.2.3.5, (RFC 5778) */ template (present) GenericAVP tr_AVP_ServiceSelection(template (present) charstring apn := ?) := { avp := { @@ -1179,67 +849,6 @@ } }
- -/* TS 29.272 7.3.41 AMBR */ -template (present) GenericAVP tr_AVP_3GPP_AMBR(template (present) uint32_t ul := ?, template (present) uint32_t dl := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR), - avp_data := { - avp_AAA_3GPP_AMBR := { - tr_AVP_3GPP_MaxReqBwUL(ul), - tr_AVP_3GPP_MaxReqBwDL(dl) - } - } - } -} -template (value) GenericAVP ts_AVP_3GPP_AMBR(uint32_t ul, uint32_t dl) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR), - avp_data := { - avp_AAA_3GPP_AMBR := { - ts_AVP_3GPP_MaxReqBwUL(ul), - ts_AVP_3GPP_MaxReqBwDL(dl) - } - } - } -} - -template (present) GenericAVP tr_AVP_3GPP_MaxReqBwUL(template (present) uint32_t bw := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL), - avp_data := { - avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct_tmpl(bw, 4) - } - } -} - -template (value) GenericAVP ts_AVP_3GPP_MaxReqBwUL(uint32_t bw) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL), - avp_data := { - avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct(bw, 4) - } - } -} - -template (present) GenericAVP tr_AVP_3GPP_MaxReqBwDL(template (present) uint32_t bw := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL), - avp_data := { - avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct_tmpl(bw, 4) - } - } -} - -template (value) GenericAVP ts_AVP_3GPP_MaxReqBwDL(uint32_t bw) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL), - avp_data := { - avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct(bw, 4) - } - } -} - template (present) GenericAVP tr_AVP_3GPP_Reporting_Reason(template (present) DCA_3GPP_Reporting_Reason r := ?) := { avp := { avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_Reporting_Reason), @@ -1402,24 +1011,6 @@ } }
-/* TS 29.272 7.3.62 PDN-Type */ -template (present) GenericAVP tr_AVP_3GPP_PdnType(template (present) AAA_3GPP_PDN_Type pdn_type := ?) := { - avp := { - avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type), - avp_data := { - avp_AAA_3GPP_PDN_Type := pdn_type - } - } -} -template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Type pdn_type) := { - avp := { - avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type), - avp_data := { - avp_AAA_3GPP_PDN_Type := pdn_type - } - } -} - /* RFC4006 8.16 Multiple-Services-Credit-Control AVP */ template (value) GenericAVP ts_AVP_Multiple_Services_Credit_Control(template (value) AVP_list content) := { avp := { @@ -1616,207 +1207,6 @@ return diam_pdu; }
- -template (value) PDU_DIAMETER -ts_DIA_AIR(/* template (value) */ hexstring imsi, - template (value) octetstring mcc_mnc := '111F11'O, - template (value) octetstring sess_id := c_def_sess_id, - template (value) charstring orig_host := "ttcn3.localdomain", - template (value) charstring orig_realm := "localdomain", - template (value) charstring dest_realm := "localdomain", - template (value) UINT32 hbh_id := '00000000'O, - template (value) UINT32 ete_id := '00000000'O) := - ts_DIAMETER(flags := '11000000'B, - cmd_code := Authentication_Information, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := { - ts_AVP_SessionId(sess_id), - ts_AVP_DestinationRealm(dest_realm), - ts_AVP_OriginHost(orig_host), - ts_AVP_OriginRealm(orig_realm), - ts_AVP_UserNameImsi(imsi), - /* Requested EUTRAN Auth Info */ - ts_AVP_RequestedEutranAuthInfo, - ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), - ts_AVP_3GPP_VisitedPlmnId(mcc_mnc) - }); -template (present) PDU_DIAMETER -tr_DIA_AIR(/* template (present) */ hexstring imsi, - template (present) octetstring sess_id := ?, - template (present) charstring dest_realm := ?, - template (present) UINT32 hbh_id := ?, - template (present) UINT32 ete_id := ?) := - tr_DIAMETER(flags := '1???????'B, - cmd_code := Authentication_Information, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, ete_id := ete_id, - avps := superset( - tr_AVP_SessionId(sess_id), - tr_AVP_DestinationRealm(dest_realm), - tr_AVP_UserNameImsi(imsi), - tr_AVP_3GPP_VisitedPlmnId - )); - -/* TS 29.272 5.2.3.1 + 7.2.6 Authentication Information Answer */ -template (value) PDU_DIAMETER -ts_DIA_AIA(template (value) AVP_list auth_info_contents, - template (value) octetstring sess_id := c_def_sess_id, - template (value) charstring orig_host := "hss.localdomain", - template (value) charstring orig_realm := "localdomain", - template (value) UINT32 hbh_id := '00000000'O, - template (value) UINT32 ete_id := '00000000'O) := - ts_DIAMETER(flags := '01000000'B, - cmd_code := Authentication_Information, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := { - ts_AVP_SessionId(sess_id), - ts_AVP_ResultCode(DIAMETER_SUCCESS), - ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), - ts_AVP_OriginHost(orig_host), - ts_AVP_OriginRealm(orig_realm), - ts_AVP_3GPP_AuthInfo(auth_info_contents) - }); -template (present) PDU_DIAMETER -tr_DIA_AIA(template (present) AVP_list auth_info_contents := ?, - template (present) octetstring sess_id := ?, - template (present) charstring orig_host := ?, - template (present) charstring orig_realm := ?, - template (present) UINT32 hbh_id := ?, - template (present) UINT32 ete_id := ?) := - tr_DIAMETER(flags := '0???????'B, - cmd_code := Authentication_Information, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := superset( - tr_AVP_SessionId(sess_id), - tr_AVP_AuthSessionState(NO_STATE_MAINTAINED), - tr_AVP_OriginHost(orig_host), - tr_AVP_OriginRealm(orig_realm), - tr_AVP_ResultCode(DIAMETER_SUCCESS), - tr_AVP_3GPP_AuthInfo(auth_info_contents) - )); -template (present) PDU_DIAMETER -tr_DIA_AIA_ERR(template (present) GenericAVP err_avp := ?, - template (present) octetstring sess_id := ?, - template (present) charstring orig_host := ?, - template (present) charstring orig_realm := ?, - template (present) UINT32 hbh_id := ?, - template (present) UINT32 ete_id := ?) := - tr_DIAMETER(flags := '0???????'B, - cmd_code := Authentication_Information, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := superset( - tr_AVP_SessionId(sess_id), - tr_AVP_AuthSessionState(NO_STATE_MAINTAINED), - tr_AVP_OriginHost(orig_host), - tr_AVP_OriginRealm(orig_realm), - err_avp - )); - - -/* TS 29.272 7.2.3 Update Location Request */ -template (value) PDU_DIAMETER -ts_DIA_ULR(/* template (value) */ hexstring imsi, - template (value) octetstring mcc_mnc := '111F11'O, - template (value) octetstring sess_id := c_def_sess_id, - template (value) charstring orig_host := "ttcn3.localdomain", - template (value) charstring orig_realm := "localdomain", - template (value) charstring dest_realm := "localdomain", - template (value) UINT32 hbh_id := '00000000'O, - template (value) UINT32 ete_id := '00000000'O) := - ts_DIAMETER(flags := '11000000'B, - cmd_code := Update_Location, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := { - ts_AVP_SessionId(sess_id), - ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), - ts_AVP_UserNameImsi(imsi), - ts_AVP_3GPP_UlrFlags('00000000'O), - ts_AVP_3GPP_VisitedPlmnId(mcc_mnc), - ts_AVP_PCC_3GPP_RatType(EUTRAN), - ts_AVP_OriginHost(orig_host), - ts_AVP_OriginRealm(orig_realm), - ts_AVP_DestinationRealm(dest_realm) - }); -template (present) PDU_DIAMETER -tr_DIA_ULR(/* template (present) */ hexstring imsi, - template (present) octetstring sess_id := ?, - template (present) charstring orig_host := ?, - template (present) charstring orig_realm := ?, - template (present) charstring dest_realm := ?, - template (present) UINT32 hbh_id := ?, - template (present) UINT32 ete_id := ?) := - tr_DIAMETER(flags := '11000000'B, - cmd_code := Update_Location, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := superset( - tr_AVP_SessionId(sess_id), - tr_AVP_AuthSessionState, - tr_AVP_OriginHost(orig_host), - tr_AVP_OriginRealm(orig_realm), - tr_AVP_DestinationRealm(dest_realm), - tr_AVP_UserNameImsi(imsi), - tr_AVP_PCC_3GPP_RatType, - tr_AVP_3GPP_UlrFlags, - tr_AVP_3GPP_VisitedPlmnId - )); - -template (value) PDU_DIAMETER -ts_DIA_ULA(template (value) AVP_list sub_data, - template (value) octetstring sess_id := c_def_sess_id, - template (value) charstring orig_host := "hss.localdomain", - template (value) charstring orig_realm := "localdomain", - template (value) UINT32 hbh_id := '00000000'O, - template (value) UINT32 ete_id := '00000000'O) := - ts_DIAMETER(flags:='01000000'B, - cmd_code := Update_Location, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := { - ts_AVP_SessionId(sess_id), - ts_AVP_ResultCode(DIAMETER_SUCCESS), /* optional */ - ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), - ts_AVP_OriginHost(orig_host), - ts_AVP_OriginRealm(orig_realm), - ts_AVP_3GPP_UlaFlags('00000002'O), - ts_AVP_3GPP_SubscriptionData(sub_data) - }); -template (present) PDU_DIAMETER -tr_DIA_ULA(template (present) AVP_list sub_data := ?, - template (present) octetstring sess_id := ?, - template (present) charstring orig_host := ?, - template (present) charstring orig_realm := ?, - template (present) UINT32 hbh_id := ?, - template (present) UINT32 ete_id := ?) := - tr_DIAMETER(flags := '0???????'B, - cmd_code := Update_Location, - app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), - hbh_id := hbh_id, - ete_id := ete_id, - avps := superset( - tr_AVP_SessionId(sess_id), - tr_AVP_ResultCode(DIAMETER_SUCCESS), - tr_AVP_AuthSessionState, - tr_AVP_OriginHost(orig_host), - tr_AVP_OriginRealm(orig_realm), - tr_AVP_3GPP_UlaFlags, - tr_AVP_3GPP_SubscriptionData(sub_data) - )); - - - /* RFC 4006 3.1. Credit-Control-Request (CCR) Command */ template (present) PDU_DIAMETER tr_DIA_Gx_CCR(template (present) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST) diff --git a/library/DIAMETER_ts29_272_Templates.ttcn b/library/DIAMETER_ts29_272_Templates.ttcn new file mode 100644 index 0000000..443e372 --- /dev/null +++ b/library/DIAMETER_ts29_272_Templates.ttcn @@ -0,0 +1,632 @@ +module DIAMETER_ts29_272_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.272 + */ + +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.272 section 7 + *******************************/ + +/* 3GPP TS 29.272 Section 7.1.8 */ +const uint32_t c_DIAMETER_3GPP_S6_AID := 16777251; /* S6a/S6d */ +const uint32_t c_DIAMETER_3GPP_S13_AID := 16777252; + +/* 3GPP TS 29.272 section 7.4. Errors in Experimental-Result-Code */ +type enumerated DIAMETER_ExperimentalResultcode { + /* transient */ + DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181), + DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT (4182), + /* permanent */ + DIAMETER_ERROR_USER_UNKNOWN (5001), + DIAMETER_AUTHORIZATION_REJECTED (5003), + DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004), + DIAMETER_MISSING_AVP (5005), + DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION (5420), + DIAMETER_ERROR_RAT_NOT_ALLOWED (5421), + DIAMETER_ERROR_EQUIPMENT_UNKNOWN (5422), + DIAMETER_ERROR_UNKOWN_SERVING_NODE (5423) +} + +/* TS 29.272 7.3.53 RAND */ +template (value) GenericAVP ts_AVP_RAND(template (value) octetstring rand) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_RAND), + avp_data := { + avp_AAA_3GPP_RAND := rand + } + } +} + +/* TS 29.272 7.3.54 XRES */ +template (value) GenericAVP ts_AVP_XRES(template (value) octetstring xres) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_XRES), + avp_data := { + avp_AAA_3GPP_XRES := xres + } + } +} + +/* TS 29.272 7.3.55 XRES */ +template (value) GenericAVP ts_AVP_AUTN(template (value) octetstring autn) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AUTN), + avp_data := { + avp_AAA_3GPP_AUTN := autn + } + } +} + +/* TS 29.272 7.3.56 KASME */ +template (value) GenericAVP ts_AVP_KASME(template (value) octetstring kasme) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME), + avp_data := { + avp_AAA_3GPP_KASME := kasme + } + } +} + +/* TS 29.272 7.3.23 Item-Number */ +template (value) GenericAVP ts_AVP_ItemNumber(uint32_t num) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME), + avp_data := { + avp_AAA_3GPP_Item_Number := int2oct(num, 4) + } + } +} + +/* TS 29.272 7.3.18 E-UTRAN Vector */ +template (value) GenericAVP ts_AVP_EutranVec(uint32_t item_num, octetstring rand, octetstring xres, + octetstring autn, octetstring kasme) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_E_UTRAN_Vector), + avp_data := { + avp_AAA_3GPP_E_UTRAN_Vector := { + ts_AVP_ItemNumber(item_num), + ts_AVP_RAND(rand), + ts_AVP_XRES(xres), + ts_AVP_AUTN(autn), + ts_AVP_KASME(kasme) + } + } + } +} + +/* TS 29.272 7.3.2 Subscription-Data */ +template (value) GenericAVP ts_AVP_3GPP_SubscriptionData(template (value) AVP_list content) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data), + avp_data := { + avp_AAA_3GPP_Subscription_Data := content + } + } +} +template (present) GenericAVP +tr_AVP_3GPP_SubscriptionData(template (present) AVP_list content := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data), + avp_data := { + avp_AAA_3GPP_Subscription_Data := content + } + } +} + + +/* TS 29.272 7.3.17 Authentication-Info */ +template (value) GenericAVP ts_AVP_3GPP_AuthInfo(template (value) AVP_list content) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info), + avp_data := { + avp_AAA_3GPP_Authentication_Info := content + } + } +} +template (present) GenericAVP +tr_AVP_3GPP_AuthInfo(template (present) AVP_list content := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info), + avp_data := { + avp_AAA_3GPP_Authentication_Info := content + } + } +} + +/* TS 29.272 7.3.9 Visited-PLMN-Id */ +template (value) GenericAVP ts_AVP_3GPP_VisitedPlmnId(template (value) octetstring id) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id), + avp_data := { + avp_AAA_3GPP_Visited_PLMN_Id := id + } + } +} +template (present) GenericAVP tr_AVP_3GPP_VisitedPlmnId(template (present) octetstring id := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id), + avp_data := { + avp_AAA_3GPP_Visited_PLMN_Id := id + } + } +} + +/* TS 29.272 7.3.13 RAT-Type */ +template (value) GenericAVP ts_AVP_PCC_3GPP_RatType(template (value) PCC_3GPP_RAT_Type rat_type) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type), + avp_data := { + avp_PCC_3GPP_RAT_Type := rat_type + } + } +} +template (present) GenericAVP tr_AVP_PCC_3GPP_RatType(template (present) PCC_3GPP_RAT_Type rat_type := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type), + avp_data := { + avp_PCC_3GPP_RAT_Type := rat_type + } + } +} + +template (present) GenericAVP tr_AVP_GI_3GPP_RatType(template (present) GI_3GPP_3GPP_RAT_Type rat_type := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_RAT_Type), + avp_data := { + avp_GI_3GPP_3GPP_RAT_Type := rat_type + } + } +} + +/* TS 29.272 7.3.7 ULR-Flags */ +template (value) GenericAVP ts_AVP_3GPP_UlrFlags(template (value) UINT32 flags) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags), + avp_data := { + avp_AAA_3GPP_ULR_Flags := flags + } + } +} +template (present) GenericAVP tr_AVP_3GPP_UlrFlags(template (present) UINT32 flags := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags), + avp_data := { + avp_AAA_3GPP_ULR_Flags := flags + } + } +} + +/* TS 29.272 7.3.8 ULA-Flags */ +template (value) GenericAVP ts_AVP_3GPP_UlaFlags(template (value) UINT32 flags) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags), + avp_data := { + avp_AAA_3GPP_ULA_Flags := flags + } + } +} +template (present) GenericAVP tr_AVP_3GPP_UlaFlags(template (present) UINT32 flags := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags), + avp_data := { + avp_AAA_3GPP_ULA_Flags := flags + } + } +} + + +/* TS 29.272 7.3.27 Context-Identifier */ +template (present) GenericAVP tr_AVP_3GPP_ContextId(template (present) uint32_t ctx := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier), + avp_data := { + avp_AAA_3GPP_Context_Identifier := int2oct_tmpl(ctx, 4) + } + } +} +template (value) GenericAVP ts_AVP_3GPP_ContextId(uint32_t ctx) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier), + avp_data := { + avp_AAA_3GPP_Context_Identifier := int2oct(ctx, 4) + } + } +} + +/* Ts 29.272 7.3.29 Subscriber-Status */ +template (present) GenericAVP tr_AVP_3GPP_SubscriberStatus(template (present) AAA_3GPP_Subscriber_Status sts) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status), + avp_data := { + avp_AAA_3GPP_Subscriber_Status := sts + } + } +} +template (value) GenericAVP ts_AVP_3GPP_SubscriberStatus(template (value) AAA_3GPP_Subscriber_Status sts) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status), + avp_data := { + avp_AAA_3GPP_Subscriber_Status := sts + } + } +} + +/* Ts 29.272 7.3.30 Operator-Determined-Barring */ +template (present) GenericAVP tr_AVP_3GPP_OperatorDeterminedBarring(template (present) uint32_t val := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Operator_Determined_Barring), + avp_data := { + avp_AAA_3GPP_Operator_Determined_Barring := int2oct_tmpl(val, 4) + } + } +} +template (value) GenericAVP ts_AVP_3GPP_OperatorDeterminedBarring(uint32_t val) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Operator_Determined_Barring), + avp_data := { + avp_AAA_3GPP_Operator_Determined_Barring := int2oct(val, 4) + } + } +} + +/* TS 29.272 7.3.33 All-APN-Configurations-Included-Indicator */ +template (present) GenericAVP tr_AVP_3GPP_AllApnConfigsIncl(template (present) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator), + avp_data := { + avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind + } + } +} +template (value) GenericAVP ts_AVP_3GPP_AllApnConfigsIncl(template (value) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := All_APN_CONFIGURATIONS_INCLUDED) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator), + avp_data := { + avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind + } + } +} + +/* TS 29.272 7.3.34 APN-Configuration-Profile */ +template (present) GenericAVP tr_AVP_3GPP_ApnConfigProfile(template (present) AVP_list content := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile), + avp_data := { + avp_AAA_3GPP_APN_Configuration_Profile := content + } + } +} +template (value) GenericAVP ts_AVP_3GPP_ApnConfigProfile(template (value) AVP_list content) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile), + avp_data := { + avp_AAA_3GPP_APN_Configuration_Profile := content + } + } +} + +/* TS 29.272 7.3.35 APN-Configuration */ +template (present) GenericAVP tr_AVP_3GPP_ApnConfig(template (present) uint32_t ctx := ?, + template (present) AAA_3GPP_PDN_Type pdn_type := ?, + template (present) charstring apn := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration), + avp_data := { + avp_AAA_3GPP_APN_Configuration := superset( + tr_AVP_3GPP_ContextId(ctx), + tr_AVP_3GPP_PdnType(pdn_type), + tr_AVP_ServiceSelection(apn), + tr_AVP_3GPP_EpsSubscrQosProfile(?, ?) + ) + } + } +} +template (value) GenericAVP ts_AVP_3GPP_ApnConfig(uint32_t ctx, AAA_3GPP_PDN_Type pdn_type, + charstring apn) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration), + avp_data := { + avp_AAA_3GPP_APN_Configuration := { + ts_AVP_3GPP_ContextId(ctx), + ts_AVP_3GPP_PdnType(pdn_type), + ts_AVP_ServiceSelection(apn), + ts_AVP_3GPP_EpsSubscrQosProfile(1, 1) + } + } + } +} + + +/* TS 29.272 7.3.41 AMBR */ +template (present) GenericAVP tr_AVP_3GPP_AMBR(template (present) uint32_t ul := ?, template (present) uint32_t dl := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR), + avp_data := { + avp_AAA_3GPP_AMBR := { + tr_AVP_3GPP_MaxReqBwUL(ul), + tr_AVP_3GPP_MaxReqBwDL(dl) + } + } + } +} +template (value) GenericAVP ts_AVP_3GPP_AMBR(uint32_t ul, uint32_t dl) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR), + avp_data := { + avp_AAA_3GPP_AMBR := { + ts_AVP_3GPP_MaxReqBwUL(ul), + ts_AVP_3GPP_MaxReqBwDL(dl) + } + } + } +} + +template (present) GenericAVP tr_AVP_3GPP_MaxReqBwUL(template (present) uint32_t bw := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL), + avp_data := { + avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct_tmpl(bw, 4) + } + } +} + +template (value) GenericAVP ts_AVP_3GPP_MaxReqBwUL(uint32_t bw) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL), + avp_data := { + avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct(bw, 4) + } + } +} + +template (present) GenericAVP tr_AVP_3GPP_MaxReqBwDL(template (present) uint32_t bw := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL), + avp_data := { + avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct_tmpl(bw, 4) + } + } +} + +template (value) GenericAVP ts_AVP_3GPP_MaxReqBwDL(uint32_t bw) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL), + avp_data := { + avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct(bw, 4) + } + } +} + +/* TS 29.272 7.3.62 PDN-Type */ +template (present) GenericAVP tr_AVP_3GPP_PdnType(template (present) AAA_3GPP_PDN_Type pdn_type := ?) := { + avp := { + avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type), + avp_data := { + avp_AAA_3GPP_PDN_Type := pdn_type + } + } +} +template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Type pdn_type) := { + avp := { + avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type), + avp_data := { + avp_AAA_3GPP_PDN_Type := pdn_type + } + } +} + + +/* TS 29.272 5.2.3.1 + 7.2.6 Authentication Information Answer */ +template (value) PDU_DIAMETER +ts_DIA_AIA(template (value) AVP_list auth_info_contents, + template (value) octetstring sess_id := c_def_sess_id, + template (value) charstring orig_host := "hss.localdomain", + template (value) charstring orig_realm := "localdomain", + template (value) UINT32 hbh_id := '00000000'O, + template (value) UINT32 ete_id := '00000000'O) := + ts_DIAMETER(flags := '01000000'B, + cmd_code := Authentication_Information, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := { + ts_AVP_SessionId(sess_id), + ts_AVP_ResultCode(DIAMETER_SUCCESS), + ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), + ts_AVP_OriginHost(orig_host), + ts_AVP_OriginRealm(orig_realm), + ts_AVP_3GPP_AuthInfo(auth_info_contents) + }); +template (present) PDU_DIAMETER +tr_DIA_AIA(template (present) AVP_list auth_info_contents := ?, + template (present) octetstring sess_id := ?, + template (present) charstring orig_host := ?, + template (present) charstring orig_realm := ?, + template (present) UINT32 hbh_id := ?, + template (present) UINT32 ete_id := ?) := + tr_DIAMETER(flags := '0???????'B, + cmd_code := Authentication_Information, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := superset( + tr_AVP_SessionId(sess_id), + tr_AVP_AuthSessionState(NO_STATE_MAINTAINED), + tr_AVP_OriginHost(orig_host), + tr_AVP_OriginRealm(orig_realm), + tr_AVP_ResultCode(DIAMETER_SUCCESS), + tr_AVP_3GPP_AuthInfo(auth_info_contents) + )); +template (present) PDU_DIAMETER +tr_DIA_AIA_ERR(template (present) GenericAVP err_avp := ?, + template (present) octetstring sess_id := ?, + template (present) charstring orig_host := ?, + template (present) charstring orig_realm := ?, + template (present) UINT32 hbh_id := ?, + template (present) UINT32 ete_id := ?) := + tr_DIAMETER(flags := '0???????'B, + cmd_code := Authentication_Information, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := superset( + tr_AVP_SessionId(sess_id), + tr_AVP_AuthSessionState(NO_STATE_MAINTAINED), + tr_AVP_OriginHost(orig_host), + tr_AVP_OriginRealm(orig_realm), + err_avp + )); + + +/* TS 29.272 7.2.3 Update Location Request */ +template (value) PDU_DIAMETER +ts_DIA_ULR(/* template (value) */ hexstring imsi, + template (value) octetstring mcc_mnc := '111F11'O, + template (value) octetstring sess_id := c_def_sess_id, + template (value) charstring orig_host := "ttcn3.localdomain", + template (value) charstring orig_realm := "localdomain", + template (value) charstring dest_realm := "localdomain", + template (value) UINT32 hbh_id := '00000000'O, + template (value) UINT32 ete_id := '00000000'O) := + ts_DIAMETER(flags := '11000000'B, + cmd_code := Update_Location, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := { + ts_AVP_SessionId(sess_id), + ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), + ts_AVP_UserNameImsi(imsi), + ts_AVP_3GPP_UlrFlags('00000000'O), + ts_AVP_3GPP_VisitedPlmnId(mcc_mnc), + ts_AVP_PCC_3GPP_RatType(EUTRAN), + ts_AVP_OriginHost(orig_host), + ts_AVP_OriginRealm(orig_realm), + ts_AVP_DestinationRealm(dest_realm) + }); +template (present) PDU_DIAMETER +tr_DIA_ULR(/* template (present) */ hexstring imsi, + template (present) octetstring sess_id := ?, + template (present) charstring orig_host := ?, + template (present) charstring orig_realm := ?, + template (present) charstring dest_realm := ?, + template (present) UINT32 hbh_id := ?, + template (present) UINT32 ete_id := ?) := + tr_DIAMETER(flags := '11000000'B, + cmd_code := Update_Location, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := superset( + tr_AVP_SessionId(sess_id), + tr_AVP_AuthSessionState, + tr_AVP_OriginHost(orig_host), + tr_AVP_OriginRealm(orig_realm), + tr_AVP_DestinationRealm(dest_realm), + tr_AVP_UserNameImsi(imsi), + tr_AVP_PCC_3GPP_RatType, + tr_AVP_3GPP_UlrFlags, + tr_AVP_3GPP_VisitedPlmnId + )); + +template (value) PDU_DIAMETER +ts_DIA_ULA(template (value) AVP_list sub_data, + template (value) octetstring sess_id := c_def_sess_id, + template (value) charstring orig_host := "hss.localdomain", + template (value) charstring orig_realm := "localdomain", + template (value) UINT32 hbh_id := '00000000'O, + template (value) UINT32 ete_id := '00000000'O) := + ts_DIAMETER(flags:='01000000'B, + cmd_code := Update_Location, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := { + ts_AVP_SessionId(sess_id), + ts_AVP_ResultCode(DIAMETER_SUCCESS), /* optional */ + ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), + ts_AVP_OriginHost(orig_host), + ts_AVP_OriginRealm(orig_realm), + ts_AVP_3GPP_UlaFlags('00000002'O), + ts_AVP_3GPP_SubscriptionData(sub_data) + }); +template (present) PDU_DIAMETER +tr_DIA_ULA(template (present) AVP_list sub_data := ?, + template (present) octetstring sess_id := ?, + template (present) charstring orig_host := ?, + template (present) charstring orig_realm := ?, + template (present) UINT32 hbh_id := ?, + template (present) UINT32 ete_id := ?) := + tr_DIAMETER(flags := '0???????'B, + cmd_code := Update_Location, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := superset( + tr_AVP_SessionId(sess_id), + tr_AVP_ResultCode(DIAMETER_SUCCESS), + tr_AVP_AuthSessionState, + tr_AVP_OriginHost(orig_host), + tr_AVP_OriginRealm(orig_realm), + tr_AVP_3GPP_UlaFlags, + tr_AVP_3GPP_SubscriptionData(sub_data) + )); + +/* TS 29.272 7.2.5 Authentication-Information-Request */ +template (value) PDU_DIAMETER +ts_DIA_AIR(/* template (value) */ hexstring imsi, + template (value) octetstring mcc_mnc := '111F11'O, + template (value) octetstring sess_id := c_def_sess_id, + template (value) charstring orig_host := "ttcn3.localdomain", + template (value) charstring orig_realm := "localdomain", + template (value) charstring dest_realm := "localdomain", + template (value) UINT32 hbh_id := '00000000'O, + template (value) UINT32 ete_id := '00000000'O) := + ts_DIAMETER(flags := '11000000'B, + cmd_code := Authentication_Information, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := { + ts_AVP_SessionId(sess_id), + ts_AVP_DestinationRealm(dest_realm), + ts_AVP_OriginHost(orig_host), + ts_AVP_OriginRealm(orig_realm), + ts_AVP_UserNameImsi(imsi), + /* Requested EUTRAN Auth Info */ + ts_AVP_RequestedEutranAuthInfo, + ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), + ts_AVP_3GPP_VisitedPlmnId(mcc_mnc) + }); +template (present) PDU_DIAMETER +tr_DIA_AIR(/* template (present) */ hexstring imsi, + template (present) octetstring sess_id := ?, + template (present) charstring dest_realm := ?, + template (present) UINT32 hbh_id := ?, + template (present) UINT32 ete_id := ?) := + tr_DIAMETER(flags := '1???????'B, + cmd_code := Authentication_Information, + app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4), + hbh_id := hbh_id, ete_id := ete_id, + avps := superset( + tr_AVP_SessionId(sess_id), + tr_AVP_DestinationRealm(dest_realm), + tr_AVP_UserNameImsi(imsi), + tr_AVP_3GPP_VisitedPlmnId + )); + +} diff --git a/mme/MME_Tests.ttcn b/mme/MME_Tests.ttcn index 973c097..7f714fc 100644 --- a/mme/MME_Tests.ttcn +++ b/mme/MME_Tests.ttcn @@ -27,6 +27,7 @@
import from DIAMETER_Types all; import from DIAMETER_Templates all; +import from DIAMETER_ts29_272_Templates all; import from DIAMETER_Emulation all;
import from SGsAP_Types all; diff --git a/mme/gen_links.sh b/mme/gen_links.sh index f10a161..32c782f 100755 --- a/mme/gen_links.sh +++ b/mme/gen_links.sh @@ -75,7 +75,8 @@ FILES+="L3_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn " FILES+="S1AP_CodecPort.ttcn S1AP_CodecPort_CtrlFunctDef.cc S1AP_CodecPort_CtrlFunct.ttcn S1AP_Emulation.ttcn " FILES+="NAS_Templates.ttcn GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn " -FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn DIAMETER_Templates.ttcn " +FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn " +FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn " FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Emulation.ttcn GTP_Templates.ttcn Osmocom_Gb_Types.ttcn " FILES+="GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn " FILES+="GTPv2_CodecPort.ttcn GTPv2_CodecPort_CtrlFunctDef.cc GTPv2_CodecPort_CtrlFunct.ttcn GTPv2_Emulation.ttcn " diff --git a/pgw/PGW_Tests.ttcn b/pgw/PGW_Tests.ttcn index bafabdf..b8eb471 100644 --- a/pgw/PGW_Tests.ttcn +++ b/pgw/PGW_Tests.ttcn @@ -18,6 +18,7 @@
import from DIAMETER_Types all; import from DIAMETER_Templates all; +import from DIAMETER_ts29_272_Templates all; import from DIAMETER_Emulation all;
diff --git a/pgw/gen_links.sh b/pgw/gen_links.sh index c8333c7..0bf264a 100755 --- a/pgw/gen_links.sh +++ b/pgw/gen_links.sh @@ -63,7 +63,8 @@ FILES+="GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn " FILES+="GTPv2_CodecPort.ttcn GTPv2_CodecPort_CtrlFunctDef.cc GTPv2_CodecPort_CtrlFunct.ttcn GTPv2_Emulation.ttcn " FILES+="DNS_Helpers.ttcn " -FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn DIAMETER_Templates.ttcn " +FILES+="DIAMETER_Types.ttcn DIAMETER_CodecPort.ttcn DIAMETER_CodecPort_CtrlFunct.ttcn DIAMETER_CodecPort_CtrlFunctDef.cc DIAMETER_Emulation.ttcn " +FILES+="DIAMETER_Templates.ttcn DIAMETER_ts29_272_Templates.ttcn " gen_links $DIR $FILES
ignore_pp_results