1. Arkadi Shishlov
  2. chan-nms

Overview

HTTPS SSH
CHAN_NMS is an Asterisk PBX channel driver that supports NMS Communications [1]
(acquired by Dialogic [2]) Open Access line of products, that includes E1/T1
boards [3] for PCI(-X), PCIe, and cPCI(e) bus.

[1] http://www.nmscommunications.com/
[2] http://www.dialogic.com/press/press_releases/pr_20081124_NMS.htm
[3] http://www.nmscommunications.com/DevPlatforms/OpenAccess/IP

What are the features of NMS stack this driver can bring to Asterisk?
- Broad protocol support: PRI ISDN, SS7, and various CAS;
- High-level call control channel driver, yet easily extendable to handle
  protocol specific nuances and services;
- G.729, G.723.1, and iLBC codecs implemented by on-board DSPs;
- RTP streams directly from card's onboard Ethernet ports;
- Certification;
- NMS brand can make things happen in some situations when you have troubles
  selling Asterisk alone.

The software is released under permissive 2-clause BSD license, but it's up
to you to work out all the licensing details for Asterisk, NMS software, and
codecs royalties that might apply to your product and/or environment.

The downside of using proprietary binary kernel driver is that you must run
RedHat Enterprise Linux kernel. CentOS is compatible and works very well as
a free alternative.

Currently we have CG6565 4-port PRI board working with E1 EuroISDN and T1 NI2
in a test lab with the equipment from Avaya, Samsung, Kvant. The supported
configuration is:
- Asterisk 1.2 and 1.4.
- Single CG6565 card with ISDN protocol for all trunks. Up to 8 trunks are
  supported by single PCI board, and 16 trunks by cPCI. The protocol details
  are configured in NMS board configuration file and there are lot of tuning
  possibilities.
- Single Asterisk dial-plan context for incoming calls is selected in
  channel configuration file.
- When making outgoing call you can select trunk and/or timeslot, alternatively
  first free timeslot across all trunks will be used.

The channel driver should be considered an ALPHA quality product. In subsequent
releases we will implement more features:
- Asterisk 1.6 support, probably also CallWeaver and FreeSWITCH;
- multiple cards support;
- NFAS setups;
- more protocols - CAS, also SS7 and SIGTRAN;
- call transfer;
- hold/retrieve;
- overlapped sending and receiving;
- more configuration parameters;
- testing scenarios and scripts for automated testing;
- CG6565 has Ethernet ports, so it might be possible to offload RTP from
  the host after call is established - not sure it is possible due to Asterisk
  architecture.

To build chan_nms you need to do three things:
1. Install Natural Access libraries and drivers.
2. Due to Natural Access issues, /usr/sbin/asterisk binary must be linked to NMS
   libraries. Apply asterisk-Makefile.diff and re-link it.
3. Edit build.sh and build chan_nms.so, then copy to /usr/lib/asterisk/modules
   directory.

To start using chan_nms do the following:
1. Configure the board. Supplied cg6565board0_e1/t1.cfg configuration files is a
   good start for 4-trunk E1 EuroISDN and T1 NI2, respectively. All the details
   could be found at
   http://www.nmscommunications.com/manuals/62415-10/default.htm
   In essence the procedure is:
   - Assure init.d/ NMS services are started.
   - Source /etc/profile.d/naprofile.sh - this will put /opt/nms/bin into PATH
     and will set necessary environment variables.
   - Copy appropriate cg6565board0.cfg to /opt/nms/cg/cfg
   - Modify /opt/nms/oam/cfg/oamsys.cfg to include:

[Board0]
    Product = CG_6565_4
    # Logical board number, physical bus, physical slot
    Number  = 0
    Bus     = 0
    Slot    = 10
    File    = cg6565board0.cfg

     Substitute appropriate numbers for Bus and Slot, use 'cg6ktool -A'
     or 'lspci' to obtain the info.

   - Boot the card by starting 'oamsys'.
   - Monitor trunk status with 'trunkmon'.
2. Copy nms.conf into /etc/asterisk. Edit to suit your needs, comments are
   given inside.
3. In Asterisk dial-plan (extensions.conf) you can refer to chan_nms as
       NMS/callee-number or NMS/-1/callee-number
       NMS/trunk-number/callee-number
       NMS/trunk-number/timeslot-number/callee-number
   For example, Dial(NMS/2/5678) will dial number 5678 on first free timeslot
   in 2-nd trunk. Trunks numeration starts with 0, timeslots numeration also
   starts with 0 and doesn't include D-channel.
4. Start Asterisk. As usual, chan_nms will output a lot of debug information
   if Asterisk verbosity level is set to 2 (-vv) or 3 (-vvv).

To get help or suggest a feature, please join CHAN_NMS discussion group at
Google http://groups.google.com/group/chan-nms

In case you want to send a private mail with a patch, or maybe a business
proposal, or you want to participate in development process, please write to
Arkadi.Shishlov at GMail.Com.