= 5G system TS29503 Nudm Protocol Modules for TTCN-3 Toolset with TITAN, Description
:author: Gábor Szalai
:toc: left

== About This Document

This is the description for the 5G system TS29503 Nudm protocol module. The 5G system TS29503 Nudm protocol modules are developed for the TTCN-3 Toolset with Titan. 

== Functionality

The 5G system TS29503 Nudm protocol module implements the object structures of the 3GPP TS 29503 v15.1.0<<_5, [5]>> in a formalized way, using the standard specification language TTCN-3. This allows defining of test data (templates) in the TTCN-3 language and correctly encoding/decoding messages when executing test suites using the Titan TTCN-3 test environment.
The 5G system TS29503 Nudm protocol module uses Titan’s JSON encoding <<_3, [3]>> and hence is usable with the Titan test toolset only.

=== System Requirements
Protocol modules are a set of TTCN-3 source code files that can be used as part of TTCN-3 test suites only. Hence, protocol modules alone do not put specific requirements on the system used. However, in order to compile and execute a TTCN-3 test suite using the set of protocol modules the following system requirements must be satisfied:

* Titan TTCN-3 Test Executor version CRL 113 200/6 R5A (6.5.pl0) or higher installed. For Installation Guide see <<_2, [2]>>. Please note: This version of the test port is not compatible with Titan releases earlier than CRL 113 200/6 R5A.

===	Installation
The set of protocol modules can be used in developing TTCN-3 test suites using any text editor. Since the 5G system TS29503 Nudm protocol is used as a part of a TTCN-3 test suite, this requires TTCN-3 Test Executor be installed before the module can be compiled and executed together with other parts of the test suite. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_2, [2]>>.

== Interface description

=== Encoding/decoding and other related functions
This product also contains encoding/decoding functions, which assure correct encoding of messages when sent from Titan and correct decoding of messages when received by Titan. 

==== Implemented encoding and decoding functions

