Oracle Routing #
The Oracle SBC has a few options available for routing calls.
- Local-policy
- ENUM and Local Routing Table
- Trunk-group
- Registration Cache
- Service-Route Header routing
- Header Routing
- DNS Lookup
Local Policy #
The main method for routing calls. Matches based realm then longest match on either Request-URI or the From header. The ingress realm is determined the network interface, in the case of multiple realms the SBC will use the source IP of the session agent, then the sip interface, if none of these are unique then the addr-prefix on the realm will be used. Next hop configurations can be as follows.
- IP Addresses
- EMUN Servers
- Local Routing Tables
- Session-agents
- session-groups
- DNS
- Etc..
Notable Parameters #
policy-priorityCan be used to give higher matching priority to a local-policy, useful for 911.policy-attributeIs used to determine wha the next hop will be. Preference can be selected based on carrier, time, cost, SIP Methods, or Codec. With the result determining the realm used for egress(if left blank the SBC will use the realm on the session-agent) and next hop. more specific elements will be selected over less specific elements. e.g. time of day 0:00-24:00 vs 8:00-17:00(more specific).media-profileThe SBC can routing incoming traffic based on Codec.terminate-recursionIf set to enabled the SBC will not continue to search other policy-attributes.next-hopDefines a an object that is used as destination the that SBC will use to send a call to. This can be session–agent, session-group, ldap, enum, etc.
Session Constraints and Options #
session-agentsCan leverage constraints to influence local-policy routing decisions. Withconstraintsenabled andmax-sessionsset to 1 the session agent would allow 1 call before being marks as unavailable in the local-policy evaluation.rate-constraintsCan be used to limits calls based on individual methods.extra-methods-statsmust be enabled to used this option. Withrate-constraintsyou do not want to configure it to include ACK, PRACK, BYE, INFO, REFER.
session-groupOne of a few method can be used to select a destination hunt, least busy, lowest sustained rate, round robin, and proportional distribution.proportional distributionWill distribute calls based onmax-sessionsconfigurations.
Other Routing Options #
Enhanced resolutionof addresses can be located in the Contact header or the maddr parameter of a 3xx redirect message. The SBC will look for either a session-agent with a matching hostname or IP or session-group with a matching hostname as the group-name. This routing is enabled via thesip-interfaceandsession-agent. redirect options are proxy, recurse, recurse-305-onlyStatic flowsis a unidirectional configuration that will allow the SBC to pass traffic from one realm to the next.
DNS #
There are a couple records that come into play when routing by DNS those include
NAPTRDefines the type of service and transport protocol used.SRVDefines a target host and port to be used for connections.A(IPv4)/AAAA(IPv6)Defines a FQDN to IP mapping.
When using DNS the order of operations are as follows.
- Determine egress realm
- Determine egress realm network interface.
- From the network interface pull the configured DNS.
- Send a DNS request to the primary Server. If the primary fails then used the secondary.
- Preform a recursive lookup or additional queries depending on the NAPTR results.
- Setup the call based on FQDN results.
With in the policy-attribute valid next hop entries are HOSTNAME:sip.oracle.com or DOMAIN:oracle.com
ENUM #
Shot for E.164 number mapping. It can use DNS to locate services.
- The number would be stored in e.164 format.
- Digits like
+or-would then be removed. - The order of the Digits would be replaced.
- Dots would be added in between each number.
e164.arpawould be appended to the end.- The domain name is queried for the records that defines the URI’s.
With in the policy-attribute valid next hop entries are enum:enum-object
LRT (Local Routing Table) #
An LRT is a xml file that can be used to match a number to a destination. There can be ~500 LRT tables, 100,000 entries per LRT, and 2,000,000 per system. LRT’s use regex to parse the request-URI to find a routing match an example is below, refer to Using the Local Route Table LRT for Routing for more information.
<?xml version="1.0" encoding="UTF-8"?>
<localRoutes>
<route format=”weighted”>
<user type="E164">370</user>
<next prio="0" weight="40" type="regex">!^.*$!sip:\0@SAG-CarrierA!</next>
<next prio="0" weight="30" type="regex">!^.*$!sip:\0@SAG-CarrierB!</next>
<next prio="0" weight="20" type="regex">!^.*$!sip:\0@SAG-CarrierC!</next>
<next prio="1" weight="10" type="regex">!^.*$!sip:\0@SAG-CarrierD!</next>
<next prio="2" weight="10" type="regex">!^.*$!sip:\0@SAG-CarrierE!</next>
</route>
<route>
<user type="E164">371</user>
<next type="regex">!^.*$!sip:\0@SAG-NoPrio1</next>
<next type="regex">!^.*$!sip:\0@SAG-NoPrio2</next>
</route>
</localRoutes>
Type
rangeandE164cannot be used in the same file.
LRT files are placed in the /code/lrt directory. When they have been updated. you must entry notify lrtd refresh <local-routing-config name> if you have HA then issue synchronize lrt /code/lrt/<filename>. The following is considered best practice.
local-routing-config
name lrt
file-name lrt.xml.gz
prefix-length 0
string-lookup disabled
retarget-requests enabled
match-mode best