Acme Packet SBC: sag-lookup-on-redirect

Posted: 27th October 2011 by Mark in Acme Packet, SBC, SIP

In most cases a SIP Redirect Server simply responds to a SIP Invite with a 302 Moved Temp message and provides multiple contacts in the Contact Header.  When this occurs, the device receiving the 302 Moved Temp message (such as an Acme Packet SBC) will attempt to contact (ie. send a SIP Invite) the first address in the Contact Header.  If that fails, it will send a SIP Invite to the next address, and if that fails, the process will continue until there are no more addresses remaining.  Although this provides some form of redundancy it is not necessarily the best approach. Utilizing call flow this way means there is no control over how calls could potentially be load balanced if desired (or required).  Also, if one of the devices in the Contact Header is offline, there is no knowledge of this by the SBC and it will continue to send SIP Invites regardless and wait for the timers to expire. Definitely a less than desirable behavior.  The last item to note is that if you need to send SIP Invites to a potentially large group of servers (20 or more) there is a chance the Contact Header will become so large this is going to cause the SIP message to become fragmented.  All of these pitfalls may be easily avoided.

The Acme Packet SBC has a feature called sag-lookup-on-redirect. Simply put, the Redirect Server provides just one address in the Contact Header and the SBC will match that to a Session Agent Group in its configuration.  The result is calls may be load balanced (Hunt, Round Robin, Least Utilized, Least Busy, Proportional Distribution) and the SBC has the benefit of knowing when a target address (Session Agent) is alive and healthy which means it is in-service, or if the target is offline or unhealthy and therefore the SBC demotes it to an out-of-service state.  When a Session Agent is in an out-of-service state the SBC will not to send SIP Invites to that particular destination.

The feature sag-lookup-on-redirect is enabled through sip-config.

PHOENIX# configure terminal
PHOENIX(configure)# session-router
PHOENIX(session-router)# sip-config
PHOENIX(sip-config)# sag-lookup-on-redirect enabled
PHOENIX(sip-config)# done

In order for the SBC to pro-actively determine if a Session Agent is in-service or out-of-service, configure OPTIONS ping for each Session Agent.

session-agent

ping-method                     OPTIONS;hops=0
ping-interval                      60
ping-send-mode                 keep-alive

To view what Session Agents are in-service execute the following command:

PHOENIX# show sipd agents

Now, when the SBC receives a 302 Moved Temp message it will load balance based on the chosen scheme.  If any Session Agents are out of service the SBC will not attempt to send a SIP Invite.  The SBC waits until three successful OPTIONS pings are received before declaring an agent in service again.  This is great as it helps prevent an endpoint from flapping on the network.

Answer to Seizure Ratio (ASR) is a term used in Telecommunications and helps determine when new call setup attempt should be routed to an alternate destination. The definition of ASR is the number of successfully answered calls divided by the total number of calls attempted (seizures) multiplied by 100. The formula is (Answer / Seizure) * 100 = AnswerSeizureRatio.

Normally when an SBC initiates a SIP Invite to a peer and receives a SIP 503 Service Unavailable message in return the SBC will attempt another call setup to a secondary destination (Session Agent) automatically.  However, using an example such as busy signals, they not considered “failures” by a SIP device, yet there could be an upstream outage somewhere causing an unexplained amount of SIP 600 Busy messages being returned that is starving the Telecom network from completing calls. Since the Acme Packet SBC has the ability to route based on a configured ASR threshold, call may easily be routed to another destination if the configured ASR value falls below a specified threshold. Nice!

The place to configure ASR is within a Session Agent.  By defining a minimum (acceptable) ASR value, the SBC computes ASR as it makes routing decisions.  Using the formula first mentioned above, the SBC is calculating the number of successfully answered calls on a Session Agent and dividing by the total number of calls attempted. If the ASR constraints are exceeded, the Session Agent goes out of service for a configurable period of time and all traffic is routed to a secondary Session Agent (via a Local Policy which has the same Next-Hop but with a higher cost).

The two ASR parameters within a Session Agent are minimum seizure and minimum ASR.

Minimum Seizure determines if the Session Agent is within it’s normal constraints. For example, if 5 call attempts (seizures) have been made to a Session Agent and none have been answered, and the min seizures is set to 5, then on the 6th failed attempt the Session Agent will be marked as having exceeded its constraints and will be marked out of service.

