Least Cost Routing (LCR)


Steps to Create/Update Route Table from Rate Decks

Import Rate Decks to NAS Rate Table

Manually export the Rate Decks into CSV,  if they are not already in CSV, e.g. a spreadsheet, with the column <Header Name>s in the 1st row, having some of the recognized <Header Name> combination as show in the "Rate Deck Formats" section below. Upper or lower case does not matter, but you may need to tweak some of the <Header Name>s to match, e.g. from "New Rate" or "RATES" to "RATE". Delete any extra rows above the row with the column headers

From the NAS "System"-"Export/Import"-"Import Rate Deck", import Rate Decks into NAS's Rate Table. One Rate Table per Carrier, but use the same <Domain> for all the imported Rate Table. "LCR" would be a good convention to use as <Domain> for all Rate Plan meant for the LCR. For International Rate Deck, select "Don't Care" for "Inter-State" and "Inter-LATA". For Domestic Rate Deck, select "Don't Care" for "International"

Create "Union of Prefix" in NAS Country Code

Create new NAS Country Code (i.e. Union of all Prefix) for the <Domain> that own all the Rate Tables from imported Rate Decks by clicking the "Create" button in the corresponding entry in the NAS's "Country Codes" page. Should apply the "Purge" before the "Create" to flush the Country Codes for the specific domain before the "Create".

Create NMS Route Table Skeleton

Export new NMS Route Table Skeleton from the new NAS Country Code from NAS "System"-"Export/Import"-"Export NMS Route". Import this Route Skeleton into the NMS from the NMS's "System"-"Export/Import"-"Import Routes". Should purge the route table before hand by Export the full NMS  route table and then import the exported file with "Purge"

The NAS' Export NMS Route form page has the following parameters:

 From
This is a dropdown menu to select a source type to export, either "Rate Plan" or "Country Code"
 Domain
 This dropdown menu allows selection of the domain from which to export.  Default is "LCR"
 Term Prefix
 This is an optional field.  Adding text here will filter routes that meet the "Term Prefix" criteria in a Rate Plan and export only those that meet the filter criteria.
 Class  This is an optional field.  Adding text here will filter routes that meet the "Class" criteria in a Rate Plan and export only those that meet the filter criteria.
 Route Name
   This is an optional field.  Adding text here will filter routes that meet the "Route Name" criteria in a Rate Plan and export only those that meet the filter criteria.


To import the Route Skeleton to the NMS, check the sizing for the followings in "/etc/php.ini"
("httpd" need to be restarted for any change to in "php.ini" to take  effect)



; Maximum execution time of each script, in seconds

max_execution_time = 300

; Maximum amount of time each script may spend parsing request data
max_input_time = 300

; Maximum amount of memory a script may consume (16MB)
memory_limit = 64M     

; Maximum size of POST data that PHP will accept.
post_max_size = 64M

; Maximum allowed size for uploaded files.
upload_max_filesize = 64M



Create NAS Account

Create NAS Account to associate with each Termination and assign the corresponding Rate Plan imported from the associated Rate Deck or Decks. These accounts must maintain Valid Period and some amount of Minimum Balance.

Create NMS Connection

Create the NMS Connection and set its Domain and Rate Account corresponding to the NAS Account associated with the intended Rate Plan.

Populate Connection into NMS Route Table

View the LCR from the NMS's "Dial Planning"-"Call Routing" page. Un-check "Fixed" and "Percentage" to show the "Least Cost" view, and make available the "Update Connection" and "Purge Connection" buttons. Add new connection by hitting the "Update Connection" button, and select one of the existing Connection. With the System Parameter "LcrGetCostWhenAdd" set to "yes" , the NAS will be queried for the cost of the added connection for each route as it is added. This can take a very long time, but the system should continue to function and route while connection is being added and cost is being looked up.

Cost for each connection can re-queried from the NAS, if the System Parameter "LcrGetCostWhenUpdate" is set to yes, by hitting the "Update Connection" button and select the specific connection.


Data Structures

Rate Deck Formats

