Internet-Draft T. Asveren
Intended status: Informational Sonus
Expires: October 03, 2012 April 03, 2012

P-Charge-Info - A Private Header (P-Header) Extension to the Session Initiation Protocol (SIP)


This document describes 'P-Charge-Info', a private Session Initiation Protocol (SIP) header (P-header) used to convey billing information about the party to be charged. This P-Header is currently in production usage by a number of equipment vendors and carriers and this document is submitted to request the registration of this header with IANA. This P-Header may also be used in some situations to carry the ISUP Charge Number parameter for PSTN interconnection.

Status of this Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on October 03, 2012.

Copyright Notice

Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents ( in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

Table of Contents

1. Overview

In certain network configurations, it is desirable to decouple the identity of the caller (what is normally thought of as "Caller ID") from the identity/number used for billing purposes. This document describes the current usage of 'P-Charge-Info', a private SIP header, to provide simple billing information and requests the registration of this header with IANA as required by section 4.2 of RFC 5727 [RFC5727].

In a typical configuration, the identity of the caller, commonly referred to as "Caller ID" by end users, is derived from one of the following SIP headers:

(NOTE: Some service providers today also use the "Remote-Party-ID" header but this was replaced by P-Asserted-Identity in RFC 3325.)

This identity/number is typically presented to the receiving UA where it is usually displayed for the end user. It is also typically used for billing purposes by the network entities involved in carrying the session.

However, in some network configurations the "Caller ID" presented to the receiving UA may be different from the number desired to be used for billing purposes.

For example, the "Caller ID" may not reflect the actual reality of the underlying network in terms of costs incurred on the PSTN. This may result in excessive charging of one carrier by another based on the erroneous assumption that the call was originating from a different point on the PSTN.

Another example would be where a gateway to the Public Switched Telephone Network (PSTN) receives the ISUP "Charge Number" in the PSTN signaling which designates the number to be billed. The gateway needs to pass this information along to a SIP entity associated with billing.

In both these examples, there exists a need for a way to pass an additional billing identifier that can be used between network entities in order to correctly bill for services. At least one equipment provider, Sonus Networks, and several carriers have been using the "P-Charge-Info" header for the last 5 years as a simple mechanism to exchange this billing identifier.

2. Requirements Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

3. Purpose of this Document

This document has been prepared to comply with section 4 of RFC 5727 [RFC5727] to register this header with IANA. This document was originally prepared to comply with sections 4.1 and 4.2 of the now obsoleted RFC 3427. It is noted that RFC 5727 specifically deprecates new usage of "P-" headers, but P-Charge-Info has been in deployment for several years now. Given this, the authors request that P-Charge-Info be admitted as a "grandfathered case" per section 4 of RFC 5727.

4. Examples of the Problem

4.1. Use Case - Billing Identifier

The simplest use case for P-Charge-Info could be an enterprise environment where each SIP endpoint has a direct number that is passed by the enterprise SIP proxy across to a SIP proxy at a SIP Service Provider who provides PSTN connectivity. Rather than cause the SIP Service Provider to have to track each individual direct number for billing purposes, the enterprise SIP proxy could send in the P-Charge-Info header a single billing identifier that the SIP Service Provider uses for billing purposes.

4.2. Use Case - ISUP Charge Number

A second use case is one in which a PSTN gateway receives PSTN signaling that includes an ISUP Charge Number parameter and the PSTN gateway needs to send that ISUP Charge Number via SIP to other servers. In this instance, the PSTN gateway will insert the ISUP Charge Number into the P-Charge-Info SIP header.

4.3. Use Case - Distributed Enterprise

A third and common use case is a large enterprise with a widely distributed SIP network to designate the specific point at which PSTN interconnection occurs. Consider an enterprise with a work force and offices distributed over a wide geographic area and linked by a common internal network over which voice traffic is sent. Users across the network may be able to contact each other directly via SIP sessions, but there may only be a relatively few points in the network where interconnection occurs to the PSTN. Consider this case:

Rather than use the direct numbers of each SIP endpoint for generating the billing information, the enterprise might choose to instead pass the SIP URI of the PSTN interconnection point in the P-Charge-Info header, either for simplicity or potentially to obtain better rates from the SIP service provider.

4.4. Use Case - Hosted Telephony Provider

Similar to the third use case of a large enterprise, a hosted telephony provider or hosted voice application provider may have a large SIP network with customers distributed over a very large geographic area using local market PSTN numbers but with only a very few actual PSTN interconnection points.

As with the branch office earlier, the customer may have all local phone numbers yet outgoing calls are actually being routed across a SIP network and out specific PSTN gateways or across specific SIP connections to SIP service providers. The hosted provider may want to pass a billing identifier to its SIP service providers again either for the purpose of simplicity in billing or to obtain better rates from the SIP service providers.

5. Alternatives

5.1. P-Charging-Vector

P-Charging-Vector is defined in section 4.6 of RFC 3455 [RFC3455] and used by the 3GPP to carry information related to the charging of a session. There are, however, some differences in the semantics associated with P-Charging-Vector and P-Charge-Info. P-Charging-Vector is mainly used to carry information for correlation of multiple charging records generated for a single session. On the other hand, P-Charge-Info is used to convey information about the party to be billed for a call. Furthermore, P-Charging-Vector has a mandatory icid-value parameter which is a globally unique value to identify the session for which the charging information is generated. Such a globally-unique identifier is not necessary when carrying information about the user to be billed when it is attached to the corresponding session-related signaling.

5.2. P-DCS-Billing-Info

P-DCS-Billing-Info is defined in section 7 of RFC 3603 [RFC3603] and used for passing billing information between trusted entities in the PacketCable Distributed Call Signaling Architecture. For many billing situations, particularly the very large-scale residential telephone networks for which this header is designed, P-DCS-Billing-Info is an excellent solution. However, this ability to address a range of situations adds complexity. According to RFC 3603, each use of the P-DCS-Billing-Info header MUST include in the header the following:

and may include a variety of additional parameters.

While this may work well in many billing scenarios, there are other billing scenarios that do not at all need this level of complexity. In those simpler scenarios all that is needed is simply a number to use for billing. P-Charge-Info provides this simple solution for simple billing scenarios.

Additionally, section 7.3 of RFC 3603 mandates that a UA MUST create a Billing-Correlation-ID and insert this into the P-DCS-Billing-Info header (along with the other required information) sent in the initial SIP INVITE. This again makes sense for the residential telephone service environment for which this header is designed. In contrast, P-Charge-Info is designed to be used among proxies and not to be used at all by normal user agents. (P-Charge-Info may, though, by used by user agents associated with PSTN gateways.)

5.3. P-Asserted-Identity

Early reviewers of this document asked why the "P-Asserted-Identity" header documented in RFC 3325 [RFC3325] could not be used. As mentioned in the use case example above, P-Asserted-Identity is used to indicate the identity of the calling party. However, in this instance, the requirement is to provide an additional identity of the SIP-to-PSTN interconnect point.

It would be typical to find both P-Asserted-Identity and P-Charge-Info used in a SIP exchange. P-Asserted-Identity would be used to provide the caller identity which would be displayed to the end user as "Caller ID" while P-Charge-Info would provide the billing identifier used for the billing associated with the call.

6. The P-Charge-Info Header

6.1. Applicability Statement for the P-Charge-Info header

The P-Charge-Info header is applicable within a single private administrative domain or between different administrative domains where there is a trust relationship between the domains.

6.2. Usage of the P-Charge-Info header

The P-Charge-Info header is used to convey information about the identity of the party to be charged. The P-Charge-Info header is typically inserted by one of the following:

P-Charge-Info is to be consumed by the SIP entity that provides billing services for a session. This could be an entity generating billing records or an entity interacting with another enitity generating billing records. Upon receipt of an INVITE request with P-Charge-Info header, such an entity SHOULD use the value present in the P-Charge-Info as indicating the party responsible for the charges associated with the session.

6.2.1. Procedures at the UA

The P-Charge-Info header may be inserted by PSTN gateways or application servers acting as a SIP UA, either through local policy or as a result of information received via PSTN signaling, e.g. the Charge Number parameter in an ISUP IAM message.

The P-Charge-Info header is not used/interpreted by a regular UA and should not normally be seen by such a UA. If the header is transmitted to such a UA, the UA SHOULD ignore the header. Similarly, a regular UA originating a SIP message should not insert this header.

A PSTN gateway or application server acting as a UA MAY use the content of the P-Charge-Info header present in an INVITE request it received for billing related procedures, e.g. in a billing record or during interaction with another entity generating billing records, as the identity of the party to be charged for the session. A PSTN gateway or application server acting as a UA MAY use the content of the P-Charge-Info header to populate information about the identity of the party to charge in another type of signaling, e.g. ISUP.

6.2.2. Procedures at the Proxy

A SIP proxy that supports this extension and receives a request, typically a SIP INVITE, without the P-Charge-Info header MAY insert a P-Charge-Info header. The contents of the inserted header may be decided based on local policy or by querying an external entity to determine the identity of the party to be charged.

A proxy MAY use the content of the P-Charge-Info header present in an INVITE request it received for billing related procedures, e.g. in a billing record or during interaction with another entity generating billing records.

A SIP proxy that does not support this extension will pass any received P-Charge-Info header unmodified in compliance with RFC 3261.

A proxy supporting this extension SHOULD remove the P-Charge-Info header before sending a request to a UA that is not acting as a PSTN gateway or appropriate application server.

6.3. Example of Usage

The content of the P-Charge-Info header is typically simply a SIP URI used as a billing indicator. As such, an example would be as simple as one of:

P-Charge-Info: <sip:4075555555@>

P-Charge-Info: <>

P-Charge-Info: <>

P-Charge-Info: <>

Any other applicable SIP URI could be used.

6.4. Optional Parameters

P-Charge-Info optionally includes the additional parameters of the "Numbering Plan Indicator" and "Nature of Address". These are used when the ISUP Charge Number value needs to be passed as part of P-Charge-Info. For instance, this might be required in a SIP message for scenarios where SIP is used to connect two PSTN segments and needs to pass charging information between them.

An example of the usage of the optional parameters is:

P-Charge-Info: <sip:6835555555;npi=1;noa=3@>

Values passed in the "npi" and "noa" parameters are expressed as decimal numbers and possible values are defined in Appendix A and Appendix B.

7. Formal Syntax

The Private Header specified in this document is described in both prose and an augmented Backus-Naur Form (BNF) defined in RFC 2234. Further, several BNF definitions are inherited from SIP and are not repeated here. Implementors need to be familiar with the notation and contents of SIP [1] and RFC 2234 [3] to understand this document.

The syntax of the P-Charge-Info header is described as follows:

      P-Charge-Info = "P-Charge-Info" HCOLON (name-addr / addr-spec)
              ; name-addr and addr-spec are specified in RFC 3261
          charge-param = npi-param / noa-param / generic-param
          npi-param = ";npi" EQUAL npi-value
              ; generic-param is specifed in RFC 3261
          npi-value = gen-value
          noa-param = ";noa" EQUAL noa-value
          noa-value = gen-value

The SIP URI contained in the name-addr/addr-spec is the billing indicator that is passed between the parties.

charge-param is used as a userinfo parameter in P-Charge-Info.

The two optional parameters for PSTN interoperability are mentioned in the previous section and are:

Typical values for the "npi-value" are listed in Appendix A.

Typical values for the "noa-value" are listed in Appendix B.

8. IANA Considerations

This document defines a private SIP extension header field (beginning with the prefixe "P-").

The extension is registered as a private extension field:

RFC Number: RFCXXXX [Note to IANA: Please fill in with the RFC number of this specification.

Header Field Name: P-Charge-Info

Compact Form: none

9. Security Considerations

9.1. Trust Relationship

Given that the information contained in the P-Charge-Info header will be used for billing purposes the proxies and other SIP entities that share this information MUST have a trust relationship.

If an untrusted entity were inserted between the trusted entities, it could potentially interfere with the billing records for the call. If the SIP connections are not made over a private WAN, a mechanism for securing the confidentiality and integrity of the SIP connection should be used to protect the information. One such mechanism could be TLS-encryption of the SIP signaling stream.

9.2. Untrusted Peers

9.2.1. Ingress from Untrusted Peers

If the P-Charge-Info header was accepted by a SIP entity from an untrusted peer, there is the potential for fraud if the untrusted entity sent incorrect information, either inadvertently or maliciously.

Therefore a SIP entity MUST remove and ignore the P-Charge-Info header when it is received from an untrusted entity.

9.2.2. Egress to Untrusted Peers

If the P-Charge-Info header was sent by a SIP entity to an untrusted peer, there is the potential exposure of network information that is internal to a trust domain. For instance, the untrusted entity may learn the identities of public SIP proxies used within the trust domain which could then potentially be directly attacked.

Therefore a SIP entity MUST remove the P-Charge-Info header when it is sent to an untrusted entity.

10. Acknowledgements

The authors thank the following people for their comments, criticism, suggestions and assistance with ABNF notation: Keith Drage, Miguel Garcia, Christer Holmberg, Paul Kyzivat, Jonathan Rosenberg, Juha Heinanen, Sumit Garg and Tom Taylor. The authors thank Glen Wang for helping clarify the NPI parameter values with the reference to ANSI T1.113.

The authors want to specificially thank John Haluska for a great range of comments and specific information related to interworking with the ISUP Charge Number.

11. Changes

NOTE TO RFC EDITOR - Please remove this "Changes" section prior to publication. Thank you.

Revision -13 has no changes to content and was issued as -12 expired. Discussions are under way coming out of IETF 83 on a plan to move this draft forward. As the SIPPING working group no longer exists, the draft name needs to change and there are a couple of other required changes.

Revision -12 included the following modifications based on feedback from John Haluska and Glen Wang:

Revision -11 represents a fairly significant revision responding to a solid review by Paul Kyzivat and providing additional explanation. A major shift was the move to using decimal values for the npi-value parameter versus the text values of previous drafts. Changes include:

Revision -10 included the following modifications:

Revision -09 included the following modifications:

Revision -08 included the following modifications:

Revision -07 was updated to the "trust200902" IPR statement and added references to RFC 3968. At this point all comments have been incorporated and publication will be requested.

Revision -06 had only a minor correction to the second usage example. The IPR statement was also updated to comply with RFC 5378.

Revision -05 included the following modifications:

Revision -04 corrected a major error in the example where the parameter was placed inside the angle brackets. The P-DCS-Billing-Info header was also added as an alternative and a few minor edits were made.

12. Appendix A: NPI Parameter Values

To better understand the possible values for the optional NPI parameter, ANSI T1.113 states that the 'numbering plan indicator' may contain the following values:

       000 unknown (no interpretation)
       001 ISDN (Telephony) numbering plan (Recommendation E-164)
       010 spare (no interpretation)
       011 reserved (CCITT Data numbering plan)
       100 reserved (CCITT Telex numbering plan)
       101 Private numbering plan
       110 spare (no interpretation)
       111 spare (no interpretation)

Note that the values shown here are in binary notation per ANSI T1.113, but when the values are passed in the NPI parameter of P-Charge-Info they are represented in decimal notation.

13. Appendix B: NOA Parameter Values

To better understand the possible values for the optional NOA parameter, ANSI T1.113 states that the 'nature of address indicator' may contain the following values:

       0 0 0 0 0 0 0 spare
       0 0 0 0 0 0 1 ANI of the calling party; subscriber number
       0 0 0 0 0 1 0 ANI not available or not provided
       0 0 0 0 0 1 1 ANI of the calling party; national number
       0 0 0 0 1 0 0 spare
       0 0 0 0 1 0 1 ANI of the called party; subscriber number
       0 0 0 0 1 1 0 ANI of the called party; no number present
       0 0 0 0 1 1 1 ANI of the called party; national number
       0 0 0 1 0 0 0
       1 1 1 0 1 1 1 spare

       1 1 1 1 0 0 0
       1 1 1 1 1 1 0 reserved for network specific use

       1 1 1 1 1 1 1 spare

Note that the values shown in the table here are in binary notation per ANSI T1.113. However, when the values are passed in the NOA parameter of P-Charge-Info they are represented in decimal notation.

As examples of values in the "reserved for national use" block, the following values have been defined by ANSI for North American use:

       113 subscriber number, operator requested
       114 national number, operator requested
       115 international number, operator requested
       116 no number present, operator requested
       117 950+ call from local exchange carrier public station, 
                hotel/motel, or non-exchange access end office
       118 test line test code

14. References

14.1. Normative References

[RFC5727] Peterson, J., Jennings, C. and R. Sparks, "Change Process for the Session Initiation Protocol (SIP) and the Real-time Applications and Infrastructure Area", BCP 67, RFC 5727, March 2010.

14.2. Informative References

[RFC3455] Garcia-Martin, M., Henrikson, E. and D. Mills, "Private Header (P-Header) Extensions to the Session Initiation Protocol (SIP) for the 3rd-Generation Partnership Project (3GPP)", RFC 3455, January 2003.
[RFC3325] Jennings, C., Peterson, J. and M. Watson, "Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks", RFC 3325, November 2002.
[RFC3603] Marshall, W. and F. Andreasen, "Private Session Initiation Protocol (SIP) Proxy-to-Proxy Extensions for Supporting the PacketCable Distributed Call Signaling Architecture", RFC 3603, October 2003.

Authors' Addresses

Dan York Keene, NH USA Phone: +1-802-735-1624 EMail:
Tolga Asveren Sonus Networks 3 Paragon Way Freehold, NJ 07728 USA EMail: