Local Number Portability

From TBwiki
Revision as of 11:20, 17 September 2012 by Cboulanger (Talk | contribs)
Jump to: navigation, search

Contents

Local Number Portability (LNP)

History and overview

Since the beginning of modern telephony, the phone number has been composed of series of digits representing the address of the final destination (i.e. the callee). This is actually what the end-user believed actually. But in reality, the signification of these digits has changed over the decades sometimes partially representing the actual route from one switch to the other or the rural region where the callee actually lives.

Traditionally, every switches was assigned an NPA-NXX (where NPA means "Numbering Plan Area"), meaning that a phone number with the format NPA-NXX-XXXX was actually refering to a specific geographical switch. As the number of end-user was growing in geographical regions, the set of available numbers in a specific NPA-NXX-XXXX was reducing forcing the telecommunication authorities to allocate more regional codes. At some point, the switches themselves were provisioned at their maximum capacity which forces the operators to include other switches not necessarily to the same geographical locations thus making the NPA-NXX less and less relevant to geography. However, the real changes came when the normative authorities decided that a end-user has the right to keep his assigned phone number regardless of which carrier he's chose as long as it kept to the same local geographical region. This change had to be supported by the ISUP switching/terminating equipment to decouple the actual phone number from the carrier/switching equipment and link it to the end-user. However, for routing purposes, these equipments still needed a way to deduce the routing to reach that end-customer number. This mechanism is referred to as "Local Number Portability" (LNP).

With LNP now active, a new number called the LRN (Location routing number) is introduced in the routing mechanism. It is formatted as NPA-NXX-XXXX and points logically to a particular switching equipment: it is the switch permanent address. The DNIS (end-user called number) is now a “virtual number” that only the last end-switch knows how to route to the subscriber. It is the role of the originating switch and intermediate switches to translate the DNIS into an LRN (consulting a regional databases using SS7 or SIP) and route the call to the final switch responsible for that subscriber. Then, and only then, the last switch uses the original DNIS to route it to the end-user.

When the first subscriber within an NPA-NXX group changes service providers, the entire NPA-NXX is considered “ported” (all 10k numbers) which means that this particular NPA-NXX combination has become a portable number and no longer represents a specific exchange. Every call to that NPA-NXX will trigger a query to a database to determine the LRN of the number of the switch responsible for the NPA-NXX-XXXX being called.

Implementation of LNP relay

Most carriers and operators exposing ISUP interfaces to CLECs detects if an incoming call is in the 'translates' mode or not by looking at the content of the ISUP message. If the ISUP call does not contain any LNR number, then the carrier/operator switch does a query to the SS7 database to figure out the LRN and adjust the call information accordingly. Although TelcoBridges's Toolpack framework does not make the actual query to the database (also known as the 'DP' [pronounce 'dip']), it is able to terminate or relay a call from SIP to SS7 providing the LRN information is contained in the SIP body. What is relayed and how it is relayed depends on the profile configuration options.

Call flow and configuration options

Toolpack processes sequentially the incoming call by parsing the content of the signalling protocol and mapping it to "protocol-agnostic" internal variables that are accessible by the routing scripts. Through all the routing script variables accessible to scripts are some related to LNP such as 'ported_number'. The mapping of the information found in the incoming call depends on the option selected in the "incoming" parameters of the LNP section in the profile associated with the incoming NAP. Then its mapping to the outgoing call depends on configuration parameters of the profile for the outgoing NAP.

Incoming call mapping

The image below shows the different configuration options available and affect on how the system will map the incoming call information into the script variable available during routing.
500x

The following table contains the pseudo-code of the mapping according to the configuration AND the content of the incoming call signaling:
CPN = called party number or the TO sip header
called = called number variable accessible in routing script
GAP = generic address number SS7 information element type 0xc0
ported_number = extra number type accessible in the routing script
RN = rn field in SIP request URI
bitM = SS7 Forward call indicator information element: ported number translation indicator (bit M)
X = drop number

Incoming NAP conf. Incoming SS7 Incoming SIP
Ignore CPN => called
GAP => X
CPN => called
RN => X
Terminate GAP => called
CPN => X
ported_number not available
CPN => called
RN => X
ported_number not available
Forward if bitM=1 then
"" => ported_number
if GAP then
CPN => called
GAP => PNB
else
CPN => called
if npdi=yes then
"" => ported_number
if RN then
CPN => ported_number
RN=> called
else
CPN => called
Outgoing call mapping

The image below shows the different configuration options available and affect on how the system will map the outgoing call information into the script variable available during routing.

500x

The following table contains the pseudo-code of the mapping to the outgoing call according to the configuration AND what was present in the routing script variables:

Outgoing NAP config. Outgoing SS7 Outgoing SIP
No insertion bitM = 0
if ported_number then
ported_number => CPN
called => X

else

called => CPN
RN and ndpi not present
if ported_number then
ported_number => CPN
called => X

else

called => CPN
Always bitM = 1
ported_number => GAP
called => CPN
ndpi=yes
if ported_number then
called => RN
ported_number => CPN

else

called => CPN
RN not present
Relay called=>CPN
if ported_number then
bitM = 1
if ported_number is empty then
ported_number => X
else
ported_number => GAP

else

bitM = 0
if ported_number then
ndpi=yes
if ported_number is empty then
called => CPN
RN not present
else
called => RN
ported_number => CPN

else

called => CPN
Personal tools