b410P MISDN Card

I had the b410P card operating perfectly on my Asterisk 1.2 Test System but I have since decided to use Asterisk 1.4 due to its SLA support. But since installing 1.4 I have been unable to get the card working.

Here are the steps I followed :-

New PC
Fresh install of Centos 4.4
Downloaded Latest Zaptel / Libpri / Asterisk drivers from Digium (1.4)
Compiled Zaptel as per normal
make b410P for misdn
make libpri
make asterisk
setup misdn as per documentation
Edited MISN scripts as per documentation.

I havent included my configs as I dont think it is a configuration issue.

When i tried to make a call via ISDN i noticed that logs were complaining about Error 66 Unable to implement channel misdn.

Further investigation found that i cant use any of the misdn commands in the Asterisk CLI.

for example :-

misdn show stacks

gives me a no such command

When i go to help, there is no entries in the list for misdn.

I have followed the exact same procedure I did with 1.2 but it isnt working for 1.4.

Can any1 suggest what is happening and why misdn cant be found.

P.S I have verified that driver has started and that the card can be seen by the OS


Asterisk isn’t loading mISDN for some reason. what does the debug log say this (if debug is listed as in logger.conf with an appropriate log file) ?

when you start mISDN what output do you get ? is misdn available in the make menu ? is the chan_misdn module being built ?

Ive gone through the log files and cant see anything in relation to misdn, so it musnt be loading it for whatever reason

[root@asterisk asterisk]# /etc/init.d/misdn-init start

Loading module(s) for your misdn-cards:

modprobe --ignore-install hfcmulti type=0x4 protocol=0x22,0x22,0x22,0x22 layermask=0xf,0xf,0xf,0xf poll=128 debug=0xf
[root@asterisk asterisk]#


[root@asterisk asterisk]# /etc/init.d/misdn-init scan
[OK] found the following devices:
[ii] run “/etc/init.d/misdn-init config” to store this information to /etc/misdn-init.conf
[root@asterisk asterisk]#

In my /etc/misdn-init.conf i have :-


in my /etc/asterisk/misdn.conf i have





Sorry but I am still relatively new at this.

How do i check if the chan_misdn module is being built or if it is in the make options of of 1.4 because all i did for Asterisk was make clean, make and make install


make menuselect will tell you if/why chan_misdn fails to biuld.

chan_misdn has XXX through it and I cant select it.

Why would this be??

because the configure script can’t find mISDN or you haven’t configured it correctly.

at a command prompt … cd /usr/src/<asterisk_src>/channels/misdn then run “make misdn” and re-run the configure script in the root of your Asterisk src. is it available then ?

Here is the files in my /usr/src/asterisk-1.4.0/channels/misdn directory

I tried running the make misdn and a few others but none worked…

