1 System Overview

This chapter provides a high-level overview of the application. It explains the basic functionality of the system and lists the main components.

This chapter does not advise on any specific Oracle Communications Convergent Charging Controller network or service implications of the product.

What is the Diameter Charging Driver

Diameter is a protocol that focuses on network access and accounting. The Diameter base protocol provides the minimum requirements needed for Authentication, Authorization, and Accounting (AAA) (RFC 3588). You can extend the base protocol by adding commands or AVPs. RFC 4006 specifies such an extension for applications that can be used to implement real-time credit-control.

The Diameter Charging Driver (DCD) product provides functionality that allows the Prepaid Charging product to interface with applications using the RFC 3588 and RFC 4006 protocol. Typically it is expected that Prepaid Charging will interface with a third-party convergent real-time charging system.

DCD contains several components:

  • Diameter protocol stack. Implements the RFC 3588/4006 protocol
  • Dynamically loadable library (DLL), diamActions.so. Implements the required Prepaid Charging functionality
  • Diameter client. Implements the network interface to the Diameter

Diameter Credit Control

The Prepaid Charging product uses the Universal-Attempt-Termination-with-Billing (UATB) node for credit-control of telephony (voice) calls. There are a number of other CCS nodes that also use Diameter credit control actions.

RFC 4006 defines credit-control in the following way:

  • Credit-control is a process of checking whether credit is available, credit-reservation, deduction of credit from the end user account when service is completed and refunding of reserved credit that is not used.

The Diameter terminology defines an "interrogation" as the request/answer transaction between the client and server.

RFC 4006 defines session-based credit-control as:

  • A credit-control process that makes use of several interrogations:
  • The first: Used to reserve money from the user's account and to initiate the process.
  • A possible intermediate: May be needed to request new quota while the service is being rendered.
  • The final: Used to exit the process.

The credit-control server is required to maintain session state for session-based credit-control.

Telephony requires session-based credit-control. A new session is created when the CCS product detects that an end-user is trying to establish a new telephony call.

Other nodes may use the DCD to send event based (rather than session-based) credit control messages for one-time events, for example, SMS (text message).

Process

Prepaid Charging uses the dcdBeClient (Diameter Charging Driver) to send a first interrogation to the Diameter Server. The server rates the request, reserves a suitable amount of money from the user's account, and returns the corresponding amount of credit resources. Prepaid Charging connects the telephony call and monitors the usage of the granted resources.

Prepaid Charging may send an intermediate interrogation to request a new quota of resources when the granted resources have been consumed. When the telephony call ends, Prepaid Charging sends a final interrogation to inform the Diameter Server of the actual amount of resources used. At this point the session is terminated.

Credit Control Messages

RFC 4006 defines two commands used for credit-control encapsulated in the following messages:

  • Credit-Control-Request (CCR). Used by the credit-control client to request credit authorization from the credit-control server.
  • Credit-Control-Answer (CCA). Used by the credit-control server to acknowledge a CCR from the credit-control client.

AVPs

A detailed list of AVPs for the CCR and CCA messages is given in RFC 4006 and copied in the next section of this document. Note the CC-Request-Type – an enumeration with the following values:

  • INITIAL_REQUEST: First interrogation
  • UPDATE_REQUEST: Intermediate interrogation
  • TERMINATION_REQUEST: Final interrogation
  • EVENT_REQUEST: Event based (not session based)

Note:

DCD can be configured to support certain vendor specific applications that add AVPs to the accounting commands of Diameter base protocol. For more information, see the vendor-specific AVPs under DCD Parameters .

Attribute Value Pairs

In the Diameter protocol message, parameters are specified as Attribute-Value Pairs (AVPs).

An AVP consists of a Code, Flags, Length, optional Vendor-ID, and Data fields. The AVP Code, combined with the Vendor-ID field, identifies the attribute uniquely. The type (format) of the Data field is implied by the Code and Vendor-ID field combination. The following Data formats are specified:

  • OctetString
  • Integer32
  • Integer64
  • Unsigned32
  • Unsigned64
  • Float32
  • Float64
  • Address
  • Time
  • UTF8String
  • DiameterIdentity
  • DiameterURI
  • Enumerated
  • Grouped
  • GroupedUnitValue

Additional EDR Tags

Resolved values for AVPs can be written to the Advanced Control Services Event Detail Record (ACS EDR) under a configured tag. These tags are not intended to be used to amend existing, predefined ACS tags. The feature is intended for situations where the customer wishes to add some new tag to the EDR.

Conditions can be attached to the writing of the EDR value:

  • Replace it unconditionally, after removing any existing tags of same name.
  • Append a new value instance unconditionally.
  • Leave the EDR alone if the tag is present, and append the new instance if the tag is not present.