[source]
----
Name	Type of formal parameters	Type of return value
f_enc_EeSubscription(in EeSubscription pdu) return octetstring 
f_dec_EeSubscription(in octetstring stream, out EeSubscription pdu) return integer 
f_enc_CreatedEeSubscription(in CreatedEeSubscription pdu) return octetstring 
f_dec_CreatedEeSubscription(in octetstring stream, out CreatedEeSubscription pdu) return integer 
f_enc_SubscriptionDataSets(in SubscriptionDataSets pdu) return octetstring 
f_dec_SubscriptionDataSets(in octetstring stream, out SubscriptionDataSets pdu) return integer 
f_enc_Nssai(in Nssai pdu) return octetstring 
f_dec_Nssai(in octetstring stream, out Nssai pdu) return integer 
f_enc_AccessAndMobilitySubscriptionData(in AccessAndMobilitySubscriptionData pdu) return octetstring 
f_dec_AccessAndMobilitySubscriptionData(in octetstring stream, out AccessAndMobilitySubscriptionData pdu) return integer 
f_enc_SmfSelectionSubscriptionData(in SmfSelectionSubscriptionData pdu) return octetstring 
f_dec_SmfSelectionSubscriptionData(in octetstring stream, out SmfSelectionSubscriptionData pdu) return integer 
f_enc_UeContextInSmfData(in UeContextInSmfData pdu) return octetstring 
f_dec_UeContextInSmfData(in octetstring stream, out UeContextInSmfData pdu) return integer 
f_enc_SmsSubscriptionData(in SmsSubscriptionData pdu) return octetstring 
f_dec_SmsSubscriptionData(in octetstring stream, out SmsSubscriptionData pdu) return integer 
f_enc_SmsManagementSubscriptionData(in SmsManagementSubscriptionData pdu) return octetstring 
f_dec_SmsManagementSubscriptionData(in octetstring stream, out SmsManagementSubscriptionData pdu) return integer 
f_enc_SdmSubscription(in SdmSubscription pdu) return octetstring 
f_dec_SdmSubscription(in octetstring stream, out SdmSubscription pdu) return integer 
f_enc_ModificationNotification(in ModificationNotification pdu) return octetstring 
f_dec_ModificationNotification(in octetstring stream, out ModificationNotification pdu) return integer 
f_enc_IdTranslationResult(in IdTranslationResult pdu) return octetstring 
f_dec_IdTranslationResult(in octetstring stream, out IdTranslationResult pdu) return integer 
f_enc_AcknowledgeInfo(in AcknowledgeInfo pdu) return octetstring 
f_dec_AcknowledgeInfo(in octetstring stream, out AcknowledgeInfo pdu) return integer 
f_enc_AuthenticationInfoRequest(in AuthenticationInfoRequest pdu) return octetstring 
f_dec_AuthenticationInfoRequest(in octetstring stream, out AuthenticationInfoRequest pdu) return integer 
f_enc_AuthenticationInfoResult(in AuthenticationInfoResult pdu) return octetstring 
f_dec_AuthenticationInfoResult(in octetstring stream, out AuthenticationInfoResult pdu) return integer 
f_enc_AuthEvent(in AuthEvent pdu) return octetstring 
f_dec_AuthEvent(in octetstring stream, out AuthEvent pdu) return integer 
f_enc_Amf3GppAccessRegistration(in Amf3GppAccessRegistration pdu) return octetstring 
f_dec_Amf3GppAccessRegistration(in octetstring stream, out Amf3GppAccessRegistration pdu) return integer 
f_enc_DeregistrationData(in DeregistrationData pdu) return octetstring 
f_dec_DeregistrationData(in octetstring stream, out DeregistrationData pdu) return integer 
f_enc_PcscfRestorationNotification(in PcscfRestorationNotification pdu) return octetstring 
f_dec_PcscfRestorationNotification(in octetstring stream, out PcscfRestorationNotification pdu) return integer 
f_enc_Amf3GppAccessRegistrationModification(in Amf3GppAccessRegistrationModification pdu) return octetstring 
f_dec_Amf3GppAccessRegistrationModification(in octetstring stream, out Amf3GppAccessRegistrationModification pdu) return integer 
f_enc_AmfNon3GppAccessRegistration(in AmfNon3GppAccessRegistration pdu) return octetstring 
f_dec_AmfNon3GppAccessRegistration(in octetstring stream, out AmfNon3GppAccessRegistration pdu) return integer 
f_enc_AmfNon3GppAccessRegistrationModification(in AmfNon3GppAccessRegistrationModification pdu) return octetstring 
f_dec_AmfNon3GppAccessRegistrationModification(in octetstring stream, out AmfNon3GppAccessRegistrationModification pdu) return integer 
f_enc_SmfRegistration(in SmfRegistration pdu) return octetstring 
f_dec_SmfRegistration(in octetstring stream, out SmfRegistration pdu) return integer 
f_enc_SmsfRegistration(in SmsfRegistration pdu) return octetstring 
f_dec_SmsfRegistration(in octetstring stream, out SmsfRegistration pdu) return integer 
----

== Usage

The protocol module provides abstract data types for JSON objects used by the services defined in the standard <<_5, [5]>>. The protocol module provides encoder and decoder functions for the JSON objects. The decoder validates the received JSON object based on the JSON schema as well. Only the validated JSON value is decoded.

== Terminology	

=== Abbreviations

JSON:: JavaScript Object Notation

PDU:: Protocol Data Unit

TTCN-3:: Testing and Test Control Notation version 3

== References

[[_1]]
[1]	ETSI ES 201 873-1 v4.4.1 (2012-04) +
The Testing and Test Control Notation version 3. Part 1: Core Language

[[_2]]
[2]	1/ 198 17-CRL 113 200/6 Uen +
Installation Guide for the TITAN TTCN-3 Test Executor

[[_3]]
[3]	2/198 17-CRL 113 200/6 Uen +
Programmer's Technical Reference for Titan TTCN-3 Test Executor

[[_4]]
[4]	https://www.json.org

[[_5]]
[5] 3GPP TS 29503 v15.1.0+
5G System; Unified Data Management Services; Stage 3