Minimum ASR is considered when making routing decisions. If some or all of the calls to the Session Agent have been answered, the min ASR value is considered to make the routing decision. For example, if you set the Minimum ASR to 50% and the Session Agent’s ASR for that window falls below 50%, the Session Agent is marked as having exceeded its constraints and calls will not be routed to it until the time-to-resume has elapsed.

The time-to-resume element tells the SBC how long (in seconds) a Session Agent should be considered out of service once constraints have been exceeded.

Possible values for min-seizures range from 1 to 999999999. The default value is 5.

Possible percentage values for min-asr range from 0 to 100. The default is set to 0.

Networks where two or more egress paths exist on the VoIP network should consider using ASR based routing to provide the greatest level of network availability during a potential network congestion-outage related issue.

The packet-trace command allows the Acme Packet SBC (Session Director) to capture SIP signaling communication between two endpoints and send the capture to external server such as Wireshark.The SBC uses the network interfaces (ie. media interfaces) to send the capture.  The wancom management interface is not supported in this case.

The first step is to configure a capture receiver.  This tells the SBC what interface is used for the mirrored packets and the target IP of the Wireshark server. The network-interface is the SBC’s network-interface and sub-port ID.

The next step is to identify what IP and ports the SBC should listen to in order to send the packets to Wireshark. If no ports are identified then the SBC listens on all ports.

 

 

Even though it is not required to specify the local and remote TCP/UDP ports  it’s always a good idea to be as specific as possible when defining captures so only the required data is captured. At this point any calls coming into the SBC that involve the IP 217.154.63.10 on TCP or UDP port 5060 are going to trigger the capture and packets will be sent to Wireshark. Sixteen concurrent traces can be running at once.

One thing to note is the capture is sent to Wireshark using RFC 2003 (IP to IP encapsulation) as opposed to relaying SIP on port 5060. This means Wireshark needs to be configured to listen for RFC 2003 packets and then it will decode them. Use the ip.src filter to display only the encapsulated SIP packets.

SIP TLS (Transport Layer Security) is used to encrypt SIP signaling between SIP endpoints.  In order for this to function properly it is required that certain devices in the network import an SSL certificate.  Before importing the certificate into a device such as an Acme Packet SBC it is important to know if the certificate is from a CA (Certificate Authority) or perhaps self-generated in which case it would be considered a non-CA certificate.  Occasionally users have indicated the certificate is from a CA when in fact it is not.  This may generate an error if importing a non-CA certificate as a CA certificate.  Below is a quick procedure to verify the certificate using Mac OS X (or Linux).

$ openssl verify -verbose CertFile.crt
server.crt: OK

If the output is anything other than server.crt: OK then the provided certificate is not from a valid Certificate Authority.  For example:

$ openssl verify -verbose CertFile.crt
CallManagerAug22.crt: /CN=TESTCCM/OU=CISCOMCS7800/O=FPI/L=MANILA/ST=MAKATI/C=PH
error 18 at 0 depth lookup:self signed certificate
OK

Another alternative to verify a certificate is using Mac OS X’s Keychain Access application. Simply import the certificate and you will see something like this:

If using a CA based certificate here are the steps to generate a certificate request and load the certificate on the Acme Packet SBC

PHOENIX# configure terminal
PHOENIX(configure)# security
PHOENIX(security)# certificate-record

PHOENIX# generate-certificate-request markholloway