The Rate Deck Import function in the NAS support a variety of common formats and will attempt to recognize the format in the CSV files by their header row.

All header lines are NOT case sensitive.


Type Header Fields Internt'l Domestic Carrier Comments
1 "PREFIX" or "PATTERN" and "RATE" in any order yes yes Generic Take <PREFIX> or <PATTERN> as Prefix
Update Country/Locale Name from <COUNTRY> or <LATA NAME>
2 "NPA" and "NXX" and "RATE" in any order no yes Generic Form Prefix as 1<NPA><NXX>
Update Country/Locale Name from <COUNTRY> or <LATA NAME>
3 "NPANXX" and "RATE" in any order no yes Generic
Form Prefix as 1<NPANXX>
Update Country/Locale Name from <COUNTRY> or <LATA NAME>
4 "OCN" and  "LATA" and "RATE" in any order no yes Generic Look up <NPA> and <NXX> from LERG Table with <OCN> & <LATA>
Form Prefix as 1<NPA><NXX>
5
("OCNLATA" or "OCN_LATA") and  "RATE" in any order no
yes
Generic Look up <NPA> and <NXX> from LERG Table with <OCNLATA>
Form Prefix as 1<NPA><NXX>
6
("LATAOCN" or "LATA_OCN") and  "RATE" in any order no yes
Generic Look up <NPA> and <NXX> from LERG Table with <LATAOCN>
Form Prefix as 1<NPA><NXX>
7 "SWITCH" and "RATE" in any order no yes Generic Look up <NPA> and <NXX> from LERG Table with <SWITCH>
Form Prefix as 1<NPA><NXX>
8
"NPA","NXX","THOUSAND","RATE" in any orderno
yes
GenericForm Prefix as 1<NPA><NXX><THOUSAND>
10 Exactly ("NPA","NXX","Interstate Termination","Intrastate Termination") no yes Starview Form Prefix as 1<NPA><NXX>
11 Exactly ("Place","Location ID","Pattern(s)","Rate","Change","Effective Date")
yes no TDM CARR Extract each <Pattern> in <Pattern(s)> as a Prefix
Each <Pattern> is separated by a <comma> in <Pattern(s)>
Update Country/Locale Name from <Place>
12
Exactly ("Region","Place","Location ID","Previous Rate","New Rates") no yes TDM CARR Parse <SWITCH> from <Place>
Look up <NPA> and <NXX> from LERG Table with <SWITCH>
Form Prefix as 1<NPA><NXX>
13 Exactly ("Region","Dial Codes","Current Rate ($/Min)","New Rate ($/Min)","First Increment Seconds","Increment Seconds","Status","Notification Date","Effective Date") yes no Phonetime Network Take <Dial Codes> as Prefix
Update Country/Locale Name from <Region>
14
Exactly ("Country","1+","Code","Rate")
yes no NovaTel Form Prefix as <1+><Code>
<1+> are mostly a NULL string
Update Country/Locale Name from <Country>
15
Exactly ("STATE","LATA","LATA NAME","OCN","PARENT COMPANY NAME","NPA","NXX","Block ID","MTA 1","MTA 2","Actual Switch ID","WTS Status","Rate per MOU") no yes Hybercube Form Prefix as 1<NPA><NXX><Block ID>
Update Country/Locale Name from <LATA NAME>
16
Exactly ("NPANXXX","Interstate","Intrastate")no
yes
bandwidth.com
Form Prefix as 1<NPA><NXXX>
17
Exactly ("Country Name","City/Area","Country Code(s)","Rate")yes
yes
NetSapiens
Extract each <Coutnry Code> in <Country Code(s)> as a Prefix
Each <Country Code> is separated by a <space> in <Country Code(s)>
Update Country/Locale Name from <Place>
18
Exactly ("1NPANXX","InterRate","IntraRate")noyesStarview
Prefix is exactly <1NPANXX>

 Formats that are different but close to one of the supported formats can be touched up manually before the import.

Support for additional formats can be implemented as needed.

NMS Route Table and Connections

         

System Performance Tuning

