This is a channel driver for the UNISTIM (Unified Networks IP Stimulus) protocol. It provides UNISTIM server services that you can use to drive Nortel i2002, i2004, i2007 and i2050 phones.
The following features are supported:

  • Transfer
  • Call Forward
  • Message Waiting Indication (MWI)
  • Distinctive ring
  • Call History
  • Send/Receive CallerID
  • Redial
  • (Dynamic) SoftKeys
  • SendText()
  • Music On Hold

Available on all version of Asterisk. With described fature set available in Asterisk 11. For 1.8 and 10 can be downloaded as patches.

How to place a call :

The line=> entry in unistim.conf does not add an extension in asterisk by default. If you want to do that, add extension=line in your phone context.
if you have this entry on unistim.conf :

line => 102

then use

exten => 2100,1,Dial(USTM/102@violet)

You can display a text with :

exten => 555,1,SendText(Sends text to client. Greetings)

Distinctive ring:

You need to append /r to the dial string.
The first digit must be from 0 to 7 (inclusive). It’s the ‘melody’ selection.
The second digit (optional) must be from 0 to 3 (inclusive). It’s the ring volume. 0 still produce a sound.
Select the ring style #1 and the default volume :
exten => 2100,1,Dial(USTM/102@violet/r1)
Select the ring style #4 with a very loud volume :
exten => 2100,1,Dial(USTM/102@violet/r43)

Country code:

You can use the following codes for country=
us fr au nl uk fi es jp no at nz tw cl se be sg il br hu lt pl za pt ee mx in de ch dk cn

If you want a correct ring, busy and congestion tone, you also need a valid entry in indications.conf and check if is loaded.

language= is also supported but it’s only used by Asterisk (for more informations see Asterisk multi-language ). The end user interface of the phone will stay in english.

Bookmarks, Softkeys:

