Aayush: weblog

Archive for the ‘HSS’ Category

Race Condition for “tel” URI Routing in IMS – Unknown numbers !

Posted by Aayush Bhatnagar on April 4, 2011

Recently, in a discussion I came across a race condition that occurs in IMS for routing tel URIs which no longer exist in the IMS domain (operator’s network).

The problem statement is as follows:

When the operator de-provisions a telephone number from the IMS core, and another IMS subscriber dials this invalid number, then the call traverses the Proxy CSCF and hits the S-CSCF. I am assuming that it is an intra IMS domain call – synonymous to a local call. Here the called party (B-party) is the invalid subscriber. The S-CSCF executes the originating iFC set for the calling party as per the standards. Then, the S-CSCF realizes that the called party address is a tel URI and an ENUM query needs to be performed. As the subscriber has been de-provisioned from the network completely, the ENUM query fails.

This triggers the S-CSCF to forward the call to BGCF believing that legacy interconnect procedures need to be performed and the called party is a legacy subscriber. The BGCF attempts breakout towards the MGCF, which converts it to an IAM and sends it to the PSTN.

The situation would become even more complex with number portability, where we can no longer filter numbers based on ranges alone at the BGCF.

The PSTN domain would send it back to the IMS core thinking that the call was destined towards IMS. As inter-working will take place again at the MGCF for the incoming call leg, this call would land as a brand new call to the I-CSCF (with a refreshed Max-Forwards header) and a new Call-id.

Now, the I-CSCF will perform the DIAMETER user location query to the HSS and this query would fail, as the tel uri never existed in the first place. Based on the procedures in TS 24.229, the I-CSCF will inspect the address (which is the tel URI) and then perform the ENUM query. This query would fail as expected and the call will be forwarded to the BGCF once more mistaking it to the legacy interconnect case.

The sequence of events above would lead to an infinite loop in the network for this call.


The solution to this problem is to avoid the breakout to the PSTN through the BGCF in case the user has dialed an invalid number. In order for this to happen, the ENUM query must not fail. Hence, it is proposed that when the user is de-provisioned from the network, the ENUM mapping of his number is changed to a generic SIP URI such as the following –


This will ensure that this generic SIP URI is returned when the ENUM query is fired. In this case, the S-CSCF will forward the call to the I-CSCF instead of the BGCF. The I-CSCF will then forward the call to the MRFC by executing PSI subdomain routing in the sense of TS 23.228.