Diagram

Here is a high-level diagram showing the Diameter Charging Driver.

Figure 1-1 Diameter Charging Driver

High-level diagram showing the Diameter Charging Driver

ccsConcepts

To match AVPs to variables in CCS, the DCD has ccsConcepts. These can be a specific parameter of the CCS action, a general CCS variable, some of the call's context, or even an ACS profile value.

The DCD provides functionality to scale values by a factor, and also allows a mapping of one set of integers to another while reading/writing to ccsConcepts. The specific formatting of the value field is configurable. See AVPs parameters for formatting details.

Note:

The availability of each concept depends upon the action involved, and the previous actions of the control plan.

List of ccsConcepts

This section includes the list of all ccsConcepts that can be used in the AVPs section of the eserv.config file.

ACS Action Handler

Here are the ccsConcepts from the ACS action handler.

Table 1-1 ACS Action Handler

Concept Label Available Comments
cascade After a setCascade Override. Also can be set by previous responses. The integer ID of the cascade to apply.
chargeInfoBalanceSystemValue After a chargeInfo response. The balance Unit for the current item of the Charge structure. This is in units of the system currency.
chargeInfoBalanceType After a chargeInfo response. The CCS ID of the balance Type for the current balance of the Charge structure.
chargeInfoBalanceUnitType After a chargeInfo response. The CCS of the balance Unit for the current balance of the Charge structure. This is not necessary for a ChargeInfo in a response, it can be derived from the balance type.
chargeInfoBalanceUserValue After a chargeInfo response.

The balance Unit for the current item of the Charge structure. This is in units of the user's currency.

Note that the system currency value is mandatory, while this entry is optional.

discountMaxCharge After a setDiscount Present after a setDiscount node or a response that has the discountMaxCharge present.
discountPeriod After a setDiscount Present after a setDiscount node or a response that has the discountPeriod present.
tariffCugName After a setTariffPlan The Closed User Group Name.
tariffPlan After a setTariffPlan Integer representing the tariff Plan.
terminationCause After a call is terminated

The esg values in the configuration for the ACS callEndReasons that map to specific termination cause values.

  • 0 = reasonNotSet
  • 1 = precallAnnouncementFailure
  • 2 = firstEventACRAbort
  • 3 = firstEventATAbort
  • 4 = secondEventACRAbort
  • 5 = secondEventATAbort
  • 6 = abortWaitingForBEResponse
  • 7 = releasedOnTCPExpiry
  • 8 = releasedNoFunds
  • 9 = disconnectedLegBNoFunds
  • 10 = calledPartyBusy
  • 11 = routeSelectFailure
  • 12 = callingPartyAbandon
  • 13 = noAnswer
  • 14 = callingPartyDisconnected
  • 15 = calledPartyDisconnected
walletInfoActivationDate After a walletInfo response time_t of the wallet's activation date. The DCD handles conversion from time_t to DIAMETER times.
walletInfoBalanceExpiry After a walletInfo response The expiry date (in time_t) of the current balance. The DCD handles conversion from time_t to DIAMETER times.
walletInfoBalanceExponent After a walletInfo response An exponent to apply to the balance system value.
walletInfoBalanceLimitType After a walletInfo response The balances limit type: An integer representing one of: limitedPostpaid, postpaid, prepaid, singleUsePrepaid
walletInfoBalanceMaxCredit After a walletInfo response The maximum amount of credit allowed for this subscriber.
walletInfoBalanceSystemValue After a walletInfo response The balance Unit for the current item of the balance structure. This is in units of the system currency.
walletInfoBalanceType After a walletInfo response The CCS ID of the balance Type for the current balance of the Wallet structure.
walletInfoBalanceUnitType After a walletInfo response The CCS ID of the balance Unit for the current balance item of the Wallet structure. This is not necessary for a balance in a response, it can be derived from the balance type.
walletInfoBalanceUserValue After a walletInfo response

The balance Unit for the current item of the Blance structure. This is in units of the user's currency.

Note that the system currency value is mandatory, while this entry is optional.

walletInfoExpiry After a walletInfo response The expiry date (in time_t) of the wallet. The DCD handles conversion from time_t to DIAMETER times.
walletInfoLastAccess After a walletInfo response time_t of the wallet's last access. The DCD handles conversion from time_t to DIAMETER times.
walletInfoMaxConcurrent After a walletInfo response The maximum number of concurrent users allowed for this wallet.
walletInfoState After a walletInfo response

A single character representing the wallet's state. One of:

  • 'A' = Active
  • 'D' = Dormant
  • 'F' = Frozen
  • 'P' = Pre-Use
  • 'S' = Suspended
  • 'T' = Terminated.