Generating Certificate Signing Request. This can take several
minutes…
—–BEGIN CERTIFICATE REQUEST—–
MIIDHzCCAoigAwIBAgIIAhMCUACEAHEwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UE
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCFNhbiBKb3NlMQ4w
DAYDVQQKEwVzaXBpdDEpMCcGA1UECxMgU2lwaXQgVGVzdCBDZXJ0aWZpY2F0ZSBB
dXRob3JpdHkwHhcNMDUwNDEzMjEzNzQzWhcNMDgwNDEyMjEzNzQzWjBUMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCTUExEzARBgNVBAcTCkJ1cmxpbmd0b24xFDASBgNV
BAoTC0VuZ2luZWVyaW5nMQ0wCwYDVQQDEwRhY21lMIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQCXjIeOyFKAUB3rKkKK/+59LT+rlGuW7Lgc1V6+hfTSr0co+ZsQ
bHFUWAA15qXUUBTLJG13QN5VfG96f7gGAbWayfOS9Uymold3JPCUDoGgb2E7m8iu
vtq7gwjSeKNXAw/y7yWy/c04FmUD2U0pZX0CNIR3Mns5OAxQmq0bNYDhawIDAQAB
o4HdMIHaMBEGA1UdEQQKMAiCBnBrdW1hcjAJBgNVHRMEAjAAMB0GA1UdDgQWBBTG
tpodxa6Kmmn04L3Kg62t8BZJHTCBmgYDVR0jBIGSMIGPgBRrRhcU6pR2JYBUbhNU
2qHjVBShtqF0pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWEx
ETAPBgNVBAcTCFNhbiBKb3NlMQ4wDAYDVQQKEwVzaXBpdDEpMCcGA1UECxMgU2lw
aXQgVGVzdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQAwDQYJKoZIhvcNAQEFBQAD
gYEAbEs8nUCi+cA2hC/lM49Sitvh8QmpL81KONApsoC4Em24L+DZwz3uInoWjbjJ
QhefcUfteNYkbuMH7LAK0hnDPvW+St4rQGVK6LJhZj7/yeLXmYWIPUY3Ux4OGVrd
2UgV/B2SOqH9Nf+FQ+mNZOlL7EuF4IxSz9/69LuYlXqKsG4=
—–END CERTIFICATE REQUEST—–;

PHOENIX# save-config
PHOENIX# activate-config

 

Once the certificate is received by the CA it needs to be imported on the Acme Packet SBC

PHOENIX# import-certificate [try-all|pkcs7|x509] [cert-file-name]

PHOENIX# import-certificate try-all markholloway

Please enter the certificate in the PEM format.
Terminate the certificate with “;” to exit…….
—–BEGIN CERTIFICATE—–
MIIDHzCCAoigAwIBAgIIAhMCUACEAHEwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UE
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCFNhbiBKb3NlMQ4w
DAYDVQQKEwVzaXBpdDEpMCcGA1UECxMgU2lwaXQgVGVzdCBDZXJ0aWZpY2F0ZSBB
dXRob3JpdHkwHhcNMDUwNDEzMjEzNzQzWhcNMDgwNDEyMjEzNzQzWjBUMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCTUExEzARBgNVBAcTCkJ1cmxpbmd0b24xFDASBgNV
BAoTC0VuZ2luZWVyaW5nMQ0wCwYDVQQDEwRhY21lMIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQCXjIeOyFKAUB3rKkKK/+59LT+rlGuW7Lgc1V6+hfTSr0co+ZsQ
bHFUWAA15qXUUBTLJG13QN5VfG96f7gGAbWayfOS9Uymold3JPCUDoGgb2E7m8iu
vtq7gwjSeKNXAw/y7yWy/c04FmUD2U0pZX0CNIR3Mns5OAxQmq0bNYDhawIDAQAB
o4HdMIHaMBEGA1UdEQQKMAiCBnBrdW1hcjAJBgNVHRMEAjAAMB0GA1UdDgQWBBTG
tpodxa6Kmmn04L3Kg62t8BZJHTCBmgYDVR0jBIGSMIGPgBRrRhcU6pR2JYBUbhNU
2qHjVBShtqF0pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWEx
ETAPBgNVBAcTCFNhbiBKb3NlMQ4wDAYDVQQKEwVzaXBpdDEpMCcGA1UECxMgU2lw
aXQgVGVzdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQAwDQYJKoZIhvcNAQEFBQAD
gYEAbEs8nUCi+cA2hC/lM49Sitvh8QmpL81KONApsoC4Em24L+DZwz3uInoWjbjJ
QhefcUfteNYkbuMH7LAK0hnDPvW+St4rQGVK6LJhZj7/yeLXmYWIPUY3Ux4OGVrd
2UgV/B2SOqH9Nf+FQ+mNZOlL7EuF4IxSz9/69LuYlXqKsG4=
—–END CERTIFICATE—–;

PHOENIX# save-config
PHOENIX# activate-config

 

