Diameter resource adaptors
There are currently three diameter resource adaptor entities in Sentinel:
-
diameterro-0
— for OCS connections -
diameterro-1
— for client connections -
diameter-sentinel-internal
— used as a message factory by mappers in Sentinel’s Diameter mediation layer.
diameterro-1
is available only to the Sentinel Diameter service. diameterro-0
and diameter-sentinel-internal
are used by all Sentinel services.
Session timeouts
The default Sentinel configuration has a 10 minute timeout for diameterro-1
(client) and 13 minute timeout for diameterro-0
(OCS). This configuration ensures that if there are events dropped due to overload, the ActivityEndEvents fired on the RA entities will cause the client side to end first. The 3 minute gap is set to allow time for all the ActivityEndEvents on the client side to be delivered before any are fired on the OCS side due.
Diameter version configuration
The Diameter version spoken on the network to either the OCS or the Diameter client can be configured by setting two properties in the relevant resource adaptor.
To change the version used in the OCS dialog, diameterro-0
should be reconfigured. Likewise, to change the version used on the client dialog (Sentinel Diameter
only), diameterro-1
should be reconfigured. The Diameter version used by diameter-sentinel-internal
should not be reconfigured, as it is tied to the internal implementation of Sentinel.
When reconfiguring the Diameter version of either of the external resource adaptors, two fields must be set - Slee3GPPVersion
and 3GPPVersion
.
Slee3GPPVersion
should always be set to Vcb0
. This is the version of Diameter used by Sentinel internally.
3GPPVersion
can be set to the desired protocol version to be used over the network, ranging from V820
to Vcb0
.
Alternatively, the Diameter version spoken to the OCS can be set during installation.
OCS load balancing
Load balancing of OCS connections can be achieved using the diameterro-0
resource adaptor entity, by configuring multiple hosts within a realm and addressing messages to the realm only (not the host).
Example configuration for OCS load balancing
This example shows the diameterro-0
resource adaptor entity configured to load balance across two OCS nodes.
-
The resource adaptor entity config properties show that it is configured using a profile in the
DiameterConfig
table. -
The config profile shows that the known OCS nodes are named
diameterserver
anddiameterserver1
. -
The routing priority metric for both nodes is set to 1 to indicate equal priority, meaning that load balancing will be applied.
-
The
DiameterMediationOcsConfigurationTable
configuration profile at platform scope does not specify a host, so all outbound Diameter messages will not have the destination host set, but only the realm. This means the resource adaptor entity will round robin among all the hosts configured for the specified realm (in this caseopencloud
). However this behaviour can be overridden on a per-session basis by setting theOCSId
field in session state using, for example,SubscriberDataLookup
or a custom feature added with the SDK.
The following rhino-console
session shows the complete configuration:
[Rhino@localhost (#0)] listraentityconfigproperties diameterro-0 Configuration properties for resource adaptor entity diameterro-0: 3GPPVersion (java.lang.String): Vcb0 BaseMessageApplicationID (java.lang.Integer): 0 CertificateKeyStore (java.lang.String): CertificateKeyStorePassword (java.lang.String): CipherSuites (java.lang.String): ConfigurationProfile (java.lang.String): DiameterConfig/DiameterRoOcsProfile ConfigurationProfilePollTime (java.lang.Integer): 0 ConnectTimeout (java.lang.Long): 30000 ExtendedTransportConfiguration (java.lang.String): ExtensionAvpSet (java.lang.String): DiameterExtensions/Charging ExtensionAvpSetPollTime (java.lang.Integer): 0 ExtensionMessages (java.lang.Boolean): true FireToServiceID (java.lang.String): ForceReconnectAfterDPR (java.lang.Boolean): true IOClientWorkers (java.lang.Integer): 0 IOServerWorkers (java.lang.Integer): 0 Quirks (java.lang.String): ReconnectDelay (java.lang.Long): 5000 RequestTimeout (java.lang.Long): 2000 SSLSessionTimeout (java.lang.Integer): 0 ServiceContextId (java.lang.String): session@opencloud.com SessionTimeout (java.lang.Long): 780000 SupportedVendorIds (java.lang.String): ThreadPoolSize (java.lang.Integer): 0 TrustKeyStore (java.lang.String): TrustKeyStorePassword (java.lang.String): WatchdogTimeout (java.lang.Long): 30000 WorkQueueSize (java.lang.Integer): 0 slee-vendor:com.opencloud.rhino_max_activities (java.lang.Integer): 0 slee-vendor:com.opencloud.rhino_replicate_activities (java.lang.String): none [Rhino@localhost (#1)] listprofileattributes DiameterConfig DiameterRoOcsProfile Action=LOCAL AllowUnknownPeers=true ApplicationId=0 ApplicationVendorId=0 EnableMultiNodeConfig=false Host=diameterclient ListenAddress={null} NodeIDs={null} PeerAddress=127.0.0.1 PeerConnectAtStartup=true PeerHost=diameterserver PeerPort=3868 PeerTable=<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE peer-table PUBLIC "-//Open Cloud Ltd.//DTD Diameter Peer Table Configuration 1.1.0//EN" "http://www.opencloud.com/dtd/diameter-peer-table-1.1.0.dtd"> <peer-table allowUnknownPeers="true"> <!-- If allowUnknownPeers is true, then any peer may connect to this node. If allowUnknownPeers is not true, peers connecting to this node as clients must be defined in the Peer Table.--> <peer connectAtStartup="true"> <hostname>diameterserver</hostname> <!-- Will accept connections from this peer --> <port>3868</port> <address>127.0.0.1</address> <tls>false</tls> <option> <option-name>TCP_NODELAY</option-name> <option-type>java.lang.Boolean</option-type> <option-value>true</option-value> </option> </peer> <peer connectAtStartup="true"> <hostname>diameterserver1</hostname> <!-- Will accept connections from this peer --> <port>3868</port> <address>192.168.2.100</address> <tls>false</tls> <option> <option-name>TCP_NODELAY</option-name> <option-type>java.lang.Boolean</option-type> <option-value>true</option-value> </option> </peer> </peer-table> PeerUri={null} PerNodeHosts={null} PerNodeListenAddresses={null} PerNodePorts={null} PerNodeSecondaryAddresses={null} Port=3869 Product=OpenCloud Diameter ProductVendorId=19808 Realm=opencloud RealmTable=<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE realm-table PUBLIC "-//Open Cloud Ltd.//DTD Diameter Realm Table Configuration 1.1//EN" "http://www.opencloud.com/dtd/diameter-realm-table-1.1.dtd"> <realm-table> <realm> <realm-name>opencloud</realm-name> <application-route> <application> <application-id>4</application-id> <!-- 4=CCA --> <vendor-id>0</vendor-id> <!-- optional, default is zero --> </application> <action>LOCAL</action> <peer-ref> <hostname>diameterserver</hostname> <metric>1</metric> </peer-ref> <peer-ref> <hostname>diameterserver1</hostname> <metric>1</metric> </peer-ref> </application-route> </realm> <default-route> <peer-ref> <hostname>diameterserver</hostname> <metric>1</metric> </peer-ref> <peer-ref> <hostname>diameterserver1</hostname> <metric>1</metric> </peer-ref> </default-route> </realm-table> SecondaryAddresses={null} Transports=tcp UseTLS=false ValidDN={null} Version=1 [Rhino@localhost (#2)] listprofileattributes DiameterMediationOcsConfigurationTable UNSET:::: DestinationHost={null} DestinationRealm=opencloud TimeoutDuration=2000