[root@asterisk misdn]# ls
chan_misdn_config.h isdn_lib.c isdn_lib_intern.h Makefile
ie.c isdn_lib.h isdn_msg_parser.c portinfo.c
[root@asterisk misdn]# make misdn
make: *** No rule to make target misdn'. Stop. [root@asterisk misdn]# make make: Nothing to be done forall’.
[root@asterisk misdn]# make install
make: *** No rule to make target `install’. Stop.
[root@asterisk misdn]#

sorry, i was looking at a 1.2 Makefile that does have a target for ‘make misdn’

in /usr/src/asterisk look in config.log for ‘misdn’ and see if it gives you a reason why it’s not seeing it.

Here is what the log says about misdn :-

configure:16312: result: no
configure:16443: checking for mISDN_open in -lmISDN
configure:16478: gcc -o conftest -g -O2 conftest.c -lmISDN >&5
configure:16484: $? = 0
configure:16502: result: yes
configure:16666: checking mISDNuser/mISDNlib.h usability
configure:16683: gcc -c -g -O2 conftest.c >&5
configure:16689: $? = 0
configure:16703: result: yes
configure:16707: checking mISDNuser/mISDNlib.h presence
configure:16722: gcc -E conftest.c
configure:16728: $? = 0
configure:16742: result: yes
configure:16770: checking for mISDNuser/mISDNlib.h
configure:16777: result: yes
configure:16840: checking for init_manager in -lisdnnet
configure:16875: gcc -o conftest -g -O2 conftest.c -lisdnnet -lmISDN -lpthread >&5
configure:16881: $? = 0
configure:16899: result: yes
configure:17063: checking mISDNuser/isdn_net.h usability
configure:17080: gcc -c -g -O2 conftest.c >&5
configure:17086: $? = 0
configure:17100: result: yes
configure:17104: checking mISDNuser/isdn_net.h presence
configure:17119: gcc -E conftest.c
configure:17125: $? = 0
configure:17139: result: yes
configure:17167: checking for mISDNuser/isdn_net.h
configure:17174: result: yes
configure:17235: checking for encodeFac in -lsuppserv
configure:17270: gcc -o conftest -g -O2 conftest.c -lsuppserv >&5
/usr/bin/ld: cannot find -lsuppserv
collect2: ld returned 1 exit status
configure:17276: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME “”
| #define PACKAGE_TARNAME “”
| #define PACKAGE_VERSION “”
| #define PACKAGE_STRING “”
| #define _GNU_SOURCE 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_ALLOCA_H 1
| #define HAVE_ALLOCA 1
| #define HAVE_DIRENT_H 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_WAIT_H 1
| #define HAVE_ARPA_INET_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_LIBINTL_H 1
| #define HAVE_LIMITS_H 1
| #define HAVE_LOCALE_H 1
| #define HAVE_MALLOC_H 1
| #define HAVE_NETDB_H 1
| #define HAVE_NETINET_IN_H 1
| #define HAVE_STDDEF_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_SYS_FILE_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_PARAM_H 1
| #define HAVE_SYS_SOCKET_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_TERMIOS_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_UTIME_H 1
| #define _FILE_OFFSET_BITS 64
| #define HAVE__BOOL 1
| #define HAVE_STDBOOL_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_PTRDIFF_T 1
| #define HAVE_UNISTD_H 1
| #define HAVE_CHOWN 1
| #define HAVE_FORK 1
| #define HAVE_VFORK 1
| #define HAVE_FSEEKO 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_UTIME_H 1
| #define HAVE_ALARM 1
| #define HAVE_STDLIB_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_MMAP 1
| #define HAVE_SYS_SELECT_H 1
| #define HAVE_SYS_SOCKET_H 1
| #define SELECT_TYPE_ARG1 int
| #define SELECT_TYPE_ARG234 (fd_set *)
| #define SELECT_TYPE_ARG5 (struct timeval )
| #define PROTOTYPES 1
| #define __PROTOTYPES 1
| #define RETSIGTYPE void
| #define HAVE_STRCOLL 1
| #define HAVE_STRFTIME 1
| #define EXTENSIONS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_UTIME_NULL 1
| #define HAVE_VPRINTF 1
| #define HAVE_ASPRINTF 1
| #define HAVE_ATEXIT 1
| #define HAVE_BZERO 1
| #define HAVE_DUP2 1
| #define HAVE_ENDPWENT 1
| #define HAVE_FTRUNCATE 1
| #define HAVE_GETCWD 1
| #define HAVE_INET_NTOA 1
| #define HAVE_ISASCII 1
| #define HAVE_INET_NTOA 1
| #define HAVE_ISASCII 1
| #define HAVE_LOCALTIME_R 1
| #define HAVE_MEMCHR 1
| #define HAVE_MEMMOVE 1
| #define HAVE_MEMSET 1
| #define HAVE_MKDIR 1
| #define HAVE_MUNMAP 1
| #define HAVE_PUTENV 1
| #define HAVE_RE_COMP 1
| #define HAVE_REGCOMP 1
| #define HAVE_SELECT 1
| #define HAVE_SETENV 1
| #define HAVE_SOCKET 1
| #define HAVE_STRCHR 1
| #define HAVE_STRCSPN 1
| #define HAVE_STRDUP 1
| #define HAVE_STRERROR 1
| #define HAVE_STRNDUP 1
| #define HAVE_STRNLEN 1
| #define HAVE_STRRCHR 1
| #define HAVE_STRSEP 1
| #define HAVE_STRSPN 1
| #define HAVE_STRSTR 1
| #define HAVE_STRTOL 1
| #define HAVE_STRTOQ 1
| #define HAVE_UNSETENV 1
| #define HAVE_UTIME 1
| #define HAVE_VASPRINTF 1
| #define HAVE_ATTRIBUTE_pure 1
| #define HAVE_ATTRIBUTE_malloc 1
| #define HAVE_ATTRIBUTE_const 1
| #define HAVE_ATTRIBUTE_unused 1
| #define HAVE_ATTRIBUTE_always_inline 1
| #define HAVE_RES_NINIT 1
| #define HAVE_RTLD_NOLOAD 1
| #define SIZEOF_INT 4
| #define HAVE_CURSES 1
| #define HAVE_MISDN 1
| #define HAVE_ISDNNET 1
| /
end confdefs.h. */

I appreciate the ongoing help…


Anybody ahave any suggestions??

it seems that mISDN isn’t being built correctly. do you get any errors when configuring and building it ? where are you getting mISDN from ?

There are no errors i can see. Here is the output of my build.

As per the documentation, I am running the make b410p command to make the misdn module.

[root@asterisk zaptel-1.4.0]# make b410p
[ -f misdn-b410p.tar.bz ] || wget ftp://ftp.digium.com/pub/zaptel/b410p/misdn-b4 10p.tar.gz
–19:18:43-- ftp://ftp.digium.com/pub/zaptel/b410p/m … 10p.tar.gz
=> `misdn-b410p.tar.gz.1’
Resolving ftp.digium.com…,
Connecting to ftp.digium.com||:21… connected.
Logging in as anonymous … Logged in!
==> SYST … done. ==> PWD … done.
==> TYPE I … done. ==> CWD /pub/zaptel/b410p … done.
==> PASV … done. ==> RETR misdn-b410p.tar.gz … done.
Length: 572,153 (559K) (unauthoritative)

