Configuring Routing Options
SCP acts as a proxy and forwards or routes any 5G ingress service request to the host (5G NF) present in request 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 will be 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.
Parameters for Configuring Routing Options
Table 3-2 provides details of the parameters for configuring Routing Options.Table 3-2 Parameters for RoutingOptions
Parameter Name | Description | Applicable to NF Service Type | Default Values | Applicable to Pod level within NF | Values |
---|---|---|---|---|---|
Max Pending responses | Number of pending responses from NF/Pod | Yes | 1000 | Yes | 1000 |
Response Timeout | When response timeout expires, then SCP initiates alternate rerouting to available alternate NF or Pod. | Yes | 1 second | Yes | 1 second |
Total transaction lifetime |
|
Yes | 6 seconds | Yes | 6 seconds |
Max Routing attempts |
|
Yes | 3 | Yes | 2 |
Reroute on Response Code |
|
|
- |
|
- |
Actions |
Supported actions
|
Yes | Forward | ||
Alternate Routing |
Alternate rerouting is Enabled or Disabled
|
Yes | Enabled | Yes | Enabled |
Request Routing Scope | Site | Yes | Site | Yes | Within NF |
Status |
|
Yes | No Sync | Yes | Synced within NF |
Routing Policy |
|
Yes | Forward Proxy | NO | Load Balance (Non-configurable) |
Deployment Info (deploymentInfo) | Yes | No | |||
Load Balancing Algorithm |
Priority Only
|
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. For setting reverseProxySupport as true dbSync status should be "Site_Wide" and routingPolicy should be "Load_Balance". dbSync status should be synced and it can take other values except No_Sync. |
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 |
Deployment Info
Currently only CHF is supporting this deploymentInfo. DeploymentInfo is of type chfDeploymentInfo.
Table 3-3 deploymentInfo
Attribute Name | Data Type | P | Cardinality | Description |
---|---|---|---|---|
chfDeploymentInfo | chfDeploymentInfo | O | 1 | CHF deployment scenario, populated only in case on CHF NF services. |
This attribute is applicable for CHF NF services and it defines the CHF deployment model i.e. operator has deployed the CHF instances in the network.
Table 3-4 chfDeploymentInfo
Attribute Name | Data Type | P | Cardinality | Description |
---|---|---|---|---|
chfDeploymentModel | chfDeploymentModel | M | 1 | CHF deployment scenario, populated only in case on CHF NF services. |
subsequentRequestReroutingEnabled | boolean | O | 1 | This attribute indicates whether rerouting of
subsequent CHF service requests are enabled or not.
|
Table 3-5 chfDeploymentModel
Enumeration value | CHF Deployment |
---|---|
REGIONAL | Regional CHF deployment i.e. CHFs are deployed in Primary region and Secondary region. A region may consist of one or more locality. |
SITE_WIDE | Site specific CHF deployment i.e. CHF instances are deployed as per SCP's Site deployment. |
Configuring Operations for Routing Options
User can configure routing options by using the operations LIST, GET, PUT and PATCH.
Table 3-6 provides sample details of the operations to configure routing options.
Table 3-6 Routing Options Operations
Operation | REST Command |
---|---|
LIST |
curl --header 'Content-type: application/json' --header 'accept: application/json' --request GET http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/
[{
"pod": {
"maxPendingResponses": 1000,
"maxRoutingAttempts": 2,
"alternateRouting": true,
"loadBalancingAlgorithm": "Round_Robin"
},
"srv": {
"name": "nudm-uecm",
"maxPendingResponses": 1000,
"maxRoutingAttempts": 3,
"actions": "Forward",
"alternateRouting": true,
"scope": "Site",
"dbSyncStatus": "No_Sync",
"routingPolicy": "Forward_Proxy",
"loadBalancingAlgorithm": "Priority_only",
"nfServiceLoadBasedCongestionControl": {
"alternateRoutingOnsetThresholdPercent": 80,
"alternateRoutingAbatementThresholdPercent": 75,
"throttleOnsetThresholdPercent": 90,
"throttleOnsetThresholdPercent": 85,
"responseErrorCode": 503
},
"defaultPriority": 1,
"defaultCapacity": 65535,
"reverseProxySupport": false
},
"totalTransactionLifetime": "6s",
"reRouteOnResponseCodeList": [
"ALL_SERVER_ERROR",
"NOT_FOUND",
"REQUEST_TIMEOUT",
"RETRIABLE_4XX",
"GONE",
"TOO_MANY_REQUESTS",
"TEMPORARY_REDIRECT",
"PERMANENT_REDIRECT"
],
"responseTimeout": "1s"
},
... ]
|
GET |
curl --header 'Content-type: application/json' --header 'accept: application/json' --request GET http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/<serviceName>
{
"pod": {
"maxPendingResponses": 1000,
"maxRoutingAttempts": 2,
"alternateRouting": true,
"loadBalancingAlgorithm": "Round_Robin"
},
"srv": {
"name": "nudm-uecm",
"maxPendingResponses": 1000,
"maxRoutingAttempts": 3,
"actions": "Forward",
"alternateRouting": true,
"scope": "Site",
"dbSyncStatus": "No_Sync",
"routingPolicy": "Forward_Proxy",
"loadBalancingAlgorithm": "Priority_only",
"nfServiceLoadBasedCongestionControl": {
"alternateRoutingOnsetThresholdPercent": 80,
"alternateRoutingAbatementThresholdPercent": 75,
"throttleOnsetThresholdPercent": 90,
"throttleAbatementThresholdPercent": 85,
"responseErrorCode": 503
},
"defaultPriority": 1,
"defaultCapacity": 65535,
"reverseProxySupport": false
},
"totalTransactionLifetime": "6s",
"reRouteOnResponseCodeList": [
"ALL_SERVER_ERROR",
"NOT_FOUND",
"REQUEST_TIMEOUT",
"RETRIABLE_4XX",
"GONE",
"TOO_MANY_REQUESTS",
"TEMPORARY_REDIRECT",
"PERMANENT_REDIRECT"
],
"responseTimeout": "1s"
}
|
PUT |
curl --header "Content-Type: application/json" --request PUT --data '{
"pod": {
"maxPendingResponses": 1000,
"maxRoutingAttempts": 2,
"alternateRouting": true,
"loadBalancingAlgorithm": "Round_Robin"
},
"srv": {
"name": "nudm-uecm",
"maxPendingResponses": 1000,
"maxRoutingAttempts": 3,
"actions": "Forward",
"alternateRouting": true,
"scope": "Site",
"dbSyncStatus": "No_Sync",
"routingPolicy": "Forward_Proxy",
"loadBalancingAlgorithm": "Priority_only",
"nfServiceLoadBasedCongestionControl": {
"alternateRoutingOnsetThresholdPercent": 80,
"alternateRoutingAbatementThresholdPercent": 75,
"throttleOnsetThresholdPercent": 90,
"throttleAbatementThresholdPercent": 85,
"responseErrorCode": 503
},
"defaultPriority": 1,
"defaultCapacity": 65535,
"reverseProxySupport": false
},
"totalTransactionLifetime": "6s",
"reRouteOnResponseCodeList": [
"ALL_SERVER_ERROR",
"NOT_FOUND",
"REQUEST_TIMEOUT",
"RETRIABLE_4XX",
"GONE",
"TOO_MANY_REQUESTS",
"TEMPORARY_REDIRECT",
"PERMANENT_REDIRECT"
],
"responseTimeout": "1s"
}' http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/<serviceName>
|
PATCH |
curl -X PATCH \ http://<Soothsayerfqdn>:8081/soothsayer/v1/routingoptions/<service name> \ -H 'Content-Type: application/merge-patch+json' \ -d { "pod":{ "maxPendingResponses":500, "maxRoutingAttempts":2, "alternateRouting":true, "loadBalancingAlgorithm":"Round_Robin" }, "srv":{ "name":"nchf-spendinglimitcontrol", "maxPendingResponses":1000, "maxRoutingAttempts":3, "actions":"Forward", "alternateRouting":true, "scope":"Site", "dbSyncStatus":"No_Sync", "routingPolicy":"Forward_Proxy", "loadBalancingAlgorithm":"Priority_only", "nfServiceLoadBasedCongestionControl":{ "alternateRoutingOnsetThresholdPercent":80, "alternateRoutingAbatementThresholdPercent":75, "throttleOnsetThresholdPercent":65, "throttleAbatementThresholdPercent":92, "responseErrorCode":404 }, "defaultPriority":1, "defaultCapacity":65535, "reverseProxySupport":false, "chfDeploymentInfo":{ "chfDeploymentModel":"regional", "subsequentRequestReroutingEnabled":false } }, "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" } ] } |