mISDN Channel Driver for Asterisk PBX ====================================== This package contains the mISDN Channel Driver for the Asterisk PBX. It supports every mISDN Hardware and provides an interface for Asterisk. Features: --------- * NT and TE mode * PP and PMP mode * BRI and PRI (with BNE1 and BN2E1 Cards) * Hardware bridging * DTMF detection in HW+mISDNdsp * Display messages on phones (on those that support it) * app_SendText * HOLD/RETRIEVE/TRANSFER on ISDN phones : ) * Allow/restrict user number presentation * Volume control * Crypting with mISDNdsp (Blowfish) * Data (HDLC) callthrough * Data calling (with app_ptyfork +pppd) * Echo cancellation * Call deflection * Some others Supported Hardware: ------------------- chan_misdn supports any mISDN compatible Hardware. Overview -------- - Fast Installation Guide - Pre-Requisites - Configuration - Dial and Options String - misdn cli commands - mISDN Variables - Debugging and sending Bugreports - Examples - Known Problems - Changes Fast Installation Guide ----------------------- It is easy to install mISDN and mISDNuser. This can be done by: * You can download latest stable releases from http://www.misdn.org/downloads * Just fetch the newest head of the GIT (mISDN project moved from CVS) In details this process described here: http://www.misdn.org/index.php/GIT then compile and install both with: cd mISDN ; make && make install (you will need at least your kernel headers to compile mISDN). cd mISDNuser ; make && make install Now you can compile chan_misdn, just by making Asterisk: cd asterisk ; ./configure && make && make install That's all! Follow the instructions in the mISDN Package for how to load the Kernel Modules. Also install process described in http://www.misdn.org/index.php/Installing_mISDN Pre-Requisites -------------- To compile and install this driver, you'll need at least one mISDN Driver and the mISDNuser package. Chan_misdn works with both, the current release version and the development (svn trunk) version of Asterisk. You should use Kernels >= 2.6.9 Configuration ------------- First of all you must configure the mISDN drivers, please follow the instructions in the mISDN package to do that, the main config file and config script is: /etc/init.d/misdn-init and /etc/misdn-init.conf Now you will want to configure the misdn.conf file which resides in the Asterisk config directory (normally /etc/asterisk). - misdn.conf: [general] The misdn.conf file contains a "general" subsection, and user subsections which contain misdn port settings and different Asterisk contexts. In the general subsection you can set options that are not directly port related. There is for example the very important debug variable which you can set from the Asterisk cli (command line interface) or in this configuration file, bigger numbers will lead to more debug output. There's also a trace file option, which takes a path+filename where debug output is written to. - misdn.conf: [default] subsection The default subsection is another special subsection which can contain all the options available in the user/port subsections. The user/port subsections inherit their parameters from the default subsection. - misdn.conf: user/port subsections The user subsections have names which are unequal to "general". Those subsections contain the ports variable which mean the mISDN Ports. Here you can add multiple ports, comma separated. Especially for TE-Mode Ports there is a msns option. This option tells the chan_misdn driver to listen for incoming calls with the given msns, you can insert a '*' as single msn, which leads to getting every incoming call. If you want to share on PMP TE S0 with Asterisk and a phone or ISDN card you should insert here the msns which you assign to Asterisk. Finally a context variable resides in the user subsections, which tells chan_misdn where to send incoming calls to in the Asterisk dial plan (extension.conf). Dial and Options String ----------------------- The dial string of chan_misdn got more complex, because we added more features, so the generic dial string looks like: mISDN/[:bchannel]|g:/[/] The Optionsstring looks Like: ::... the ":" character is the delimiter. The available options are: a - Have Asterisk detect DTMF tones on called channel c - Make crypted outgoing call, optarg is keyindex d - Send display text to called phone, text is the optarg e - Perform echo cancelation on this channel, takes taps as optarg (32,64,128,256) e! - Disable echo cancelation on this channel f - Enable fax detection h - Make digital outgoing call h1 - Make HDLC mode digital outgoing call i - Ignore detected DTMF tones, don't signal them to Asterisk, they will be transported inband. jb - Set jitter buffer length, optarg is length jt - Set jitter buffer upper threshold, optarg is threshold jn - Disable jitter buffer n - Disable mISDN DSP on channel. Disables: echo cancel, DTMF detection, and volume control. p - Caller ID presentation, optarg is either 'allowed' or 'restricted' s - Send Non-inband DTMF as inband vr - Rx gain control, optarg is gain vt - Tx gain control, optarg is gain chan_misdn registers a new dial plan application "misdn_set_opt" when loaded. This application takes the Optionsstring as argument. The Syntax is: misdn_set_opt() When you set options in the dialstring, the options are set in the external channel. When you set options with misdn_set_opt, they are set in the current incoming channel. So if you like to use static encryption, the scenario looks as follows: Phone1 --> * Box 1 --> PSTN_TE PSTN_TE --> * Box 2 --> Phone2 The encryption must be done on the PSTN sides, so the dialplan on the boxes are: * Box 1: exten => _${CRYPT_PREFIX}X.,1,Dial(mISDN/g:outbound/:c1) * Box 2: exten => ${CRYPT_MSN},1,misdn_set_opt(:c1) exten => ${CRYPT_MSN},2,dial(${PHONE2}) mISDN CLI commands ------------------ At the Asterisk cli you can try to type in: misdn Now you should see the misdn cli commands: - clean -> pid (cleans a broken call, use with care, leads often to a segmentation fault) - send -> display (sends a Text Message to a Asterisk channel, this channel must be an misdn channel) - set -> debug (sets debug level) - show -> config (shows the configuration options) -> channels (shows the current active misdn channels) -> channel (shows details about the given misdn channels) -> stacks (shows the current ports, their protocols and states) -> fullstacks (shows the current active and inactive misdn channels) - restart -> port (restarts given port (L2 Restart) ) - reload (reloads misdn.conf) You can only use "misdn send display" when an Asterisk channel is created and isdn is in the correct state. "correct state" means that you have established a call to another phone (must not be isdn though). Then you use it like this: misdn send display mISDN/1/101 "Hello World!" where 1 is the Port of the Card where the phone is plugged in, and 101 is the msn (callerid) of the Phone to send the text to. mISDN Variables --------------- mISDN Exports/Imports a few Variables: - MISDN_ADDRESS_COMPLETE : Is either set to 1 from the Provider, or you can set it to 1 to force a sending complete. Debugging and sending bug reports --------------------------------- If you encounter problems, you should set up the debugging flag, usually debug=2 should be enough. The messages are divided into Asterisk and mISDN parts. mISDN Debug messages begin with an 'I', Asterisk messages begin with an '*', the rest is clear I think. Please take a trace of the problem and open a report in the Asterisk issue tracker at http://bugs.digium.com in the "channel drivers" project, "chan_misdn" category. Read the bug guidelines to make sure you provide all the information needed. Examples -------- Here are some examples of how to use chan_misdn in the dialplan (extensions.conf): [globals] OUT_PORT=1 ; The physical Port of the Card OUT_GROUP=ExternE1 ; The Group of Ports defined in misdn.conf [misdnIn] exten => _X.,1,Dial(mISDN/${OUT_PORT}/${EXTEN}) exten => _0X.,1,Dial(mISDN/g:${OUT_GROUP}/${EXTEN:1}) exten => _1X.,1,Dial(mISDN/g:${OUT_GROUP}/${EXTEN:1}/:dHello) exten => _1X.,1,Dial(mISDN/g:${OUT_GROUP}/${EXTEN:1}/:dHello Test:n) On the last line, you will notice the last argument (Hello); this is sent as Display Message to the Phone. Known Problems -------------- * When I use mISDN->IAX I cannot make Trunk calls -> You need to use ztdummy as dummy zaptel interface for the iax timing in trunking mode, simply grab libpri, zaptel and compile them (i think you need to modify the makefile in zaptel to add ztdummy to the default compiled modules) then modprobe ztdummy, this resolves the problem. * I cannot hear any tone after a successful CONNECT to the other end -> you forgot to load mISDNdsp, which is now needed by chan_misdn for switching and DTMF tone detection. Changes ------- in the Changes File