100%[====================================>] 572,153 14.26K/s ETA 00:00

19:19:01 (37.19 KB/s) - `misdn-b410p.tar.gz.1’ saved [572153]

tar -zxf misdn-b410p.tar.gz
make -C misdn install
make[1]: Entering directory `/usr/src/zaptel-1.4.0/misdn’

Makeing mISDN

cp /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/Makefile.v2.6 /usr/sr c/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/Makefile
export MINCLUDES=/usr/src/zaptel-1.4.0/misdn/include ; make -C /lib/modules/2.6. 9-42.0.8.EL/build SUBDIRS=/usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISD N modules CONFIG_MISDN_DRV=m CONFIG_MISDN_DSP=m CONFIG_MISDN_HFCMULTI=m
make[2]: Entering directory /usr/src/kernels/2.6.9-42.0.8.EL-i686' Building modules, stage 2. MODPOST make[2]: Leaving directory/usr/src/kernels/2.6.9-42.0.8.EL-i686’
which: no update-modules in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbi n:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
which: no modules-update in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbi n:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
cd /lib/modules/2.6.9-42.0.8.EL/build ; make INSTALL_MOD_PATH=/ SUBDIRS=/usr/src /zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN modules_install
make[2]: Entering directory /usr/src/kernels/2.6.9-42.0.8.EL-i686' INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/hfcmulti.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/l3udss1.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_capi.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_core.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_dsp.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_dtmf.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_isac.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_l1.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_l2.ko INSTALL /usr/src/zaptel-1.4.0/misdn/drivers/isdn/hardware/mISDN/mISDN_x25dte.k o make[2]: Leaving directory/usr/src/kernels/2.6.9-42.0.8.EL-i686’
mkdir -p //usr/include/linux/
cp /usr/src/zaptel-1.4.0/misdn/include/linux/*.h //usr/include/linux/
mkdir -p //etc/init.d/
install -m755 misdn-init //etc/init.d/
make[1]: Leaving directory /usr/src/zaptel-1.4.0/misdn' [ -f mISDNuser.tar.gz ] || wget [ftp://ftp.digium.com/pub/zaptel/b410p/mISDNuser](ftp://ftp.digium.com/pub/zaptel/b410p/mISDNuser). tar.gz tar -zxf mISDNuser.tar.gz make -C mISDNuser install make[1]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser’
mkdir -p //usr/bin/
mkdir -p //usr/include/mISDNuser/
mkdir -p //usr/lib/
make TARGET=all subdirs
make[2]: Entering directory /usr/src/zaptel-1.4.0/mISDNuser' set -e; for i in lib example i4lnet tenovis voip ; do make -C $i all; done make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/lib’
rm -f libmISDN.so
gcc -shared -Xlinker -x -o libmISDN.so device.o layer.o stack.o status.o
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/lib' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/example’
gcc testcon.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o testcon
gcc testcon_l2.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o testcon_l 2
gcc testlayer3.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o testlayer 3
gcc loadfirm.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o loadfirm
gcc sendhwctrl.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o sendhwctr l
gcc testlayer1.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o testlayer 1
gcc misdnportinfo.o /usr/src/zaptel-1.4.0/mISDNuser/lib/libmISDN.a -o misdnp ortinfo
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/example' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/i4lnet’
rm -f libisdnnet.so
gcc -shared -Xlinker -x -o libisdnnet.so net_if.o isdn_debug.o isdn_msg.o fsm.o net_l2.o tei.o net_l3.o manager.o tone.o bchannel.o g711.o
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/i4lnet' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/tenovis’
make -C lib lib
make[4]: Entering directory /usr/src/zaptel-1.4.0/mISDNuser/tenovis/lib' make[4]: Nothing to be done forlib’.
make[4]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/tenovis/lib' make[3]: Leaving directory/usr/src/zaptel-1.4.0/mISDNuser/tenovis’
make[3]: Entering directory /usr/src/zaptel-1.4.0/mISDNuser/voip' make[3]: Nothing to be done forall’.
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/voip' make[2]: Leaving directory/usr/src/zaptel-1.4.0/mISDNuser’
make TARGET=install subdirs
make[2]: Entering directory /usr/src/zaptel-1.4.0/mISDNuser' set -e; for i in lib example i4lnet tenovis voip ; do make -C $i install; done make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/lib’
install -m 644 libmISDN.so //usr/lib
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/lib' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/example’
for i in testcon testcon_l2 testlayer3 loadfirm sendhwctrl testlayer1 misdnporti nfo ; do
install -m 755 $i //usr/bin ;
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/example' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/i4lnet’
install -m 644 libisdnnet.so //usr/lib
cp .h //usr/include/mISDNuser/
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/i4lnet' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/tenovis’
for i in testlib tstlib ; do
install -m 755 $i //usr/bin ;
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/tenovis' make[3]: Entering directory/usr/src/zaptel-1.4.0/mISDNuser/voip’
for i in voipisdn ; do
install -m 755 $i //usr/bin ;
make[3]: Leaving directory /usr/src/zaptel-1.4.0/mISDNuser/voip' make[2]: Leaving directory/usr/src/zaptel-1.4.0/mISDNuser’
cp include/
.h //usr/include/mISDNuser/
make[1]: Leaving directory `/usr/src/zaptel-1.4.0/mISDNuser’
[root@asterisk zaptel-1.4.0]#

does libsuppserv.so exist after that build ?

Did a search for that file and “libsuppserv.so” does not exist anywhere on the drive.

hmm … it’s part of mISDNUser so should be there … but it not being there would seem to be why your config is failing. can you download mISDN from cvs cd /usr/src/ cvs -d:pserver:anonymous:readonly@cvs.isdn4linux.de:/i4ldev co mISDN mISDNuser cd mISDN make install cd ../mISDNUser make install then try ./configure in the Asterisk src directory ?

I have done what you suggested and have made progress but still nothing.

After redoing the mISDN and MISDNuser, the libsuppserv.so file exists and when i go into make menuselect, in the Channel Drivers Section. MISDN is now and option which i can select or not. It is currently selected but I still dont have access to any of the MISDN commands in the asterisk CLI. When i type help there are no misdn sections in there.

I have checked the startup of asterisk for any errors relating to misdn and there is nothing about mISDN.

I also did a make and make install of Asterisk again to try and get the channel drivers to work.

Any other suggestions??

Here is part of the make of asterisk that includes mISDN. Not sure if it helps but anyway

[LD] res_speech.o -> res_speech.so
[CC] chan_agent.c -> chan_agent.o
[LD] chan_agent.o -> chan_agent.so
[CC] chan_features.c -> chan_features.o
[LD] chan_features.o -> chan_features.so
[CC] chan_iax2.c -> chan_iax2.o
[CC] iax2-parser.c -> iax2-parser.o
[CC] iax2-provision.c -> iax2-provision.o
[LD] chan_iax2.o iax2-parser.o iax2-provision.o -> chan_iax2.so
[CC] chan_local.c -> chan_local.o
[LD] chan_local.o -> chan_local.so
[CC] chan_mgcp.c -> chan_mgcp.o
[LD] chan_mgcp.o -> chan_mgcp.so
[CC] chan_misdn.c -> chan_misdn.o
[CC] misdn_config.c -> misdn_config.o
[CC] misdn/isdn_lib.c -> misdn/isdn_lib.o
[CC] misdn/isdn_msg_parser.c -> misdn/isdn_msg_parser.o
[LD] chan_misdn.o misdn_config.o misdn/isdn_lib.o misdn/isdn_msg_parser.o -> chan_misdn.so
[LD] gentone.c -> gentone
./gentone busy 480 620
Wavelength 1 (in samples): 16.66667
Minimum samples (1): 50 (3.000000.3 wavelengths)
Wavelength 1 (in samples): 12.90323
Minimum samples (1): 400 (31.000000.3 wavelengths)
Need 400 samples
Wrote busy.h
./gentone ringtone 440 480
Wavelength 1 (in samples): 18.18182
Minimum samples (1): 200 (11.000000.3 wavelengths)
Wavelength 1 (in samples): 16.66667
Minimum samples (1): 50 (3.000000.3 wavelengths)
Need 200 samples
Wrote ringtone.h
[CC] chan_oss.c -> chan_oss.o
[LD] chan_oss.o -> chan_oss.so
[CC] chan_phone.c -> chan_phone.o
[LD] chan_phone.o -> chan_phone.so
[CC] chan_sip.c -> chan_sip.o

i’ve sent you a PM

Please could you keep the discussion out in the open?

I’m planning an Asterisk system at the moment and would love to see an account of a working B410P.

i sent the PM to daniel as i was offering to SSH into his machine and take a look.

i got it working, but it turns out there is a bug in the Digium distro of mISDN that misses some libs.

and the CVS mISDN doesn’t appear to support the Digium card !