From here there are quite a number of steps to perform in order to support SIP TLS and sRTP. The following example shows how to create a TLS profile for encrypted SIP signaling.

PHOENIX# config t
PHOENIX(configure)# security
PHOENIX(security)# tls-profile

Enter a name for the profile, name of the trust CA certificate record, and the tls-version (TLSv1 or SSLv3)

PHOENIX(tls-profile)# exit
PHOENIX(security)# exit

Now apply the TLS profile to the sip-interface that will be used.

PHOENIX(configure)# session-router
PHOENIX(session-router)# sip-interface
PHOENIX(sip-interface)# select

<SIP INTERFACE>

PHOENIX(session-interface)# sip-ports
PHOENIX(sip-port)# <ENTER>
PHOENIX(sip-interface)# transport-protocol tls
PHOENIX(sip-interface)# tls-profile <profile>

To view information about certificates loaded in the Acme Packet SBC:

PHOENIX# show security certificates [ brief | detailed ] <CERT>

certificate-record:markholloway
Certificate:
Data:
Version: 3 (0×2)
Serial Number:
04:55:32:55:50:84:45:71
Issuer:
C=US
ST=Arizona
L=Phoenix
O=sipit
OU=STCA
Subject:
C=US
ST=AZ
L=Phoenix
O=Engineering
CN=mh

The following VMWare specifications should be used when installing Cisco Unified Communications Manager 8 (Callmanager) as a virtual machine. This has been tested on both VMWare Fusion 3 for Mac and VMWare Workstation 7 for Linux. Note that it is best to pre-allocate your hard drive space if possible in order to get the best performance. Cisco is very generous with their VM licensing and permits three VM instances to form a 3 node cluster (one publisher, two subscribers) as well as 150 DLU’s which depending on your end point type will support 8 or more phones.  When I studied for my CCIE Voice (blueprint v3) I only used the demo license on CUCM with one publisher and one subscriber and the accommodated all of my lab requirements.  Thank you, Cisco!

The following screen shot shows the settings for VMWare Fusion but they are also identical for VMWare Workstation.

At the time the installation was performed the shipping version of CUCM was v8.02.  Shortly after, v8.03 began to ship and the requirements are the same. I have successfully upgraded from v8.02 to v8.03 in VMWare as well as upgrade to the newest v8.6.  One thing to note about installing CUCM 8 is you will need a working NTP server IP address. This may be a router in your lab, Linux server running NTP, an NTP IP on the Internet, or if you are planning to use DNS simply point to pool.ntp.org.

Gathering metrics on a VoIP network is crucial and the Acme Packet Session Director (SBC) has a feature that comes standard with the platform called Historical Data Recording (HDR).  The purpose of HDR is to enable a set (or sets) of categories ranging from CPU and Memory utilization to SIP errors, enum statistics,  ACL status, etc., and have the SBC create CSV files which are then sent off to an external FTP/SFTP server where the data can be mined.  This provides the convenience and ability to measure network performance, plan for additional capacity before reaching a critical state, or aid in troubleshooting customer related issues.

Historical Data Recording covers a wide range of collection objects and multiple HDR groups may exist in the SBC where data may be sent to different servers or broken out by different groups. The following is a list of groups available for data collection. Each group contains dozens of element statistics that will be gathered. The element list is very long so it is not posted here, but the complete element list for each group is available in the ACLI Configuration Guide.


The place to configure HDR is system > system-config > collect

The group-settings command allows the SBC to only report on specific data rather than everything. If no group-settings are defined then the SBC automatically provides data for all elements (as shown below).

Data is being sent to 172.16.24.4 using FTP.  The server resides on the same subnet as the Management interface of the SBC. The FTP username is ossadmin since this is also the same server CDR’s are delivered to from the SBC. A folder named hdr was created in the ossadmin home directory which is the destination FTP folder for the SBC to send HDR files to. Ensure that ossadmin is the owner of the hdr folder. Within that directory the SBC automatically creates a new directory PHOENIX which is the hostname of the SBC.  If additional SBC’s exist on the network and they are sending to the same destination FTP hdr folder then each SBC creates its own directory based on its hostname. Within the SBC directory the SBC creates sub-directories for each of the categories the HDR send reports on.