Note that conversion to different representations is possible.

walletInfoSystemCurrency After a walletInfo response The system currency.
walletInfoUserCurrency After a walletInfo response The CCS_ACCT.CURRENCY value for this wallet.

ACS Service Context

Here are the ccsConcepts from the ACS service context.

Concept Label Available Comments
acsCallID always The call ID from the SLEE
acsChargingDomain always The destined billing domain (logical collection of wallets) for this request.
acsProductType always The ACS product type ID
acsProfile always An ACS profile buffer from the Call plan. If the buffer is not set, then the AVP is not included.
acsServiceProvider always The ACS service provider ID
acsSubscriber always The CCS subscriber ID
acsSubscriberReference always The CCS subscriber number (ie their MSISDN)
acsTariffCode After an initial reservation. Tariff Code string returned in the Initial Reservation Response (if present).
acsUnnormalisedCalledNumber always The called party number digits from the IDP, without any attempt at normalization.
acsWallet always The CCS wallet ID (BE_WALLET.ID)
acsWalletReference always The CCS wallet Reference (the Billing System's reference to the wallet)
acsWalletType always The CCS wallet type. (CCS_WALLET_TYPE.ID)

CCS Time Reservation

Here are the ccsConcepts from CCS time reservation.

Concept Label Available Comments
callAnsweredTime ConfirmTimeReservation  
callDurationDelta Any Time Charging Action  
callDurationTotal Any Time Charging Action  
callerTimeZone After a DirectTimeCharge or InitialTimeReservation  
cli After a DirectTimeCharge or InitialTimeReservation  
confirmTimeReservationStatus After set from a response Usually part of an confirmTimeReservationResponse.
destinationNumber After a DirectTimeCharge or InitialTimeReservation  
discountPercentage After a setDiscount or DirectNamedEvent or NamedEventReservation Present after a setDiscount node or a response that has the discountPeriod present.
eventClass NamedEvent Actions A string representing the CCS event Class.
eventName NamedEvent Actions A string of the CCS event name.
eventType NamedEvent Actions An integer representing the type of CCS named event.
expectedReservationDelta InitialTimeReservation and ExtendTimeReservation  
expectedReservationTotal InitialTimeReservation and ExtendTimeReservation  
extraInformation   Usually call information for adding to Billing CDRs. Content varies for each action.
freeCallDisposition After set from a response Usually part of an initialTimeReservationResponse.
ignoreBalanceLimit DirectNamedEvent, DirectTimeCharge, NamedEventReservation  
initialLowBalanceAnnouncement After set from a response Usually part of an initialTimeReservationResponse. The Announcement ID of the announcement to play.
initialLowBalanceIndicator After set from a response Usually part of an initialTimeReservationResponse. If present and non zero the indicated pre call warning announcement should be played to the subscriber.
lowCreditBuffer After set from a response Usually part of an initialTimeReservationResponse. Number of seconds from the end of the last good reservation period until a low credit beep should be played
maxCallLength After set from a response Usually part of an initialTimeReservationResponse.
maxSeconds After set from a response Session Time left. Usually part of an xxxTimeReservationResponse.
maxUnitsRequested NamedEvent Actions  
minUnitsRequested NamedEvent Actions  
numUnitsGranted After set from a response  
numUnitsUsed ConfirmNamedEventReservation  
reservedLengthDelta After set from a response Usually part of an xxxTimeReservationResponse.
reservedLengthTotal After set from a response Usually part of an xxxTimeReservationResponse.
retrieveLCRNumbers After set from a response Usually part of an initialTimeReservationResponse.
revokeTimeReservationStatus After set from a response Usually part of an revokeTimeReservationResponse.
scpAction  

This AVP is an enumeration with the following known values:

  • 1 Supervise
  • 2 Do not supervise
  • 3 Release
  • 4 Send message
  • 5 Play announcement
  • 6 Supervise without controlling
singleReservation After set from a response Usually part of an initialTimeReservationResponse.
timeReservationStatus After set from a response Usually part of an xxxTimeReservationResponse.
validityPeriod After set from a response  

Charge Details

Here are the ccsConcepts from charge details.

Concept Label Available Comments
balanceTypeFilter WalletInfo Request the Billing Engine to only return balances of this type.
balanceUnitFilter WalletInfo Request the Billing Engine to only return balances of this unit.

Direct Time Charge

Here are the ccsConcepts from direct time charge.

Concept Label Available Comments
callDate DirectTimeCharge  
ratingPrecision InitialTimeReservation Integer representing seconds, tenths-of-a-second, or hundredths-of-a-second

Others

Here are the ccsConcepts from others.

Concept Label Available Comments
freeform always Uses/updates the concept previously defined by setFreeform.
setFreeform always The next AVP of concept “freeform” will instead use/update the concept indexed by the value of this AVP.

Voucher Details

Here are the ccsConcepts from voucher details.

Concept Label Available Comments
voucherInfoBalanceExpiryExtension WalletInfoRequest The expiry extension period for adjusting the balance expiry date of the voucher.
voucherInfoBalanceExpiryExtensionPolicy WalletInfoRequest

Indicates how to apply the balance expiry extension period to the balance expiry date.

New Expiry Policies include the following:

  • First Use with Offset – Allows a recharged balance expiry date to be set a number of months or hours after the first use of the balance.
  • First Use – Account Cycle allows a recharged balance expiry date to be set, aligned with the account cycle on the first use of the balance.
  • First Use – Bill Cycle allows a recharged balance expiry date to be set, aligned with the billing cycle on the first use of the balance.

voucherInfoBalanceExpiryExtensionPolicy returns the following values:

Value Name Meaning
0 best Take the largest expiry date based on current, today, other periods and this extension
1 extend Extend the existing expiry date by the specified extension period
2 extendFromToday Today + extension period, or the existing expiry, whichever is larger
3 override Not used when applying an extension
4 dontChange Do not set or change an expiry date
voucherInfoBalanceExpiryExtensionType WalletInfoRequest

The unit of the extension value available for this balance (example: hours or months).

voucherInfoBalanceExpiryExtensionType returns the following values:

Value Meaning
0 Hours
1 Months
voucherInfoBalanceType WalletInfoRequest The CCS ID of the balance type for the current balance of the voucher structure.
voucherInfoBalanceValidityOffset WalletInfoRequest A relative offset from the current date when a given balance, charged with a voucher, becomes valid.
voucherInfoBalanceValidityStart WalletInfoRequest A fixed date in the future when a given balance, charged with a voucher, becomes valid.
voucherInfoBalanceValidityType WalletInfoRequest

The units of the relative offset from the current date when the balance becomes valid.

voucherInfoBalanceValidityType returns the following values:

Value Meaning
0 Hours
1 Months
voucherInfoMissingBalancePolicy WalletInfoRequest

Indicates what to do if the specified balance type is missing from the list of existing balances for the voucher.

voucherInfoMissingBalancePolicy returns the following values:

Value Name Meaning
0 allow Create the balance (and bucket, if applicable) and set it to the specified value
1 fail Reject the recharge (Invalid Recharge Value)
2 ignoreBalance Skip this balance and process the rest of the recharge
voucherInfoNewBucket WalletInfoRequest If this value is set to true, the voucher value will be added to the balance as a new bucket.
voucherInfoReplaceBalance WalletInfoRequest If this value is set to true, all existing buckets of the balance will removed, and a new bucket is created with the specified voucher value.
voucherInfoValue WalletInfoRequest The voucher balance recharge details.
voucherInfoVoucher WalletInfoRequest The database key of the voucher being redeemed.
voucherInfoVoucherNumber WalletInfoRequest The voucher number of the voucher being redeemed.
voucherInfoVoucherSerialNumber WalletRechargeRequest Populates the Voucher Serial Number in a DCD AVP, so that it may be used to audit and track the voucher redemption.
voucherInfoWalletExpiryExtension WalletInfoRequest The extension period to apply to the wallet expiry date of the recharged wallet.
voucherInfoWalletExpiryExtensionPolicy WalletInfoRequest Indicates how to apply the wallet expiry extension period to the wallet expiry date.
voucherInfoWalletExpiryExtensionType WalletInfoRequest

The unit of the expiry extension for the wallet that the voucher will recharge (example: hours or months).

voucherInfoWalletExpiryExtensionType returns the following values:

Value Meaning
0 Hours
1 Months
voucherRechargeFailureDateTime WalletRechargeRequest Returns the timestamp of any previous voucher recharge failure. If there has not been a previous voucher recharge failure, then zero (0) is returned.
voucherRechargeFailureFlag WalletRechargeRequest

Returns the value of one (1) if the voucher is not redeemed and a failed voucher redeem attempt has been made.

Returns zero (0) for all other voucher states. For example, if a redeem attempt has never been made for the voucher or if the voucher has been redeemed successfully.

voucherTypeName WalletInfoRequest

Returns the name of the type of voucher being redeemed.

Note: Voucher type name is only available if a positive value is defined for voucherTypeCacheSize in the ccsActions section. When this cache is configured, CCS will be able to use the batch of the voucher being redeemed to lookup the voucher type, and that name will then be available to the ccsConcept voucherTypeName.