Local Number Portability
Cboulanger (Talk | contribs) (→Outgoing call mapping) |
Cboulanger (Talk | contribs) (→Outgoing call mapping) |
||
Line 51: | Line 51: | ||
[[File:LNP_profile_outgoing.PNG|500x|750px]] | [[File:LNP_profile_outgoing.PNG|500x|750px]] | ||
<br /> | <br /> | ||
− | |||
<br /> | <br /> | ||
+ | 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: | ||
<br /> | <br /> | ||
{| class="wikitable" | {| class="wikitable" |
Revision as of 20:26, 16 September 2012
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.
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
Parameter | SS7 | 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.
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:
Parameter | SS7 | 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 |