3 Configuring Service Communication Proxy using REST APIs
This section provides information for configuring Service Communication Proxy using REST APIs.
SCP provides the following two service interfaces:
- Signaling Interface
- Signaling interface is exposed by SCP data plane (that is, SCP Worker) and this interface will be used to receive all 5G signaling traffic.
- Config Interface
- Config interface is exposed by SCP control plane (that is, SCPC-Config) and this interface is used to receive all SCP configuration traffic.
SCP Signaling Service
- FQDN
- Consumer NFs may use SCP Signaling service's FQDN to send the 5G signaling traffic to SCP for routing.
- K8S service FQDN will be in the form as below:
- fqdn = scp-worker.<namespace>.<domain> where, namespace is K8S namespace as provided during helm installation, and domain is as provided in helm chart (values.yaml) while installation.
- If user NFs are deployed outside of K8S cluster, then operator needs to make sure that this fqdn is resolvable by consumer NFs.
- Operator can specify the public or K8s-cluster fqdn of SCP in helm chart (values.yaml, scpInfo.fqdn" = <releaseName>-scp-worker.<Namespace>.<domain>) during installation.
-
IP Address
- Consumer NFs may use SCP Signaling service's IP Address to send the 5G signaling traffic to SCP for routing.
- <global.publicSignalingIP>, as
provided in helm chart (values.yaml) while installation.
Note:
Only IPv4 is supported.
- Port
- Consumer NFs need port information along with fqdn/ip address to send the 5G signaling traffic to SCP for routing.
- Port is <global.publicSignalingPort> as provided in helm chart (values.yaml) while SCP installation.
SCP Config Service
- FQDN
- Operator may use SCP Config service's FQDN to configure the SCP for routing.
- K8s service FQDN will
be of the form as below:
- fqdn = scpc-config-svc.<namespace>.<domain> where, namespace is K8s namespace as provided during helm installation, and domain is as provided in helm chart (values.yaml) while installation.
- Operator need to make sure that this fqdn is resolvable, if operating from outside of K8S cluster.
- IP Address
- Consumer NFs may use SCP Config service's IP Address to configure the SCP for routing.
- <scpc-soothsayer.configService.publicConfigIP>, as provided in helm chart (values.yaml) while installation.
- Port
- Operator needs port information along with fqdn/ip address to configure the SCP for routing.
- Port is 8081 that is a fixed port (not configurable).
Configuring CanaryRelease Options
The CanaryRelease inspects the version (API version) attribute of the NF Service profile published by the NFs (during NF registration/update) and can identify the release as a canary version if the version matches the configured value. There are two versions of API, Production version that is older version and Canary version that is the newer version of the service instance. The SCP distributes traffic between Production version and the Canary versions based on operator configuration.
User can configure CanaryRelease options. The supported operations are LIST, GET, and PATCH.Following REST message samples provide the details about the operations and parameters for CanarayRelease Options. The default values of parameters related to CanaryRelease are mentioned in the following samples, however, user can modify these values. These parameters are applicable at POD level.
REST Message Samples
URL: /soothsayer/v1/ canaryrelease/
Port: 8081
[{
"canaryReleaseFlag": false,
"serviceName": "nudm-uecm"
"apiFullVersion": "1.R15.1.0",
"canaryTraffic": 5
}
...
]
Example:
curl --header 'Content-type: application/json' --header 'accept: application/ json' --request GET http://<SCP config service fqdn>:8081/soothsayer/v1/ canaryrelease/
[{
"canaryReleaseFlag": false,
"serviceName": "nudm-uecm",
"apiFullVersion": "2.R16.1.0",
"canaryTraffic": 5
}
...
]
Message
curl --header 'Content-type: application/json' --header 'accept: application/json' --request GET http://<SCP config service fqdn>:8081/soothsayer/v1/canaryrelease/
[{
"canaryReleaseFlag": false,
"serviceName": "nudm-uecm",
"apiFullVersion": "2.R16.1.0",
"canaryTraffic": 5
}
...
]
Field Name and Type: canaryReleaseFlag <Boolean>
Description: Enable/Disable canary release support. Set the value of field canaryReleaseFlag and mention serviceName for which the configuration is needed in the resource path of below Curl Command.
Default Value: null
curl --header "Content-Type: application/json" --request PATCH --data '{
"canaryReleaseFlag": true
}' http://<SCP config service fqdn>:8081/soothsayer/v1/canaryrelease/<serviceName>
Field Name and Type: apiFullVersion <String>
Description: The API full version of the canary service. Set the value of field apiFullVersion and mention serviceName for which the configuration is needed in the resource path of below Curl Command.
Default Value: null
Message: apiFullVersion UPDATE Commandcurl --header "Content-Type: application/json" --request PATCH --data '{
"apiFullVersion": "2.R16.1.0"
}' http://<SCP config service fqdn>:8081/soothsayer/v1/canaryrelease/<serviceName>
Field Name and Type: canaryTraffic <Integer>
Description: The traffic that should be distributed to Canary release. Set the value of field canaryTraffic and mention serviceName for which the configuration is needed in the resource path of below Curl Command.
Default Value: null
curl --header "Content-Type: application/json" --request PATCH --data '{
"canaryTraffic": 10
}' http://<SCP config service fqdn>:8081/soothsayer/v1/canaryrelease/<serviceName>
Configuring Routing Options
SCP acts as a proxy and forwards or routes any 5G ingress service request to the host (5G NF) present in the request's URI.
- Routing based on IMSI and MSISDN only.
- Routing based on SUPI and GPSI is supported based on the start and end attributes only as published in NFProfile and routing based on the pattern attribute is not supported.
- Only IPv4 IP family.
- Every producer NFs are required to publish IpEndPoints for each NFServices in NFProfile while registering with NRF.
- Routing Scope: Site
- DB Sync Status: No Sync, Site Wide
- Load Balancing and alternate routing is based on DB Sync Status within Site.
- Load Balancing Algorithm: Priority only
(and capacity).
- Load Balancing across the equivalent NFs/NF Services is based on priority and capacity.
Types of routing options
- Pod Level Routing Options: Controls routing across the pods of selected NF.
- Service Level Routing Options: Controls routing of selected NF services.
Parameters for Configuring Routing Options
Table 3-1 provide details of the parameters for configuring Routing Options.Table 3-1 Parameters for RoutingOptions
Parameter Name | Description | Applicable to NF Service Level | Default Values | Value Range | Applicable to Pod level within NF | Values |
---|---|---|---|---|---|---|
Response Timeout | When response timeout expires, then SCP initiates alternate rerouting to available alternate NF or Pod. | Yes | 1000 ms | 100-10000 ms | Yes | 1 s
Supported values can be in 's' or 'ms', where 's' is seconds and 'ms' is milli seconds. |
Total transaction lifetime |
|
Yes | 6 seconds | 100 - 240000 | Yes | 6 seconds |
Max Routing attempts |
|
Yes | 3 | 1-5 | Yes | 2 |
Reroute on Response Code |
|
5xx, which includes gateway-error
(502, 503, 504.) connect-failure, refused-stream.
retriable-4xx (409) |
- | - | ||
Actions |
Supported actions
|
Yes | Forward | |||
Load Balancing Algorithm |
Priority Only: Use priority as the first level criteria. Use capacity as second level criteria |
Yes | Priority Only | Yes | Round Robin | |
Default Priority |
|
Yes | 1 | No | - | |
Default Capacity |
|
Yes | 65535 | No | - | |
reverseProxySupport |
Flag used to enable reverse proxy support for a service. In reverse proxy mode all the requests will have authority as SCP. SCP will forward those requests to respective Producers after making required authority changes in the requests (both initial and subsequent). Currently reverse proxy mode is supported only for some interfaces. If the flag is set to false then transparent proxy mode is enabled. If reverseProxySupport flag is set to true then it will supersede the initialServiceRequest.routePolicy irrespective if it is set to 'Forward_Route' and create rules for initial messages in Load_balance way. |
Yes | false | No | true, false | |
Exceptions | Resource Exhausted Action
|
Yes | Abandon with no Answer | No | ||
No Producer Response Action
|
Yes | Send Answer with configured http status code (Default 503). | No | |||
Connection Failure Action
|
Yes | Send Answer with configured http status code (Default 503). | No | |||
Host not found Action
|
Yes | Send Answer with configured http status code (Default 503). | No | |||
DB Lookup Error
|
Yes | Send Answer with configured http status code (Default 500). | No | |||
reRouteOnResponseCodeList | Reroute on Response Code List:
Supported values:
|
No | - | Yes |
|
|
nfServiceLoadBasedCongestionControl | NF Service Load Based Congestion
Control
Rules are updated with new Load as soon as Notification with updated NF profile with updated load is received by SCP and then SCP check rules before routing each request. If SCP is not able to do alternate routing then SCP will forward the message to the NF picked initially that is overloaded NF. In throttling case, it would discard message if not possible to alternate route. |
Yes |
Default Value: alternateRoutingOnsetThresholdPercent: 80 alternateRoutingAbatementThresholdPercent: 75 throttleOnsetThresholdPercent: 90 throttleAbatementThresholdPercent: 85 responseErrorCode: 503 |
- | - | |
deploymentModel |
Deployment model of the NF/NF service.
|
Yes | SITE_WIDE | Yes | SITE_WIDE | |
initialServiceRequest | It takes routePolicy and reroutePolicy for initial service request. | |||||
subsequentServiceRequest | It takes routePolicy and reroutePolicy for subsequent service request. |
Table 3-2 deploymentCHF
Enumeration value | CHF Deployment |
---|---|
REGIONAL | Regional CHF deployment that is CHFs are deployed in Primary region and Secondary region. A region may consist of one or more locality. |
SITE_WIDE | Site specific CHF deployment that is CHF instances are deployed as per SCP's Site deployment. |
PRIMARY_SECONDARY_PAIR | Primary and Secondary CHF deployment using ChfServiceInfo. Primary and Secondary CHF instance info is published in ChfServiceInfo while registering with NRF. |
Table 3-3 initialServiceRequest
routePolicy | reroutePolicy |
---|---|
Load_Balance |
Reroute options
|
Forward_Route |
Table 3-4 subsequentServiceRequest
routePolicy | reroutePolicy |
---|---|
Load_Balance |
Reroute options
|
Forward_Route |
Engineering Configurations
This table defines the min and max ranges for Response Timeout, Max Routing attempts and Total transaction lifetime parameters.
Table 3-5 Engineering Configurations
Name | Type | Attribute | Description |
---|---|---|---|
Table_Name | String | Composite Primary Key | Name of the table which will be using this record. Example. ROUTING_OPTIONS |
Parameter | String | Composite Primary Key | Name of the engineering configurable parameter. Example. responseTimeOut in ROUTING_OPTIONS |
Value | JSON | Value of the engineering configurable parameter.
Example:
|
Configuring Operations for Routing Options
User can configure routing options by using the operations LIST, GET, PUT and PATCH.
The following sections provide sample details of the operations to configure routing options.
Request_Type: PUT
URL: /soothsayer/v1/routingoptions/
Port: 8081
curl --header 'Content-type: application/json' --header 'accept: application/json' --request GET http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/<serviceName>
{
"pod": {
"maxRoutingAttempts": 1,
"alternateRouting": false,
"loadBalancingAlgorithm": "Round_Robin"
},
"srv": {
"name": "nudm-uecm",
"maxRoutingAttempts": 3,
"actions": "Forward",
"loadBalancingAlgorithm": "Priority_only",
"nfServiceLoadBasedCongestionControl": {
"alternateRoutingOnsetThresholdPercent": 80,
"alternateRoutingAbatementThresholdPercent": 75,
"throttleOnsetThresholdPercent": 90,
"throttleAbatementThresholdPercent": 85,
"responseErrorCode": 503
},
"defaultPriority": 1,
"defaultCapacity": 65535,
"reverseProxySupport": true,
"initialServiceRequest": {
"routePolicy": "Forward_Route",
"reroutePolicy": "RerouteWithinSite"
},
"subsequentServiceRequest": {
"routePolicy": "Forward_Route",
"reroutePolicy": "RerouteWithinSite"
}
},
"totalTransactionLifetime": "6s",
"reRouteOnResponseCodeList": [
"ALL_SERVER_ERROR",
"NOT_FOUND"
],
"responseTimeout": "1s",
"exceptionErrorResponses": [
{
"name": "Resource_Exhausted",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "No_Response",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "Connect_Failure",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "No_Host",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "Db_LookUp_Error",
"action": "Send_Answer",
"error_code": 500,
"error_response": "Session/Subscriber binding not found/look-up failure at OCSCP-SDS Service"
}
],
"deploymentModel": "SITE_WIDE",
"name": "nudm-uecm"
}
Request_Type: PUT
URL: /soothsayer/v1/routingoptions/
Port: 8081
curl -X PUT http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/namf-comm/ \
-H 'Content-Type: application/json' \
-d '{
"pod": {
"maxPendingResponses": 1000,
"maxRoutingAttempts": 2,
"alternateRouting": true,
"loadBalancingAlgorithm": "Round_Robin"
},
"srv": {
"name": "namf-comm",
"maxPendingResponses": 1000,
"maxRoutingAttempts": 3,
"actions": "Forward",
"loadBalancingAlgorithm": "Priority_only",
"nfServiceLoadBasedCongestionControl": {
"alternateRoutingOnsetThresholdPercent": 80,
"alternateRoutingAbatementThresholdPercent": 75,
"throttleOnsetThresholdPercent": 90,
"throttleAbatementThresholdPercent": 85,
"responseErrorCode": 503
},
"defaultPriority": 1,
"defaultCapacity": 65535,
"reverseProxySupport": true,
"initialServiceRequest": {
"routePolicy": "Forward_Route",
"reroutePolicy": "RerouteWithinSite"
},
"subsequentServiceRequest": {
"routePolicy": "Forward_Route",
"reroutePolicy": "RerouteWithinSite"
}
},
"totalTransactionLifetime": "6s",
"reRouteOnResponseCodeList": [
"ALL_SERVER_ERROR",
"NOT_FOUND",
"REQUEST_TIMEOUT",
"RETRIABLE_4XX",
"GONE",
"TOO_MANY_REQUESTS",
"TEMPORARY_REDIRECT",
"PERMANENT_REDIRECT"
],
"responseTimeout": "1s",
"exceptionErrorResponses": [
{
"name": "Resource_Exhausted",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "No_Response",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "Connect_Failure",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "No_Host",
"action": "Send_Answer",
"error_code": 503,
"error_response": "Service Unavailable"
},
{
"name": "Db_LookUp_Error",
"action": "Send_Answer",
"error_code": 500,
"error_response": "Session/Subscriber binding not found/look-up failure at OCSCP-SDS Service"
}
],
"deploymentModel": "SITE_WIDE",
"name": "namf-comm"
}'
Request_Type: PATCH
URL: /soothsayer/v1/routingoptions/
Port: 8081
curl -X PATCH http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/<service name> \
-H 'Content-Type: application/merge-patch+json' \
-d '{
"srv": {
"name": "nudm-uecm",
"reverseProxySupport": true
},
"exceptionErrorResponses": [
{
"name": "Db_LookUp_Error",
"action": "Send_Answer",
"error_code": 500,
"error_response": "Session/Subscriber binding not found/look-up failure at OCSCP-SDS Service"
}
]
}
}'
Configuring Mediation Options
Mediation service supports 5G HTTP2 message manipulation techniques. SCP allows routing of messages to mediation service based on specific parameters. These parameters may include NfType, NfService, MessageType, any standard HTTP2 header and/or Information Elements from JSON payload.
Configuration parameters
Table 3-6 Mediation Configuration
Filed Name | Type | Description |
---|---|---|
nfType | enum NFType | NFType for which mediation configuration is to be done |
nfService | String | Service of NFType for which mediation configuration is to be done |
messageType | String | Message of Service for which mediation configuration is to be done |
match | Match | List of match blocks to be satisfied for the rule to
be activated. The list of match blocks have OR semantics.
Minimum number of blocks = 1 Maximum number of blocks = 20 |
groupId | String | groupId for which mediation configuration is to be done. Mediation configuration for a specific group shall be applicable to the mediation requests/ responses received from the same group only. HTTP Mediation service consumer NFs which requires same mediation rules can be grouped together using this groupId. |
Trigger Points | triggerPoints | List of trigger points to be enabled if matches. One or more of
following:"requestIngress", "requestEgress", "responseIngress", "responseEgress" |
Match
Table 3-7 Match
Field | Data Type | Description | Required |
---|---|---|---|
name | String | Unique name for the match block within this configuration. | Yes |
headers | HeaderBodyMatch[] |
List of header name and header value to match using MatchType comparison. All conditions inside a single header block have AND semantics. Minimum number of elements/conditions = 1 Maximum number of elements/conditions = 5 |
anyOf (either or both) |
body | HeaderBodyMatch[] |
List of "body IE" JSON Pointer and value at that Pointer to match using MatchType comparison. All conditions inside a single body block have AND semantics. Minimum number of elements/conditions = 1 Maximum number of elements/condition = 5 |
anyOf (either or both) |
HeaderBodyMatch
Table 3-8 HeaderBodyMatch
Field | Data Type | Description | Required |
---|---|---|---|
name | String |
Name of the header or the bodyIE JSON Pointer. Notes:List of predefined headers available at in this section. JSON Pointer must point to basic data types. Arrayed and Object values are not supported. |
Yes |
match_type | MatchType | One of the supported match operator. | Yes |
value | String |
Value of header or bodyIE to be matched. value is only required if match_type is not range. |
Conditional |
start | Integer | Range start (inclusive). Only used when match_type is range. | Conditional |
end | Integer | Range end (inclusive). Only used when match_type is range. | Conditional |
MatchType
Table 3-9 MatchType
Field | Data Type | Description | Required |
---|---|---|---|
exact | String | Matching is performed using exact comparison | oneOf |
prefix | String | Matching is performed using prefix comparison | oneOf |
regex | String | Matching is performed using ECMAScript Regular Expression comparison | oneOf |
range | String | Matching is performed using range comparison | oneOf |
Configuring Operations for Mediation Options
User can configure routing options by using the operations GET, PUT, PATCH and DELETE.
The following sections provide sample details of the operations to configure mediation options.
Request_Type: GET
URL: /soothsayer/v1/mediationconfiguration/
[
{
"nfType": "AUSF",
"nfService": "nausf-auth",
"messageType": "ue-authentications",
"match": [
{
"name": "invalid-suci",
"body": [
{
"name": "/supiOrSuci",
"value": ".*0-0-0.*",
"match-type": "regex"
}
]
}
],
"triggerPoints": [
"requestIngress"
],
"groupId": "scp",
"id": "ausf@nausf-auth@ue-authentications"
}
]
Request_Type: PUT
URL: /soothsayer/v1/mediationconfiguration/
'{
"nfType":"AUSF",
"nfService":"nausf-auth",
"messageType":"ue-authentications",
"match":[
{"name":"invalid-suci",
"body":[
{"name":"/supiOrSuci",
"value":".*0-0-0.*",
"match-type":"regex"}]}],
"triggerPoints":["requestIngress"],"groupId":"scp"
}'
Request_Type: PATCH
URL: /soothsayer/v1/mediationconfiguration/
'{
"triggerPoints":["requestIngress", "responseEgress"],
"groupId":"scp"
}'
Request_Type: DELETE
URL: /soothsayer/v1/mediationconfiguration/
curl -X DELETE "http://10.178.254.214:32655/soothsayer/v1/mediationconfiguration/NRF?serviceName=nnrf-disc" -H "accept: text/plain"
Configuring MessagePriority Options
Message Priority assignment/override is supported for below 5G NFs. User can configure routing options by using the operations LIST, GET, PUT and PATCH.
- NRF
Message Priority assignment/override is supported for below NF services:
- Nnrf_NFManagement
Service
- All message supported except Notification Callback messages.
- Nnrf_NFDiscovery Service
- Nnrf_NFManagement
Service
- UDM
Message Priority assignment/override is supported for below NF services:
- Nudm_SubscriberDataManagement Service
- Nudm_UEContextManagement Service
- Nudm_UEAuthentication Service
- Nudm_EventExposure Service
- Nudm_ParameterProvision Service
- PCF
Message Priority assignment/override is supported for below NF services:
- Npcf_AMPolicyControl Service
- Npcf_SMPolicyControl Service
- Npcf_PolicyAuthorization Service
- Npcf_BDTPolicyControl Service
- CHF
Message Priority assignment/override is supported for below NF services:
- Nchf_SpendingLimitControl
- Nchf_ConvergedCharging
- AUSF
Message Priority assignment/override is supported for below NF services:
- Nausf_UEAuthentication
"3gpp-Sbi-Message-Priority" header carries the message priority of 5G messages. The SCP includes/modifies the header based on the configuration parameters.
HTTP2 stream priorities are valid only per connection, it is not an E2E mechanism so to have it:
- 3gpp-Sbi-Message-Priority header contains the HTTP/2 message priority value anything between 1 to 256. The default is 16.
Table 3-10 Configuring Parameters for MessagePriority Options
Operation | Parameter | Type | Description | REST Command |
---|---|---|---|---|
LIST | - | - | - |
|
GET | - | - | - |
|
PUT | requestResponse | Enum |
|
Set the value of field requestResponse and masterIP and
Configuration as REQUEST or RESPONSE in the curl command below
requestResponse
UPDATE Command
|
nfServiceName | String | Name of the NF Service
List of NF
Services
|
Set the value of field nfServiceName in the curl command below
nfServiceName
UPDATE Command
|
|
messageType | String | Message type for given service name MessageType List | Set the value of field messageType for the mentioned NF Service
in the curl command below
messageType UPDATE
Command
|
|
whenHeaderPresent.overrideFlag | boolean | Override Flag for the case when Header is Present | Set the value of field overrideFlag section in the curl command
below
overrideFlag UPDATE
Command
|
|
whenHeaderPresent.headerValue | String | Value of the priority header for the corresponding flag for the case when Header is Present | Set the value of field headerValue section in the curl command
below
headerValue UPDATE
Command
|
|
whenHeaderNotPresent.overrideFlag | boolean | Override Flag for the case for the case when Header is not Present | Set the value of field overrideFlag section in the curl command
below
overrideFlag UPDATE
Command
|
|
whenHeaderNotPresent.headerValue | String | Value of the priority header for the corresponding flag for the case when Header is not Present | Set the value of field headerValue section in the curl command
below
headerValue UPDATE
Command
|
|
PATCH | String | Modify message priority options for a particular service and message type. |
|
Configuring SystemOptions
These options are used to control system behavior per service-wide. The user can configure SystemOptions by using the operations GET and PUT.
Note:
Default systemOptions are provided during the installation of Service Communication Proxy through helm.REST Message sample
Request_Type: GET and PUT
http://<Soothsayerfqdn>:8081/soothsayer/v1/systemoptions
{
"cbEnabled": false,
"odEnabled": false,
"trafficPolicy": {
"connectionPool": {
"http": {
"http2MaxRequests": 1000,
"idleTimeout": "3600s"
},
"tcp": {
"connectTimeout": "250ms",
"tcpKeepalive": {
"probes": 9,
"time": "180s",
"interval": "60s"
}
}
},
"outlierDetection": {
"consecutiveErrors": 5,
"interval": "10s",
"baseEjectionTime": "30s",
"maxEjectionPercent": 100
}
}
}
Table 3-11 provides SystemOptions for the GET and PUT operations.
Table 3-11 Configuring Parameters for SystemOptions
Operation | Parameter | Value | Description |
---|---|---|---|
GET | - | - | Get System Options |
PUT | cbEnabled | Boolean | Provides information whether the Circuit-Breaking is
enabled or not.
Default is false |
odEnabled | Boolean | Provides information whether the Outlier-Detection is
enabled or not.
Default is false |
|
trafficPolicy.connectionPool.http.http2MaxRequests | Integer | Maximum number of requests to a backend. Default is 1024. | |
trafficPolicy.connectionPool.http.idleTimeout | String | The idle timeout for upstream connection pool connections. The idle timeout is defined as the period in which there are no active requests. If not set, there is no idle timeout. When the idle timeout is reached the connection will be closed. Note that request based timeouts mean that HTTP/2 PINGs will not keep the connection alive. Default is 3600s. | |
trafficPolicy.connectionPool.tcp.connectTimeout | String | TCP Connection timeout. Valid time units are ns, us (or µs), ms, s. For example: 300ms. | |
trafficPolicy.connectionPool.tcp.tcpKeepalive | TcpKeepalive | Contains TcpKeepalive information. If set, enable TCP Keepalives to upstream peer. All the parameters of tcpkeepAlive are needed if this information is being configured. | |
trafficPolicy.connectionPool.tcp.tcpKeepalive.probes | Integer |
Maximum number of keepalive probes to send without response before deciding the connection is dead. For example: 9 Default is to use the OS level configuration (unless overridden, Linux defaults to 9.) |
|
trafficPolicy.connectionPool.tcp.tcpKeepalive.time | String |
The time duration a connection needs to be idle before keep-alive probes start being sent. Valid time units are ns, us (or µs), ms, s. For example: 180s Default is to use the OS level configuration (unless overridden, Linux defaults to 7200s (i.e. 2 hours.) |
|
trafficPolicy.connectionPool.tcp.tcpKeepalive.interval | String |
The time duration between keep-alive probes. Valid time units are ns, us (or µs), ms, s. For example: 60s Default is to use the OS level configuration (unless overridden, Linux defaults to 75s.) |
|
outlierDetection.consecutiveErrors | Integer | Number of errors before a host is ejected from the connection pool. Defaults to 5. When the upstream host is accessed over HTTP, a 502, 503 or 504 return code qualifies as an error. When the upstream host is accessed over an opaque TCP connection, connect timeouts and connection error/failure events qualify as an error. | |
outlierDetection.interval | String | Time interval between ejection sweep analysis. format: 1h/1m/1s/1ms. Must be >=1ms. Default is 10s. | |
outlierDetection.baseEjectionTime | String | Minimum ejection duration. A host will remain ejected for a period equal to the product of minimum ejection duration and the number of times the host has been ejected. This technique allows the system to automatically increase the ejection period for unhealthy upstream servers. format: 1h/1m/1s/1ms. Must be >=1ms. Default is 30s. | |
outlierDetection.maxEjectionPercent | Integer | Maximum % of hosts in the load balancing pool for the upstream service that can be ejected. Defaults to 10%. |
Configuring Circuit Breaking and Outlier Detection
Outlier detection in SCP tracks the status of each individual endpoint of the producer NFs/NF Services. Upstream producer endpoints that continually returns 5xx errors for service requests are ejected from the routing pool for a pre-defined period of time.
Outlier detection is a form of passive health checking of producer NFs. Outlier detection is per endpoint (of producer NF instance) and triggers when SCP receives consecutively 5xx error response and exceeds the configurable number of consecutive 5xx errors.
Circuit breaking is triggered on a per FQDN basis when its outstanding transactions exceeds a configurable value. When circuit breaking is activated, requests are alternate routed if possible or rejected.
Operator configuration:
- Enable/Disable the circuit breaking on a per NF or FQDN basis.
- Outstanding transactions threshold beyond which Circuit breaking shall be invoked on a per NF or FQDN basis.
Table 3-12 provides information about the configuring parameters for outlier detection.
Note:
Circuit Breaking and Outlier Detection are global or system wide options.Table 3-12 Outlier Detection Parameters
Parameter | Value | Description | Example | ||||
---|---|---|---|---|---|---|---|
cbEnabled | Boolean | This tells whether Circuit-Breaking is enabled or not. Default: False |
Set the value of field cbEnabled in the curl command below:
|
||||
odEnabled | Boolean | This tells whether Outlier-Detection is enabled or not. Default: False |
Set the value of field odEnabled in the curl command below:
|
||||
trafficPolicy.connectionPool.http.http2MaxRequests | Integer | Maximum number of requests to a backend. Default 1024. | Set the value of field http2MaxRequests
under trafficPolicy.connectionPool.http in the curl command below:
|
||||
outlierDetection.consecutiveErrors | Integer | 5G defined NF Type. For example, BSF, UDR, UDSF, etc. | Set the value of ConsecutiveErrors
field under outlierDetection in the curl command below consecutiveErrors
UPDATE Command
|
||||
outlierDetection.interval | String | Time interval between ejection sweep analysis.
Format: 1h/1m/1s/1ms. MUST BE >=1ms. Default is 10s |
Set the value of interval field
under outlierDetection in the curl command below interval UPDATE
Command
|
||||
outlierDetection.baseEjectionTime | String | Minimum ejection duration.
Format: 1h/1m/1s/1ms. MUST BE >=1ms. Default is 30s. |
Set the value of field baseEjectionTime under
outlierDetection in the curl command below baseEjectionTime
UPDATE Command
|
||||
outlierDetection.maxEjectionPercent | Integer | Maximum percentage of hosts in the load balancing pool for the upstream service that can be ejected. | Set the value of field maxEjectionPercent under
outlierDetection in the curl command below maxEjectionPercent
UPDATE Command
|
Configuring NF Service Groups
SCP provides NF/Service Group Configuration, where the operator provides the primary and secondary CHF instance information to create the routing rules based on the CHF NF topology information provided by the NRF via NF register/reregister/change notifications.
Parameters for Configuring NF Service Groups
Table 3-13 Parameters for NF Service Groups
Resource Name | Resource URI | HTTP method or custom operation | Description |
---|---|---|---|
servicegroups |
{apiRoot}/soothsayer/v1/servicegroups/{serviceName}
Ex: {apiRoot}/soothsayer/v1/servicegroups/nchf-spendinglimitcontrol |
GET | Returns the NF Service for a given serviceName. |
servicegroups |
{apiRoot}/soothsayer/v1/servicegroups?nfType=value
Ex: {apiRoot}/soothsayer/v1/servicegroups?nfType=CHF |
GET | Returns a list of NF Services for a given NF Type. |
servicegroups | {apiRoot}/soothsayer/v1/servicegroups | PUT | Updates the NF Service. |
servicegroups |
{apiRoot}/soothsayer/v1/servicegroups?nfType=value&serviceName=value
Ex: {apiRoot}/soothsayer/v1/servicegroups?nfType=CHF&serviceName=nchf-spendinglimitcontrol |
PATCH | Updates a single NF Service based on serviceName or Updates multiple NF Services based on NF Type. |
servicegroups |
{apiRoot}/soothsayer/v1/servicegroups/{serviceName}
Ex: {apiRoot}/soothsayer/v1/servicegroups/nchf-spendinglimitcontrol |
DELETE | Deletes the given NFService with serviceName. |
servicegroups |
{apiRoot}/soothsayer/v1/servicegroups?nfType=value
Ex: {apiRoot}/soothsayer/v1/servicegroups?nfType=CHF |
DELETE | Deletes all the services for a given NF Type. |
Resource Definition
Table 3-14 Supported Parameters
Query Parameter | Request Body | HTTP method or custom operation | Data type | P | Cardinality | Response Codes | Description |
---|---|---|---|---|---|---|---|
servicename | n/a | GET | NFServiceGroup | M | 1 | 200 OK | Upon success, a response body is returned containing the NFServiceGroup for requested Service Name. |
String | M | 1 | 404 NOT FOUND | The response body contains the message indicating that the there were no services found for the requested Service Name. | |||
serviceName: Optional nfType: Optional Note: Either one of above parameters are mandatory. Both cannot be left empty. | NFServiceGroupModifiableFields object with any of the attributes. Note: Data Model for this request body is provided in "Data Models" section. | PATCH | String | M | 1 | 200 OK |
Upon success, following message is returned: Updated NF Service with serviceName: nchf-spendinglimitcontrol |
String | M | 1 | 403 FORBIDDEN | primaryRegionLocalities can not be empty or its size cannot be zero. | |||
String | M | 1 | 400 BAD REQUEST | If both request parameters are missing then Bad Request error would be returned with following message: Please pass either serviceName or nfType. | |||
serviceName | n/a | DELETE | String | M | 1 | 200 OK |
Upon success, following message is returned: Successfully deleted the Nf Service for ServiceName: nchf -
spendinglimitcontrol
|
nfType | n/a | GET | List<NFServiceGroup> | M | 1 | 200 OK | Upon success, a response body is returned containing a List of NFServiceGroup's for requested nfType. |
String | M | 1 | 404 BAD REQUEST | Required parameter 'nfType' is not present. | |||
DELETE | String | M | 1 | 200 OK |
Upon success, following message is returned: Successfully deleted all Services for NFType : CHF. |
||
n/a | "NFServiceGroup" object with updated fields. Note: Sample data is provided in Example column and also the "Data Model" for this Request Body could be found in the "Data Models" section. | PUT | NFServiceGroup | M | 1 | 200 OK | Upon success, a response body is returned containing the updated NFServiceGroup object. |
String | M | 1 | 403 FORBIDDEN | Not allowed to modify NfType or serviceName of NFServiceGroup. | |||
String | M | 1 | 400 BAD REQUEST |
If any of the mandatory parameters are missing in the Request Body, then BAD REQUEST error would be returned. Note: Refer to Data Model for Mandatory parameters. |
|||
String | M | 1 | 400 BAD REQUEST |
If "primaryRegionLocalities" attribute in Request Body is assigned with empty list, then a BAD REQUEST error would be returned as this value cannot be empty. Response message: Primary Region Localities for a NF Service cannot be Null or empty. |
Data Models for NF Service Groups
Table 3-15 NFServiceGroup
Field Name | Type | P | Description(With default Values) |
---|---|---|---|
nfType | Enum | M | NRF, UDM, AMF, SMF, AUSF, NEF, PCF, SMSF, NSSF, UDR, LMF, GMLC, 5GEIR, SEPP, UPF, N3IWF, AF, UDSF, BSF, CHF, NWDAF, CUSTOM_ORACLE_SCP Note: This parameter cannot be modified. |
serviceName | String | M | Only CHF Services are supported currently: nchf-convergedcharging, nchf-spendinglimitcontrol Note: This parameter cannot be modified. |
primaryRegionLocalities | List<String> | M | This parameter can be modified but, empty values cannot be assigned to this parameter. |
secondaryRegionLocalities | List<String> | O | This is an optional parameter and can also be modified. |
ReroutePolicy
Table 3-16 ReroutePolicy
Field Name | Type | P | Description(With default Values) |
---|---|---|---|
rerouteOptions | Enum | M | Possible values: RerouteDisabled, RerouteWithinRegion, RerouteAcrossRegion |
Table 3-17 NFServiceGroupModifiableFields
Field Name | Type | P | Description(With default Values) |
---|---|---|---|
primaryRegionLocalities | List<String> | O | This parameter can be modified but, empty values cannot be assigned to this parameter. |
secondaryRegionLocalities | List<String> | O |
Configuring Operations for NF Service Groups
User can configure routing options by using the operations GET, PUT and PATCH.
The following table provides sample details of the operations to configure routing options.
Table 3-18 NF Service Groups Operations
GET |
|
PUT |
|
PATCH |
|
Configuring NF Topology Groups
This section describes the configuration at SCP, which allows SCP to learn the 5G topology from NRF and use it for creating the routing rules or stop learning the 5G topology info NRF and use the user configured/updated NF profiles (SCP will not delete any already learned 5G topology info from NRF, when it stops learning from NRF).
5G Topology source info
This is the configuration which will be used by SCP to determine the 5G topology source and SCP will learn and create the routing rules accordingly.Table 3-19 TopologySourceInfo
NF Type (M) | 5G topology source (M) |
---|---|
|
|
Enumeration: TopologySource
Table 3-20 Enumeration: TopologySource
Enumeration value | Description |
---|---|
"NRF" |
SCP 5G Topology info source is NRF. |
"LOCAL" |
SCP 5G Topology info source is user configured and not from NRF. This status may result from a NF Service failure and
may trigger restoration procedures (see clause 6.2 of 3GPP
23.527 [27]).
|
Table 3-21 Resources and Methods Overview
Resource name | Resource URI | HTTP method or custom operation | Request Body, Query Parameters | Response Status code, Body | Description |
---|---|---|---|---|---|
topologysource | {apiroot}/soothsayer/v1/topologysource | PUT |
Body
|
200 OK |
Create/update the topology source info for all the NF types. |
GET |
Query Parameters
|
Read the topology source info for all the NF types. | |||
NFtopologysource (individual NF types) |
{apiroot}/soothsayer/v1/ topologysource/{NFType} | PUT |
Body
|
200 OK | Create/update the topology source info for a specific NF type. |
GET |
Query Parameters
|
Read the topology source info for a specific NF type. |
5G NF topology Info
This is the information for configuring 5G NF Profiles for NF for which source has been set as 'Local'. User can modify the 5G NF Profile irrespective of whether they are learnt from NRF (i.e. source='NRF) or configured statically (i.e source='Local') once learning source is set to 'Local'. Setting source to Local will not delete already learnt profiles.
Table 3-22 Parameters for NF Topology Groups
Resource name | Resources and Methods Overview | HTTP method or custom operation | Request Body, Query Parameters | Response Status code, Body | Description |
---|---|---|---|---|---|
nf-instances (Store) | {apiRoot}/soothsayer/v1/nf-instances/ | GET | Query Parameters
|
|
Read a collection of NF Instances. |
{apiRoot}/soothsayer/v1/nf-instances/nfInstanceIds | GET | Query Parameters
|
|
Read a collection of NF Instance Id. | |
nf-instance (Document) | {apiRoot}/soothsyaer/v1/nf-instances/{nfInstanceID} | GET | Query Parameters
|
200 OK, NFProfile | Read the profile of a given NF Instance. |
PUT | Body
|
200 OK, NFProfile 201 Created, NFProfile | Register/configure in SCP a new NF Instance, or replace the profile of an existing NF Instance, by providing an NF profile. | ||
PATCH | Body
|
|
Modify the NF profile of an existing NF Instance. | ||
DELETE | Query
|
|
Deregister/delete from SCP a given NF Instance. |
Query Parameters
Table 3-23 Query Parameters
Name | Data Type | P | Cardinality | Description | Applicability |
---|---|---|---|---|---|
nf-type | NFType | M | 1 | This IE shall contain the NF type of the NF Service Producer being queried. | NF type of the NF Instances whose status is requested to be monitored. |
service-names | array(ServiceName) | O |
1..N |
If included, this IE contains an array of service names for which the SCP is queried to provide the list of NF profiles. The SCP returns the NF profiles that have at least one NF service matching the NF service names in this list. If not included, the NRF returns all the NF service names registered in the NF profile. | Service name offered by the NF Instances whose status is requested to be monitored. This parameter is optional but if provided it returns with NF profile information. |
nf-instance-id | NfInstanceId | O |
0..1 |
Identity of the NF instance being queried. | NF Instance ID of the NF Instance whose status is requested to be monitored. |
limit | integer | O |
0..1 |
Maximum number of NFProfiles to be returned in the response. | Query-Params-Ext1 |
max-payload-size | integer | O |
0..1 |
Maximum payload size (before compression, if any) of the response, expressed in kilo octets. When present, the NRF limits the number of NF profiles returned in the response such as to not exceed the maximum payload size indicated in the request. Default = 124. Maximum = 2000 (i.e. 2 Mo). | Query-Params-Ext1 |
SearchResult
Table 3-24 SearchResult
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
nfInstances | array(NFProfile) | M |
1..N |
It contains an array of NF Instance profiles, matching the search criteria indicated by the query parameters of the query request. An empty array means there is no NF instance that can match the search criteria. |
uriList
Table 3-25 uriList
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
_links | map(LinksValueSchema) | O |
1..N |
See clause 4.9.4 of 3GPP TS 29.501 for the description of the members |
Configuring NFProfile
Following are the minimum information required by SCP for statically configuring NFProfile.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-26 Configuring NFProfile
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
nfInstanceId | String | M | 1 | Identity of the NF instance being queried. |
nfType | NFType | M | 1 | This IE contains the NF type of the NF Service Producer being queried. |
nfStatus | NFStatus | M | 1 | This contains the NF status of NF Service Producer. |
nsiList | array(String) | O | 0..N | Only returned in case of NFType is SMF and if provided. |
fqdn | String | O | 0..1 | FQDN of the Network Function. |
interPlmnFqdn | String | O | 0..1 | If the NF needs to be discoverable by other NFs in a different PLMN, then an FQDN that is used for inter-PLMN routing. |
ipv4Addresses | array(String) | O | 0..N | IPv4 address(es) of the Network Function. |
priority | Integer | O | 0..1 | Priority (relative to other NFs of the same type) in the range of 0-65535, to be used for NF selection; lower values indicate a higher priority. |
locality | String | O | 0..1 | Operator defined information about the location of the NF instance. |
udmInfo | UDMInfo | O | 0..1 | Specific data for the UDM (ranges of SUPI, group ID…) |
ausfInfo | AUSFInfo | O | 0..1 | Specific data for the AUSF (ranges of SUPI, group ID…) |
amfInfo | AMFInfo | O | 0..1 | Specific data for the AMF (AMF Set ID, …) |
smfInfo | SMFInfo | O | 0..1 | Specific data for the SMF (DNN's, …). |
pcfInfo | PCFInfo | O | 0..1 | Specific data for the PCF |
chfInfo | CHFInfo | O | 0..1 | Specific data for the CHF |
nfServices | array(NFService) | O | 0..N | List of NF Service Instances. It includes the services produced by the NF that can be discovered by other NFs, if any. |
servingScope | String | O | 0..1 |
If not provided it is taken as "default". It must lie under servingScope of SCP or else the Profile would be rejected. If servingScope of SCP is not provided, it must be left empty. If servingScope of SCP is provided, then it must be set to any one of the configured servingScope. Note: servingScope is SCP introduced parameter and used only for NRF profiles or Statically configured profiles. |
Configuring UDMInfo
Following are the minimum information required by SCP for statically configuring UDMInfo.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-27 Configuring UDMInfo
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
supiRanges | array(SupiRange) | O | 0..N | List of ranges of SUPI's whose profile data is available in the UDM instance. |
gpsiRanges | arrray(IdentityRange) | O | 0..N | List of ranges of GPSIs whose profile data is available in the UDM instance. |
Configuring AUSFInfo
Following are the minimum information required by SCP for statically configuring AUSFInfo.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-28 Configuring AUSFInfo
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
supiRanges | array(SupiRange) | O | 1..N | List of ranges of SUPIs that can be served by the AUSF instance. If not provided, the AUSF can serve any SUPI. |
routingIndicators | array(String) | O | 0..N | List of Routing Indicator information that allows to route network signalling with SUCI (see 23.003 [12]) to the AUSF instance. If not provided, the AUSF can serve any Routing Indicator. |
GroupId | String | O | 0..1 | Identity of the AUSF group. If not provided, the AUSF instance does not pertain to any AUSF group. |
Configuring AMFInfo
Following are the minimum information required by SCP for statically configuring AMFInfo.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-29 Configuring AMFInfo
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
guamiList | array(Guami) | M | 1..N | List of supported GUAMIs |
Configuring SMFInfo
Following are the minimum information required by SCP for statically configuring SMFInfo.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-30 Configuring SMFInfo
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
sNssaiSmfInfoList | array(SnssaiSmfInfoItem) | M | 1..N | List of parameters supported by the SMF per S-NSSAI. |
pgwFqdn | String | O | 0..1 | The FQDN of the PGW if the SMF is a combined SMF/PGW-C |
accessType | array(AccessType) | O | 0..N | If included, this IE shall contain the access type (3GPP_ACCESS and/or NON_3GPP_ACCESS) supported by the SMF. If not included, it is assumed the both access types are supported. |
Configuring PCFInfo
Following are the minimum information required by SCP for statically configuring PCFInfo.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-31 Configuring PCFInfo
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
supiRanges | array(SupiRange) | O | 1..N | List of ranges of SUPIs that can be served by the PCF instance. If not provided, the PCF can serve any SUPI. |
Configuring CHFInfo
Following are the minimum information required by SCP for statically configuring CHFInfo.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-32 Configuring CHFInfo
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
supiRangeList | array(SupiRange) | O | 1..N | List of ranges of SUPIs that can be served by the CHF instance. If not provided, the CHF can serve any SUPI. |
gpsiRangeList | arrray(IdentityRange) | O | 0..N | List of ranges of GPSI that can be served by the CHF instance. If not provided, the CHF can serve any GPSI. |
Configuring NFService
Following are the minimum information required by SCP for statically configuring NFService.
Note: All the below mentioned parameters are according to spec 3GPP TS 29.510 and any parameters other than below mentioned are not used in SCP.Table 3-33 Configuring NFService
Attribute name | Data type | P | Cardinality | Description |
---|---|---|---|---|
serviceInstanceId | String | M | 1 | Unique ID of the service instance within a given NF Instance |
serviceName | ServiceName | M | 1 | Name of the service instance (e.g. "udm-sdm") |
nfServiceStatus | NFServiceStatus | M | 1 | Status of the NF Service Instance |
versions | array(NFServiceVersion) | M | 1..N | The API versions supported by the NF Service and if available, the corresponding retirement date of the NF Service. |
scheme | UriScheme | M | 1 | URI scheme (e.g. "http", "https"). Note: Only HTTP is supported currently. |
fqdn | String | O | 0..1 | FQDN of the NF Service Instance |
ipEndPoints | array(IpEndPoint) | O | 0..N | IP address(es) and port information of the Network Function (including IPv4 and/or IPv6 address) where the service is listening for incoming service requests. Note: IPV4 is supported currently |
apiPrefix | String | O | 0..1 | Optional path segment(s) used to construct the {apiRoot} variable of the different API URIs, as described in 3GPP 29.501 [5], clause 4.4.1. |
priority | Integer | O | 0..1 | Priority (relative to other services of the same type) in the range of 0-65535, to be used for NF Service selection; lower values indicate a higher priority. |
capacity | Integer | O | 0..1 | Static capacity information in the range of 0-65535, expressed as a weight relative to other services of the same type. |
load | Integer | O | 0..1 | Dynamic load information, ranged from 0 to 100, indicates the current load percentage of the NF Service. |