This would ensure that the MRF will play an announcement that the “number does not exist”. This is what is needed in this scenario. But, even here, the I-CSCF needs to do some NETANN magic before forwarding the call to the MRF (refer here: http://tools.ietf.org/html/rfc4240). Hence, the I-CSCF implementation has to be careful to make this work well.


As and when I come across more race conditions in the IMS network, I will post them here (most probably with a possible solution to get around them).



Posted in HSS, I-CSCF, IMS, IMS data, IMS procedures, IMS Release 11 | Tagged: , , , , , , | Leave a Comment »

Integrating Ericsson SDS IMS Simulator with Mobicents and then rocking the house with Eclipse.

Posted by Aayush Bhatnagar on October 17, 2009


In this post, I will explain how to integrate the Service Development Studio (SDS) which emulates the entire IMS core network, the HSS, a DNS server and BGCF etc with the Mobicents communication platform (also called JBCP).

IMS application development and testing could not get any more productive for developers using this combination.

The IMS application server used here on top of Ericsson SDS is the Presence Server deployed on Mobicents.

This post will provide step-by-step instructions to achieve this integration along with informative screenshots:

STEP-1: Download and Install Ericsson Service Development Studio in Eclipse.

I am using Eclipse Galileo for this demonstration.

You can now download the SDS in your eclipse installation by using the Software Updates mechanism (the same way we install plugins). As shown in the figure below, go to HELP and then click on “Install New Software”. Then you add this website for installation:


[I have had queries that this URL is not working when “clicked”. This URL is not supposed to be clicked, but added to the eclipse website updates and installed there]

Once you do so, you should see a list of packages for installation. However, the packages will only be visible if you un-check the option that reads: “Group Items by Category”. Once you do this, you will see the packages that need to be installed.


You will need to accept the license for this software to proceed for installation as shown below:


Once the packages are installed, re-start Eclipse for the changes to take effect. Once you restart Eclipse, you will start seeing the views associated with SDS.

STEP-2: Configure the DNS server of SDS using Eclipse:

Now configure the DNS server with the domain of the Mobicents server hosting the Presence service. For this example I have used a well defined IP address belonging to my laptop. I got this IP by virtue of connecting to the internet. Save the domain name in the DNS server as shown —> presence.mobicents.com


Step-3: Configure the SDS HSS node for service control and service provisioning:

The next step is to configure the HSS.

Go to the HSS view as shown in the figure and configure the Service Trigger Point (SPT) for the Presence Service as shown below. The SPT is for the PUBLISH method, which is used by the presentity to publish their presence status to the server. By defining this SPT, we are telling the S-CSCF to make a routing decision for this message, whenever it is received.


Now, specify the definition of the SPT in the HSS view as shown. Define an initial filter criteria for this service, the SIP application server to be contacted (Mobicents in our case) and the default handling to be undertaken by the S-CSCF, in case Mobicents is not reachable.  The default handling here is SESSION_CONTINUED.


After the initial configurations of the DNS server and the HSS, it is time we start the action.

Step-4: Start the DNS Server:

Start the DNS server by clicking on SDS—>Server—>DNS—->Start DNS as shown in the figure below:


Step-5: Start the Call Session Control Function (CSCF):

Now start the CSCF by navigating to SDS—>Server—>CSCF—>Start CSCF.


Step-6: Start the Test agent acting as an IMS UE:

Now start the test agent by navigating to SDS—>Test Tools—>Start Test Agent as shown below.


Step-7: REGISTER the test agent with the Ericssion IMS SDS core:

Now create a REGISTER request as shown in the figure and register the test agent with the IMS core network. You can provision any number of users in the HSS and register them in the IMS core network.

In the figure, you can see that we can add and remove additional SIP headers as needed by us for testing


After creating the REGISTER request, send it to the IMS core network by clicking on the button and receive the 200 OK. You can also see the call flow in Eclipse that updates itself dynamically as the SIP messaging progresses.


Step-8:  Start Mobicents (JBOSS application server) on your machine:

Here, I am using Mobicents as the application server over IMS. Use the Presence Serve binary given here and start it on your local machine by issuing a run.bat -b <ip-address> command on Windows and a run.sh -b <ip-address> on Linux.

You can download the Presence Server binary from here:


Make sure that JAVA_HOME environment variable is set properly.


Step-9: PUBLISH your presence from the test agent:

Now, using the test agent send a PUBLISH request. Do not forget to add an Event:presence header to the request.


Send the request to the IMS core network. On the basis of our earlier configurations, the PUBLISH message will reach the Presence Server as shown below and is then processed by the Presence Server.


So, you can see, how productive it can be using the right open source tools and projects for IMS service development and testing. It can save you a lot of time and effort by using the right tools.

Instead of struggling with Open IMS core, SDS can be used for IMS emulation. On top of the IMS core, you can use the Mobicents platform for rapid service creation and deployment.

All this can be achieved by JAVA developers using familiar tools (Eclipse workbench) and on the same machine !

So guys, dont wait…try it out !!

Tell me how you liked this demonstration and give me feedback. Please feel free to post here, in case you encountered any problems, or if this demo helped you in any way.

Cheers !

Posted in 3gpp, DNS, Eclipse, Ericsson, HSS, I-CSCF, IMS, Mobicents, P-CSCF, presence, S-CSCF, SDS | 22 Comments »