5G Profile (3.0)
If you want to use 5G with HTTP/2 agents, you require a 5G profile configuration. You select the profile that you configure in the HTTP/2 Server agent configuration. In the 5G profile configuration, you enter the details required to register an NF (Network Function) instance in the NRF (NF Repository Function). The 5G profile consists of two tabs: General and Advanced Parameters. Select the version of 3GPP to apply to the 5G Profile. Note! Support the custom version of the specification of NRF NFManagement Service. See Custom Specification Enabled for more information. 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 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/ Select the registration status that you want to have updated. You can select REGISTERED or UNDISCOVERABLE. Select REGISTERED to register your NF instance to the NRF. Select UNDISCOVERABLE if you want to register to the NRF but without being discovered by other NFs. 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. In this tab, you can add settings in a JSON configuration in accordance with 6.2.6.2.3 "Type: NFProfile" as defined in 3 the specification GPP TS 29.510, https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3345. See the example below: Note! Values set in the Advanced Parameters tab will override those set in the General tab. Example - Json configuration of advanced parameter This field supports parameterization using ${} syntax. For more information on parameterization see Profiles(3.0). Example - Parameterized Json configuration of advanced parameter This example would result in three dynamic fields being generated and configurable per workflow: 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 Example - HTTP/2 Server agent with 5G custom enabeld The example workflow consists of HTTP/2 Server Agent with 5G Profile enabled and Analysis Agent to construct the General Tab
Setting Description Version Select Enable Custom Specification NRFspecificationUDR
that will contain all the values for the disabled fields. See Custom Specification Enabled for more information.OpenAPI Profile Select 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 OpenAPI profile. Path 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 Profiles(3.0) for more information on how parameterization works. NF type A list of various NF types available for selection. Default is set to CHF (charging function). Heartbeat timer Enter how often you want the NF registration to be updated in seconds in the NRF. NF Registration status FQDN Enter the Fully Qualified Domain Name (FQDN) for the NF instance. 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. Advanced Parameters Tab
{
"nfProfileChangesSupportInd": true,
"nfProfileChangesInd": true,
"allowedPlmns": [
{
"mcc":"262-01",
"mnc":"302-720"
}
],
"allowedNfTypes": [
"PCF",
"CHF"
],
"allowedNfDomains": [
"www.domainname.com"
]
}
{
"nfProfileChangesSupportInd": true,
"nfProfileChangesInd": true,
"allowedPlmns": [
{
"mcc":"${5g.mcc}",
"mnc":"${5g.mnc}"
}
],
"allowedNfTypes": [
"PCF",
"CHF"
],
"allowedNfDomains": [
"${5g.nfDomains}"
]
}
5g - mcc
5g - mnc
5g - nfDomainsCustom Specification Enabled
NRFspecificationUDR
in order to perform NF registration, heartbeat and de-registration. You can refer to the example below: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.consume {
if (instanceOf(input, PulseUDR)) {
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;
}