From this point we navigate to a folder and see the CSV files that have been uploaded to the server.  The sample-interval within the system > system-config > collect menu context is set to 5 minutes and the push-interval set to 15 minutes. This means a new file is sent every 15 minutes with three sampled intervals of data in each CSV.

In this example we navigate to the space folder which tells us how much space is used and how much is available in the SBC’s localized storage.

Notice there are three sampled intervals contained in one file. This correlates to the sample-interval and push-interval mentioned earlier.

It is worth noting that HDR typically consumes less than 1% of total CPU Utilization. It also has the ability to support redundancy so files may be sent to additional FTP/SFTP servers if necessary in the event the primary FTP server is unreachable.

 

The alarm-threshold command gives the Acme Packet SBC the ability to send minor, major, or critical alarms when CPU, Memory, Rfactor, Space (/ramdrv), and Session count reach a specific threshold based on % usage. Each element is monitored individually so the alarm is sent only for the violating element. Setting these values is a great step towards monitoring your network for health and capacity.

In the following example the SBC is being configured through the ACLI to monitor the number of simultaneous Sessions and will send a major alarm when the SBC is using 75% of its session capacity.  For example, if this SBC supports 16,000 sessions and 12,000 sessions are currently in use, the SBC will send a major alarm to the configured SNMP trap-receiver.

 

Adding the alarm-threshold settings to your configuration is essential to following Acme Packet’s Best Current Practice for the platform.

QoS Routing on the Acme Packet SBC

Posted: 19th May 2011 by Mark in Acme Packet, SBC, SIP

QoS based Routing is a feature of the Acme Packet SBC (Session Director) that pro-actively observes and measures RTP quality on a given network path (realm) by using R-Factor (QoS measurement) to determine if quality is acceptable. If the R-Factor falls below a certain threshold then new calls are re-routed on another network path using a different realm. This works for both inbound and outbound calls.

The example diagrams show calls being received inbound from an ITSP. It is common for customers to deploy multiple SBC’s in different physical locations for geographic redundancy. Most people think of redundancy and failover occurring when the network is completely down or unreachable, but another factor to consider is a network condition where route flapping, DoS attacks on a router, or bad cabling play a role in an outage and there is intermittent network connectivity. In many cases having intermittent connectivity is actually worse than the network being completely unreachable. For example, if a SIP Invite is successfully setup, yet within seconds the network experiences flapping, the RTP traffic will be lost momentarily. This is where QoS based Routing can save the day.

This first diagram displays a primary and secondary SBC with two SIP paths from an ITSP to the customer’s network. In this case there is no service disruption occurring.

The next diagram shows the primary site being physically unreachable (down hard). The SIP Invite from the ITSP to the primary site will time-out which then causes the ITSP to send a SIP Invite to the second site.

The third diagram provides an example of SIP signaling when the SBC at the primary location is detecting an R-Factor score below the configured threshold. The SBC pro-actively knows the link is experiencing poor quality and returns a SIP 503 Service Unavailable to the ITSP which forces the ITSP to send a SIP Invite to the secondary site.

In order to utilize QoS based Routing on the SBC it requires the qos-enable value to be set to enabled under media-manager/realm-config. QoS based Routing uses R-Factor to measure quality on a per-realm basis to either cut back the traffic allowed through a realm or alternatively shut down all traffic on that realm.

When configuring QoS constraints per realm there are two categories: major and critical. The constraints set in the major category rejects a certain percentage of calls with a SIP 503 Service Unavailable message. The percentage value is configurable by the user using the call-load-reduction context entry with a value between 0 and 100 (0 represents no call reduction and 100 represents all calls rejected). Calls originating on the customer’s network towards the ITSP will automatically use another realm if there are other routes configured on the customer’s SBC, otherwise calls will be rejected if there are no alternative routes. The critical behavior functions very similar to major, however the user may specify when calls should resume on the realm based on a time-to-resume value which tells the SBC to wait until the R-Factor has achieved acceptable performance for a specific period of time.

Surrogate Registration using the Acme Packet SBC

Posted: 19th May 2011 by Mark in Cisco

The purpose of Surrogate Registration is to allow SIP endpoints that do not have the ability to perform SIP registration, or don’t gracefully manage their registrations very well, to appear as a registered endpoint on a SIP registrar platform such as Broadsoft BroadWorks. It is not always desirable to have a SIP endpoint function as a non-registered endpoint in the SIP registrar platform.

