Local Number Portability
Cboulanger (Talk | contribs) (→Incoming call mapping) |
Cboulanger (Talk | contribs) (→Incoming call mapping) |
||
Line 24: | Line 24: | ||
'''CPN''' = called party number or the TO sip header<br /> | '''CPN''' = called party number or the TO sip header<br /> | ||
+ | '''called''' = called number variable accessible in routing script<br /> | ||
'''GAP''' = generic address number SS7 information element type 0xc0<br /> | '''GAP''' = generic address number SS7 information element type 0xc0<br /> | ||
− | ''' | + | '''ported_number''' = extra number type accessible in the routing script<br /> |
'''RN''' = rn field in SIP request URI<br /> | '''RN''' = rn field in SIP request URI<br /> | ||
'''bitM''' = SS7 Forward call indicator information element: ported number translation indicator (bit M)<br /> | '''bitM''' = SS7 Forward call indicator information element: ported number translation indicator (bit M)<br /> | ||
Line 34: | Line 35: | ||
! Parameter !! SS7 !! SIP | ! Parameter !! SS7 !! SIP | ||
|- | |- | ||
− | | Ignore|| | + | | Ignore || CPN => called <br />GAP => X || CPN => called <br />RN => X |
|- | |- | ||
− | | Terminate || | + | | Terminate || GAP => called<br />CPN => X <br />ported_number not available || CPN => called<br /> RN => X<br /> ported_numbernot available |
|- | |- | ||
− | | Forward || | + | | Forward || if bitM=1 then<br />"" => ported_number<br />if GAP then<br />CPN => called<br />GAP => PNB<br />else<br />CPN => called || if npdi=yes then<br />"" => ported_number<br />if RN then<br />CPN => ported_number<br />RN=> called<br />else<br />CPN => called |
|} | |} | ||
Revision as of 15:37, 15 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
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, 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.
Incoming call mapping
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_numbernot 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 |