NMS Configuration

Parameters Values Default Descriptions Configuration for LCR
LcrGetCostWhenAdd yes or no no
Query NAS for Connection Cost when new Connection is added to a route yes
LcrGetCostWhenUpdate yes or no no
Query NAS for Connection Cost when an existing Connection is updated
yes
LergRouting yes or no no
Control whether to apply LERG for Routing yes


Pool Size

Parameters Values Default Descriptions Suggested Configuration for 1000 Active Call
LegPoolSize integer
4000
Number of session legs to allocate in the Session Leg Pool 4000
PacketPoolSize integer 20000
Number of packets to allocate in the Packet Pool
Its about 20M/10KPacket
20000
SessionPoolSize integer 2000
Number of session to allocate in the Session Pool.
Its about 300M/1KSession
3000
UacPoolSize integer 1000
Number of transactions to allocate in the UAC Transaction Pool 12000
UasPoolSize integer 1000
Number of transactions to allocate in the UAS Transaction Pool 3000

Time Out

Parameters Values Default Descriptions Suggested Configuration for 1000 Active Call
SessionDisconnectTO integer
32
Time Out in second for the Session Disconnect State
6
SessionTerminateTO integer
32
Time Out in second for the Session Terminate State
4
TOResponse
integer 6
Time Out in second for the UAC to wati for a Response 3

NAS UI Configuration

Parameters Values Default Descriptions Configuration for LCR
UI_SHOW_NMS_ROUTE_EXPORT yes or no no
To show NMS Route Export page yes
UI_SHOW_RATEDECK_IMPORT
yes or nono To show Rate Deck Import pageyes

Operations

NMS Routing

The NMS Routing has the options to be
  • Fixed - Connections for each route are tried sequentially based on their index ordering until either success or no more connection
  • Percentange - Connection for each route are selected randomly based on the weighted proportion. The maximum number of alternate routes is configured by the system parameter "AltPerRouteMax"
  • Least Cost - Connections for each route are tried sequentially based on their least cost ordering until either success or no more connection.

Rate Margin

"Rate Margin" constraints the LCR to exclude Routes that cost more then what will be charged to the "Origination Connection".
  • Lookup <Cost Ratio> and <Fixed Margin> from "Origination Connection".
  • NMS queries <Charge Rate> associated with the "Origination Connection" from NAS via "RateQuote".
  • Apply (<Charge Rate> * <Cost Ratio> - <Fixed Margin>) as <Cost Threshold> in LCR lookup
Notes:
  • <Cost Ratio> should less then 1 and <Fixed Margin> should be greater then 0 to imply some profit.
  • System Parameters <RateOrigLogi> and <RateTermLogi> are referenced by the "RateQuote" logic to select the <Charge Rate> based on the logical or  physical Origination and Termination URI

Rate Ceiling

"Rate Ceiling" prevents connecting calls beyond what an "Origination Connection" willing to pay.
  • Lookup <Max Rate> from "Origination Connection".
  • If <Max Rate> is not <NULL>, and selected Route is configured for Least Cost, apply <Max Rate> as <Cost Threshold> to constraint the Connection selection with cost no greater then the <Max Rate>

Notes:
  1. <NULL> <Max Rate> is an empty string, and "0.0" is not <NULL>
  2. <Max Rate> is ignored for Route configured for Fixed or Percentage routing.

Minimum Call Duration

Upon BYE received during a Conversation, enforce the Minimum Call Duration configured for the surviving Connection, if Auto Next Call is NOT applicable.

CDR's Release Time and Rating Release will be applied at the end of the enforcement.

Enforcement is not applicable upon BYEs received from both parties !

UI Configuration

Parameter Description Default
UI_SELECT_GW_MIN_DURATION_LIMIT
Maximum value for Connection's Minimum Call Duration drop-down
60
UI_SHOW_GW_MIN_DURATIOAN
To showConnection's Minimum Call Duration no

Connection Configuration

Parameter Description Default
Min Duration
Minimum Call Duration (in second) to be enforced
0

Comments