Surrogate registration is accomplished by configuring a surrogate agent on the Acme Packet SBC and identifying what realm the IP PBX will communicate with on the Access side. The SBC will perform SIP registration on behalf of the endpoint (IP PBX) towards BroadWorks.

Details about the surrogate-agent configuration.

  • register-host is the SIP domain assigned to the users in BroadWorks such as 4804814000@sip.itsp.com
  • register-user is the Username the registrar is expecting for SIP registration
  • realm-id is the name of the realm that is customer-facing (towards the IP PBX)
  • customer-host is the IP address assigned to the IP PBX
  • customer-next-hop is the session agent or session agent group the SBC should register to
  • register-contact-host is the IP assigned to the SBC used as the source registration IP in the contact header
  • register-contact-user is the host portion of the URI in the contact header
  • register-expires tells the SBC how often to refresh the SIP registration before it expires on BroadWorks
  • route-to-registrar forwards requests to the registrar even if the IP PBX even if not explicitly send to the registrar
  • aor-count is the number of registration to perform on behalf of the IP PBX (1 is most common)
  • auth-user is the Authentication Username assigned to the user in BroadWorks

If aor-count is more than 1 the SBC incrementally performs registrations based on the register-user.  If the aor-count is 5 and the register-user is foo, then the next registration increment will be foo1, then foo2, foo3, and foo4, until the total aor-count is reached. In a Trunk Group scenario in BroadWorks it is very common to use single number registration using the Pilot User, so the default aor-count value would be acceptable.

SIP Header Manipulation provides the flexibility to add, remove, or modify any attribute in a SIP message on the Acme Packet SBC. The most common reason for doing this is to fix an incompatibility problem between two SIP endpoints. This could range from anything such as Softswitch/PSTN incompatibility or an issue between two different IP PBX platforms in a multi-site Enterprise where calls between them fail due to issues in the SIP messaging.

In the past there was no straight forward way to test SIP Header Manipulation Rules other than performing save/activate and manually placing test calls to see if the HMR worked.

The example below is a case where an HMR needed to be written to route calls based on the Charge Number in the SIP Invite rather than routing on the Request-URI, TO, or FROM numbers. Because BroadWorks R14 uses a proprietary charge number header it is required to have one rule that looks at the number in the charge number header and stores that value using a store-action, then through the use of a second rule pastes the number as cn=4804563000 into the Request-URI then use a local-policy to route the call based on the cn= value.

The original SIP Invite from BroadWorks looks like this.

INVITE sip:+18005551212@sip.markholloway.com:5060;user=phone SIP/2.0
From:”John Smith”<sip:4804814001@voip.markholloway.com;user=phone>;tag=1121176714-1301523646656-
To:<sip:+18005551212@sip.markholloway.com:5060;user=phone>
Call-ID:BW1520466563003111177145372@10.12.135.140
CSeq:74277985 INVITE
Contact:<sip:10.12.135.100:5060>
Privacy:none
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY
Accept:multipart/mixed,application/media_control+xml,application/sdp
Charge:<tel:4804563000>;noa=clgp-ani-natl-num
Supported:
Max-Forwards:10
Content-Type:application/sdp
Content-Length:255

The goal is to Route based on the Charge Number not the Request URI, To, or From numbers.  An HMR on the Session Director must be created to extract 4804563000 from the Charge Number header and insert it in the Request URI as a cn=4804563000.

Here is the HMR for copying the number from the Charge Number header and inserting it as a cn= parameter in the Request URI. Note this is one sip-manipulation that contains two rules.

 

The HMR may be tested directly within the ACLI by pasting in ASCII text that contains the original message of which the SD will manipulate.

The next step is set debugging enabled (from within test-sip-manipulation), show the sip-manipulation you are about to test (always good for verification), and then execute the test.

The SD shows the debug output of the original SIP Invite that was pasted in ASCII.

The SD now presents the newly manipulated SIP Invite.

Now that the Charge Number has been inserted as part of the Request URI using the cn= parameter a Local Policy’s Policy Attribute may be configured with lrt:RouteLRT;key=cn

The value key=cn tells the policy attribute to route based on the value within the cn parameter which in this case is cn=4804563000