Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

If you want to use 5G with HTTP/2 agents, you require a 5G profile configuration. You can select the profile that you configure in the HTTP/2 Server agent configuration.

In the 5G profile configuration, enter the details required to register an NF (Network Function) instance in the NRF (NF Repository Function). 

Configuration

The 5G profile consists of the following tabs:

Table of Contents
minLevel2
maxLevel2
outlinefalse
typelist
printablefalse

General Tab

...

Setting

Description

3GPP Version

Version Select

Select the version of 3GPP to apply to the 5G Profile. 

Note

Note!

  • 3GPP Release 15 is the current default version supported by MediationZone.

  • Release 16 was added to support the handling of 3xx status codes.

  • Release 17 is added to support the enhanced specifications and the new UDRs that are generated when coding with APLs.

Enable Custom Specification

Click this to use the custom version of the specification of NRF NFManagement Service. See Custom Specification Enabled for more information.

Info

Info!

When enabling custom specification, all fields except for OpenAPI Profile and Enable Validation will be disabled. You need to use the Analysis agent or APL Code to create the NRFspecificationUDR that will contain all the values for the disabled fields. See Custom Specification Enabled for more information.

Custom error handling for 5G during the startup can be configured at APL when the Route to APL option is enabled. See Route Error to APL for more information.

OpenAPI Profile

Select the OpenAPI profile for specification of NRF NFManagement Service. 

Enable Validation

Validate the request for NF (Network Function) registration, heartbeat and de-registration against the OpenAPI schema provided from the OpenAPI profile. 

Configure Server Settings

Path

Enter the exact path to where the HTTP request will register, de-register and update the NF profile in the NRF.

Example: /nnrf-nfm/v1/nf-instances/

Configure NF Settings

NF Instance name

Enter the name of the NF instance for the NF type that you want to use. This field supports parameterization using ${} syntax, see Appendix 1 - Profiles for more information on how parameterization works.

NF type

A list of various NF types is available for selection. The default is set to CHF (charging function).

For more information on each NF type, refer to the specification in 3GPP TS 29.510, https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3345.

Heartbeat timer

Enter the frequency (in seconds) for the NF registration to be updated in the NRF.

NF Registration status

Select the registration status that you want to have updated. The following status options are available:

  • REGISTERED: This is to register your NF instance to the NRF

  • UNDISCOVERABLE: This is to register your NF Instance without it being discovered by other NFs

  • SUSPENDED: This is to temporary suspend the NF, so that it is unable to respond to any request

FQDN

Enter the Fully Qualified Domain Name (FQDN) for the NF instance.

Support NRF Change

Select this option to allow the NRF server to modify the heartbeat timer provided by the NRF client upon registration.

IPv4 Address List

You can add the IPv4 address(es) for the NF instance.

IPv6 Address List

You can add the IPv6 address(es) for the NF instance.

Note

Note!

You must enter at least an FQDN, an IPv4 address or an IPv6 address, but you are not required to make an entry for all of these fields. In addition, you can enter any combination of the three fields that you require.

Advanced Parameters Tab

...

In this tab, you can add settings in a JSON configuration in accordance with 6.2.6.2.3 "Type: NFProfile" as defined the specification 3GPP TS 29.510, https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3345. See the example below:

Examples for Advanced Parameters

Note

Note!

Values set in the Advanced Parameters tab will override those set in the General tab.

Json configuration of advanced parameter

Code Block
languagejson
{
	"nfProfileChangesSupportInd": true,
	"nfProfileChangesInd": true,
	"allowedPlmns": [
                           {
		"mcc":"262-01",
		"mnc":"302-720"
                           }
	],
	"allowedNfTypes": [
		"PCF",
		"CHF"
	],
	"allowedNfDomains": [
		"www.domainname.com"
	]
}

This field supports parameterization using ${} syntax. For more information on parameterization see Appendix 1 - Profiles.

Parameterized Json Configuration of Advanced Parameter

Code Block
languagejson
{
    "nfProfileChangesSupportInd": true,
    "nfProfileChangesInd": true,
    "allowedPlmns": [
                           {
        "mcc":"${5g.mcc}",
        "mnc":"${5g.mnc}"
                           }
    ],
    "allowedNfTypes": [
        "PCF",
        "CHF"
    ],
    "allowedNfDomains": [
        "${5g.nfDomains}"
    ]
}

This example would result in three dynamic fields being generated and configurable per workflow:

  • 5g - mcc

  • 5g - mnc

  • 5g - nfDomains

Anchor
custom_spec
custom_spec
Custom Specification Enabled