– Layout :
| 5 2 |
| 4 1 |
| 3 0 |
– When the second letter of bookmark= is @, then the first character is used for positioning this entry
– If this option is omitted, the bookmark will be added to the next available sofkey
– Also work for linelabel (example : linelabel=”5@Line 123″)
– You can change a softkey programmatically (since with SendText(@position@icon@label@extension) ex: SendText(@1@55@Stop Forwd@908)


This feature must only be used on a trusted network. It’s very insecure : all unistim phones will be able to use your asterisk pbx.


You must add an entry called [template]. Each new phones will be based on this profile.
You must set a least line=>. This value will be incremented when a new phone is registred.
device= must not be specified. By default, the phone will asks for a number. It will be added into the dialplan. Add extension=line for using the generated line number instead.
Example :

line => 100
bookmark=Support@123 ; Every phone will have a softkey Support

If a first phone have a mac = 006038abcdef, a new device named USTM/100@006038abcdef will be created.
If a second phone have a mac = 006038000000, it will be named USTM/101@006038000000 and so on.


In this mode, new phones will ask for a tn, if this number match a tn= entry in a device, this phone will be mapped into.
line => 100

If a user enter TN 1234, the phone will be known as USTM/100@black.


– Use the two keys located in the middle of the Fixed feature keys row (on the bottom of the phone) to enter call history.
– By default, chan_unistim add any incoming and outgoing calls in files (/var/log/asterisk/unistimHistory). It can be a privacy issue, you can disable this feature by adding callhistory=0. If history files were created, you also need to delete them. callhistory=0 will NOT disable normal asterisk CDR logs.


– This feature requires chan_local (loaded by default)

Generic asterisk features:

You can use the following entries in unistim.conf
– Billing : accountcode amaflags
– Call Group : callgroup pickupgroup
– Music On Hold : musiconhold
– Language : language (see section Coutry Code)
– RTP NAT : nat (control ast_rtp_setnat, default = 0. Obscure behaviour)

Trunking :

It’s not possible to connect a Nortel Succession/Meridian/BCM to Asterisk via chan_unistim. Use either E1/T1 trunks, or buy UTPS (UNISTIM Terminal Proxy Server) from Nortel.

Issues :

  • As always, NAT can be tricky. If a phone is behind a NAT, you should port forward UDP 5000 (or change [general] port= in unistim.conf) and UDP 10000 (or change [yourphone] rtp_port=)
  • Only one phone per public IP (multiple phones behind the same NAT don’t work). Setup a VPN if you want to do that.
  • If asterisk is behind a NAT, you must set [general] bindaddr= (0.9.2) or public_ip (0.9.4) with your public IP. If you don’t do that or the bindaddr is invalid (or no longer valid, eg dynamic IP), phones should be able to display messages but will be

unable to send/receive RTP packets (no sound)

  • Don’t forget : this work is based entirely on a reverse engineering, so you may encounter compatibility issues. At this time, I know three ways to establish a RTP session. You can modify [yourphone] rtp_method= with 0, 1 , 2 or 3. 0 is the default method, should work. 1 can be used on new firmware (black i2004) and 2 on old violet i2004. 3 can be used on black i2004 with chrome.
  • If you have difficulties, try unistim debug and set verbose 3 on the asterisk CLI. For extra debug, uncomment #define DUMP_PACKET 1 and recompile chan_unistim.

Diagnostics mode on Nortel IP sets

All diagnostic functions begin with the ‘lead sequence’:

  • mute key
  • up arrow button
  • down arrow button
  • up arrow button
  • down arrow button
  • up arrow button
  • mute key

Followed immediately by one of the following sequences:

  • 0 key – Display Firmware hard version
  • 1 key – RAM check
  • 2 key – DTIC check
  • 3 key – EEPROM check
  • 4 key – Xmt, Rcv, Attenuation levels
  • 5 key – TCM loop back test, between i2004 and CE equipment
  • 6 key – unassigned
  • 7 key – Display Firmware hard version
  • 8 key – TCM BERT test
  • 9 Release key – Reset set/power cycle
  • * 2 key – RUDP on/off check. If RUDP is off, power cycle the set (9 Release).
  • * 0 key – Display Firmware soft version


How to configure i2050 software phone

– The i2050 can be provisioned in unistim.conf just like a regular i2004.
– The trick is the MAC address, the i2050 generates it’s own MAC address instead of using the PC’s MAC address.
– To get the i2050 MAC address

  • Just try to register the phone with asterisk, it’ll fail and the phone’s ‘LCD’ display will show it’s MAC.
  • Got to ‘Nortel Networks > i2050 Software Phone> Diagnostics’. Scroll down to ‘System Data (All Users)’, see the row ‘Hardware ID:’ The MAC address is the middle block of 12 hex digits separate by dashes. Ignore the two 4 hex digit block before and after the 12 digit block.

– i2050 settings

  • ‘Communication server’: set your server IP manually and set the port to 5000 (which corresponds to SL-100 in the drop down list).
  • ‘Server type’ doesn’t make any difference.

– Issues

  • The phone works OK, but the soft key displays are messed up.

– Version tested Release 1.3 Version 1.0

chan_unistim Quick Tutorial

Thought I should share my experience with chan_unstim to help others who are having difficulties.


– Follow the instructions at the top of this page.
– Copy unistim.conf from the chan_unistim-0.9.2 folder to /etc/asterisk


– Edit /etc/asterisk/unistim.conf

  • For each phone you want to provision, you need to add 1 section to unistim.conf. You can use the built-in [violet] section as a template.
  • Cut and paste [violet], then edit the name between the brackets. For example to provision a phone called i2004, you should have a new section like this:

device=[MAC Address]
line => 100

  • Substitute [MAC Address] with the MAC of the phone. On my i2004, it’s a small sticker with 6 pairs of hex-digits stuck at the back of the phone. Copy everything excluding the space separating each digit pair. For the i2050 software phone, refer to the i2050 section elsewhere on this page to get the MAC address.
  • Each phone should have a unique line number.

– Edit /etc/asterisk/extensions.conf

  • For the purpose of this tutorial, I’ll be using the standard extensions.conf installed by make samples.
  • Locate the [default] section
  • Add a new extension for our i2004, from the previous example, with a line like this:

exten => 2100,1,Macro(stdexten,2100,USTM/100@i2004)

– (Optional) Server IP address binding issues (should be solved in 0.9.4)

  • I’ve discovered that chan_unistim WILL NOT load if it doesn’t get an IP address other than when doing a reverse lookup of the hostname. A reverse lookup should work if your network has it’s own local DNS. You know it failed if you see this on your Asterisk console: ‘Unable to get IP address for <hostname>, UNISTIM disabled’.
  • You can get around this problem in 2 ways:
  • Uncomment the bindaddr line in unistim.conf and insert your host IP, OR
  • Edit /etc/hosts
  • Add a line similar to this to your /etc/hosts, replace with your Asterisk server’s IP and callmanager with the server’s hostname callmanager

  • Also make sure that the line in /etc/hosts that starts with, doesn’t include the hostname.

– That’s it. Restart asterisk. Power up your phone. In a short while you should see “Device ‘i2004’ successfuly registered” on your Asterisk console.


Known issues

In case of having multi-homed installation (including VPN configuration) chan_unistim could select improper address to bind RTP. To avoid this user could specify different interface address or use unistim binded to particular address and not to You could check that issue exists by following log:

Starting RTP. Bind on
> 0x92bca0 — Strict RTP learning after remote address set to:
RTP started : Our IP/port is : with codec ulaw
Starting phone RTP stack. Our public IP is