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).
...
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 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. |
...
Anchor |
---|
| 5G.custom.spec |
---|
| 5G.custom.spec |
---|
|
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:
Image RemovedImage Added
Info |
---|
title | 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 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;
} |
|
...