When custom specification is enabled in 5G Profile, HTTP/2 Server agent will not perform registration of NF (Network Function) automatically during the startup of the workflow. The HTTP/2 Server agent will instead, wait to receive the NRFspecificationUDR in order to perform NF registration, heartbeat and de-registration. You can refer to the example below:

...

Info

Example - HTTP/2 Server agent with 5G custom enabled

The example workflow consists of HTTP/2 Server Agent with 5G Profile enabled and Analysis Agent to construct the NRFSpecificationUDR. When the workflow starts, the HTTP/2 Server Agent will route the NRFSpecificationUDR to the Analysis agent to construct the NRFSpecificationUDR as shown below. The constructed UDR is then routed back to the HTTP/2 Server Agent in order to perform the NF (Network Function) registration, heartbeat and de-registration.

Code Block
consume {
    if (instanceOf(input, NRFSpecificationUDR)) {
        nrf.NRFSpecificationUDR udr = udrCreate(nrf.NRFSpecificationUDR);
        udr.registerCycleUDR = constructRegUdr();
        udr.heartbeatCycleUDR = constructHbUDR();
        udr.deregisterCycleUDR = constructDeRegUDR();
        
        udr.heartBeatFieldName = "heartBeatTimer";
        udr.nfInstanceIdFieldName = "nfInstanceId";
        udr.nfTypeFieldName = "nfType";
        udr.nfProfileChangesSupportIndFieldName = "nfProfileChangesSupportInd";
        
        udrRoute(udr);
    }
}

RequestCycle constructRegUdr() {
    // construct register UDR
    NFProfile nfUdr = udrCreate(NFProfile);
    nfUdr.nfInstanceId = "94d7f196-9d03-11eb-a8b3-0242ac130003";
    nfUdr.heartBeatTimer = 5;
    nfUdr.fqdn = "domain.my";
    nfUdr.nfType = "CHF";
    nfUdr.nfStatus = "REGISTERED";
    nfUdr.nfProfileChangesSupportInd = false;
    list<string> ipv4List = listCreate(string);
    listAdd(ipv4List, "10.60.10.111");
    list<string> ipv6List = listCreate(string);
    listAdd(ipv6List, "2001:db8:85a3::8a2e:370:7334");
    nfUdr.ipv4Addresses = ipv4List;
    nfUdr.ipv6Addresses = ipv6List;
    
    string jsonString = jsonEncodeUdr(nfUdr);
    bytearray ba;
    strToBA(ba, jsonString);
    http.RequestCycle regUDR = udrCreate(http.RequestCycle);
        
    map<string,list<string>> headersMap = mapCreate(string, list<string>);
    list<string> contentList = listCreate(string);
    listAdd(contentList, "application/json");
    mapSet(headersMap, "Content-Type", contentList);
        
    regUDR.headers = headersMap;
   
    regUDR.method = "PUT";
    regUDR.requestTimeout = 10000;
    regUDR.body = ba;
    regUDR.openAPIUDR = nfUdr;
    regUDR.path = "/nnrf-nfm/v1/nf-instances/94d7f196-9d03-11eb-a8b3-0242ac130003";
    return regUDR;
}

RequestCycle constructHbUDR() {
    // construct heartbeat UDR
    PatchItem patchUDR = udrCreate(PatchItem);
    patchUDR.op = "replace";
    patchUDR.path = "/nfstatus1";
    patchUDR.value = "REGISTERED";
    
    string jsonString = "[" + jsonEncodeUdr(patchUDR) + "]";
    bytearray ba;
    strToBA(ba, jsonString);
        
    http.RequestCycle hbUDR = udrCreate(http.RequestCycle);
        
    map<string,list<string>> hbHeadersMap = mapCreate(string, list<string>);
    list<string> hbContentList = listCreate(string);
    listAdd(hbContentList, "application/json-patch+json");
    mapSet(hbHeadersMap, "Content-Type", hbContentList);
        
    hbUDR.headers = hbHeadersMap;
    hbUDR.method = "PATCH";
    hbUDR.requestTimeout = 10000;
    hbUDR.body = ba;
    hbUDR.openAPIUDR = patchUDR;
    hbUDR.path = "/nnrf-nfm/v1/nf-instances/94d7f196-9d03-11eb-a8b3-0242ac130003";
    return hbUDR;
}

RequestCycle constructDeRegUDR() {
    // construct de-regsitration UDR    
    http.RequestCycle udr = udrCreate(http.RequestCycle);
     
    udr.method = "DELETE";
    udr.requestTimeout = 10000;
    udr.path = "/nnrf-nfm/v1/nf-instances/94d7f196-9d03-11eb-a8b3-0242ac130003";
    return udr;
}