Asterisk Anbindung ans ISDN - Linux
Transcription
Asterisk Anbindung ans ISDN - Linux
21.12.2016 20:18. 1/22 Asterisk Anbindung ans ISDN Asterisk Anbindung ans ISDN Da wir mit unserem Asterisk nicht nur hausintern telefonieren wollen, sondern auch raus in der große weite Welt, werden wir eine Verbindung zum ISDN herstellen. Hierzu verwenden wir eine FRITZ!Card PCI. Installation Dank des Asterisk-Repository gestaltet sich die Installation von mISDN und der für Asterisk 1.6 sehr einfach. Wir installieren uns also die folgenden Pakete: asterisk16-misdn, mISDN, mISDNuser und kmodmISDN # yum install asterisk18-misdn mISDN mISDNuser kmod-mISDN Was uns die Pakete alles mitbringt, offenbart uns jeweils der Aufruf von rpm -iql *PAKETNAME*. asterisk18-misdn # rpm -iql asterisk18-misdn Name : asterisk18-misdn Relocations: (not relocatable) Version : 1.8.0 Vendor: Digium, Inc. Release : 1_centos5 Build Date: Fr 22 Okt 2010 19:17:37 CEST Install Date: Mo 29 Nov 2010 15:29:42 CET Build Host: localhost.localdomain Group : Utilities/System Source RPM: asterisk18-1.8.0-1_centos5.src.rpm Size : 1101048 License: GPL Signature : (none) Packager : Jason Parker <jparker@digium.com> URL : http://www.asterisk.org Summary : mISDN channel driver for Asterisk Description : mISDN channel driver for Asterisk /usr/lib/asterisk/modules/chan_misdn.so Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn mISDN # rpm -iql mISDN Name : mISDN Relocations: (not relocatable) Version : 1.1.7.2 Vendor: mISDN Release : 3_centos5 Build Date: Do 30 Jul 2009 23:59:51 CEST Install Date: Mo 29 Nov 2010 15:29:42 CET Build Host: localhost.localdomain Group : Utilities/System Source RPM: mISDN-1.1.7.2-3_centos5.src.rpm Size : 65785 License: GPL Signature : (none) Packager : Jason Parker <jparker@digium.com> URL : http://www.misdn.org/ Summary : The mISDN project Description : The mISDN project /etc/init.d/mISDN /etc/init.d/misdn-init /etc/modprobe.d/mISDN /etc/modules.d/mISDN /usr/lib/mISDN /usr/lib/mISDN/mISDN.conf.bnx.xsl /usr/lib/mISDN/mISDN.conf.hfcmulti.xsl /usr/lib/mISDN/mISDN.conf.hfcsusb.xsl /usr/lib/mISDN/mISDN.conf.inc.xsl /usr/lib/mISDN/mISDN.conf.l1oip.xsl /usr/lib/mISDN/mISDN.conf.mISDN_debugtool.xsl /usr/lib/mISDN/mISDN.conf.mISDN_dsp.xsl /usr/lib/mISDN/mISDN.conf.singlepci.xsl /usr/lib/mISDN/mISDN.conf.xhfc.xsl /usr/lib/mISDN/mISDN.conf.xsl /usr/sbin/mISDN /usr/sbin/misdn-init mISDNuser # rpm -iql mISDNuser Name : mISDNuser Version : 1.1.7.2 Release : 1_centos5 18:04:25 CEST Install Date: Mo 29 Nov 2010 15:29:32 CET localhost.localdomain Group : Utilities/System mISDNuser-1.1.7.2-1_centos5.src.rpm https://dokuwiki.nausch.org/ Relocations: (not relocatable) Vendor: mISDN Build Date: Mi 06 Aug 2008 Build Host: Source RPM: Printed on 21.12.2016 20:18. 21.12.2016 20:18. 3/22 Asterisk Anbindung ans ISDN Size : 859322 License: GPL Signature : (none) Packager : Jason Parker <jparker@digium.com> URL : http://www.misdn.org/ Summary : The mISDNuser project Description : The open source mISDNuser project /usr/bin/loadfirm /usr/bin/mISDNdebugtool /usr/bin/misdnportinfo /usr/bin/sendhwctrl /usr/bin/testcon /usr/bin/testcon_l2 /usr/bin/testlayer1 /usr/bin/testlayer3 /usr/bin/testlib /usr/bin/tstlib /usr/bin/voipisdn /usr/lib/libisdnnet.so /usr/lib/libmISDN.so /usr/lib/libsuppserv.so kmod-mISDN # rpm -iql kmod-mISDN Name : kmod-mISDN Relocations: (not relocatable) Version : 1.1.7.2 Vendor: beroNet GmbH Release : 3_centos5.2.6.18_194.26.1.el5 Build Date: Mi 10 Nov 2010 17:19:31 CET Install Date: Mo 29 Nov 2010 15:29:37 CET Build Host: localhost.localdomain Group : System Environment/Kernel Source RPM: mISDNkmod-1.1.7.2-3_centos5.2.6.18_194.26.1.el5.src.rpm Size : 8466730 License: GPL Signature : (none) Packager : Jason Parker <jparker@digium.com> URL : http://www.misdn.org/ Summary : mISDN kernel module(s) Description : This package provides the mISDN kernel modules built for the Linux kernel 2.6.18-194.26.1.el5 for the i686 family of processors. /lib/modules/2.6.18-194.26.1.el5 /lib/modules/2.6.18-194.26.1.el5/extra /lib/modules/2.6.18-194.26.1.el5/extra/avmfritz.ko /lib/modules/2.6.18-194.26.1.el5/extra/hfcmulti.ko /lib/modules/2.6.18-194.26.1.el5/extra/hfcpci.ko /lib/modules/2.6.18-194.26.1.el5/extra/hfcsmini.ko /lib/modules/2.6.18-194.26.1.el5/extra/hfcsusb.ko /lib/modules/2.6.18-194.26.1.el5/extra/l3udss1.ko Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_capi.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_core.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_debugtool.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_dsp.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_dtmf.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_isac.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_l1.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_l2.ko /lib/modules/2.6.18-194.26.1.el5/extra/mISDN_x25dte.ko /lib/modules/2.6.18-194.26.1.el5/extra/sedlfax.ko /lib/modules/2.6.18-194.26.1.el5/extra/w6692pci.ko /lib/modules/2.6.18-194.26.1.el5/extra/xhfc.ko Konfiguration Als erstes suchen wir nach unserer/unseren installierten ISDN-Karten. Hierzu rufen wir den mISDNDaemon mit der Option scan auf. # service mISDN scan 1 mISDN compatible device(s) found: >> avmfritz Als nächstes legen wir die Konfigurationsdatei für mISDN unter /etc/mISDN.conf an - auch das geht einfach von Statten. Wir rufen den Daemon mit der Option config auf. # service mISDN config Writing /etc/mISDN.conf for 1 mISDN compatible device(s): >> avmfritz Mit Hilfe des vorgenannten Aufrufes wird automatisch folgende Konfigurationsdatei angelegt: <?xml version="1.0"?> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: BN2S0, BN4S0, BN8S0 Card Attributes: ulaw=(yes|no), dtmf=(yes|no), pcm_slave=(yes|no), ignore_pcm_frameclock=(yes|no), rxclock=(yes|no), crystalclock=(yes|no), watchdog=(yes|no) Port Attributes: mode=(te|nt), link=(ptp|ptmp), master-clock=(yes|no), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: BN2E1 Card Attributes: ulaw=(yes|no), dtmf=(yes|no), pcm_slave=(yes|no), ignore_pcm_frameclock=(yes|no), rxclock=(yes|no), crystalclock=(yes|no), watchdog=(yes|no) https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 5/22 Asterisk Anbindung ans ISDN Port Attributes: mode=(te|nt), link=(ptp|ptmp), optical=(yes|no), los=(yes|no), ais=(yes|no), slip=(yes|no), nocrc4=(yes|no), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: hfcmulti, avmfritz, w6692pci Port Attributes: mode=(te|nt), link=(ptp|ptmp), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: hfcmulti Options: poll=<number>, pcm=<number>, debug=<number>, timer=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: hfcsusb Options: debug=<number> poll=<number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: xhfc Options: debug=<number> Port Attributes: mode=(te|nt), link=(ptp|ptmp), line=(s0|up) capi=(yes|no) lineloop_b1=(yes|no) lineloop_b2=(yes|no), lineloop_d=(yes|no) polx=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: mISDN_dsp Options: debug=<number>, options=<number>, poll=<number>, dtmfthreshold=<number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <mISDNconf> <module poll="128" debug="0" timer="no">hfcmulti</module> <module debug="0" options="0">mISDN_dsp</module> <devnode user="root" group="root" mode="644">mISDN</devnode> <card type="avmfritz"> <port mode="te" link="ptmp">1</port> </card> </mISDNconf> Damit es später beim Betrieb keine Probleme mit den Zugriffsrechten auf die Gerätedatei gibt passen wir noch den user und die group des devnode an. Ansonsten könnte es Bsp. zu folgender Fehlermeldung kommen: == Using SIP RTP CoS mark 5 [Nov 30 10:35:53] ERROR[5043]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session. -- Executing [08936046666@default:1] Dial("SIP/14-00000003", "mISDN/g:Mnet/08936046666") in new stack [Nov 30 10:35:53] WARNING[7281]: channel.c:5353 ast_request: No channel type Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn registered for 'mISDN' [Nov 30 10:35:53] WARNING[7281]: app_dial.c:2030 dial_exec_full: Unable to create channel of type 'mISDN' (cause 66 - Channel not implemented) == Everyone is busy/congested at this time (1:0/0/1) -- Executing [08936046666@default:2] Hangup("SIP/14-00000003", "") in new stack == Spawn extension (default, 08936046666, 2) exited non-zero on 'SIP/14-00000003' asterisk*CLI> Wir ändern also <devnode user=„root“ group=„root“ mode=„644“>mISDN</devnode> in <devnode user=„asterisk“ group=„asterisk“ mode=„644“>mISDN</devnode> # vim /etc/mISDN <?xml version="1.0"?> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: BN2S0, BN4S0, BN8S0 Card Attributes: ulaw=(yes|no), dtmf=(yes|no), pcm_slave=(yes|no), ignore_pcm_frameclock=(yes|no), rxclock=(yes|no), crystalclock=(yes|no), watchdog=(yes|no) Port Attributes: mode=(te|nt), link=(ptp|ptmp), master-clock=(yes|no), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: BN2E1 Card Attributes: ulaw=(yes|no), dtmf=(yes|no), pcm_slave=(yes|no), ignore_pcm_frameclock=(yes|no), rxclock=(yes|no), crystalclock=(yes|no), watchdog=(yes|no) Port Attributes: mode=(te|nt), link=(ptp|ptmp), optical=(yes|no), los=(yes|no), ais=(yes|no), slip=(yes|no), nocrc4=(yes|no), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: hfcmulti, avmfritz, w6692pci Port Attributes: mode=(te|nt), link=(ptp|ptmp), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: hfcmulti Options: poll=<number>, pcm=<number>, debug=<number>, timer=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: hfcsusb Options: debug=<number> poll=<number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 7/22 Asterisk Anbindung ans ISDN - Module: xhfc Options: debug=<number> Port Attributes: mode=(te|nt), link=(ptp|ptmp), line=(s0|up) capi=(yes|no) lineloop_b1=(yes|no) lineloop_b2=(yes|no), lineloop_d=(yes|no) polx=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: mISDN_dsp Options: debug=<number>, options=<number>, poll=<number>, dtmfthreshold=<number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <mISDNconf> <module poll="128" debug="0" timer="no">hfcmulti</module> <module debug="0" options="0">mISDN_dsp</module> <devnode user="asterisk" group="asterisk" mode="644">mISDN</devnode> <card type="avmfritz"> <port mode="te" link="ptmp">1</port> </card> </mISDNconf> mISDN Daemon starten erster Programmstart Zum Laden der Kernelmodule und zum Starten des mISDN-Daemon erfolgt mit: # service mISDN start ->> >> >> >> >> >> >> >> Loading mISDN modules -/sbin/modprobe --ignore-install /sbin/modprobe --ignore-install /sbin/modprobe --ignore-install /sbin/modprobe --ignore-install /sbin/modprobe --ignore-install /sbin/modprobe --ignore-install /sbin/modprobe --ignore-install /sbin/modprobe --ignore-install capi mISDN_core debug=0 mISDN_l1 debug=0 mISDN_l2 debug=0 l3udss1 debug=0 mISDN_capi avmfritz protocol=0x2 layermask=0xf mISDN_dsp debug=0 options=0 Der Start wird uns im syslog entsprechend positiv vermerkt. Nov 29 15:47:24 office kernel: Modular ISDN Stack core version (1_1_7_2) revision ($Revision: 1.40 $) Nov 29 15:47:24 office kernel: ISDN L1 driver version 1.20 Nov 29 15:47:24 office kernel: ISDN L2 driver version 1.32 Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn Nov 29 15:47:24 office kernel: mISDN: DSS1 Rev. 1.47 Nov 29 15:47:24 office kernel: mISDN Capi 2.0 driver file version 1.21 Nov 29 15:47:24 office kernel: ISAC module $Revision: 1.18 $ Nov 29 15:47:24 office kernel: AVM Fritz PCI/PnP driver Rev. 1.43 Nov 29 15:47:24 office kernel: PCI: Enabling device 0000:06:01.0 (0000 -> 0003) Nov 29 15:47:24 office kernel: ACPI: PCI Interrupt 0000:06:01.0[A] -> GSI 19 (level, low) -> IRQ 177 Nov 29 15:47:24 office kernel: mISDN_fcpcipnp: found adapter Fritz!Card PCI v2 at 0000:06:01.0 Nov 29 15:47:24 office kernel: AVM PCI V2: stat 0x240020e Nov 29 15:47:24 office kernel: AVM PCI V2: Class E Rev 2 Nov 29 15:47:24 office kernel: AVM PnP: HDLC version 2 Nov 29 15:47:24 office kernel: mISDN: AVM Fritz!PCIv2 config irq:177 base:0xD000 Nov 29 15:47:24 office kernel: AVM PCI/PnP: reset Nov 29 15:47:24 office kernel: AVM PCI/PnP: S0/S1 40/2 Nov 29 15:47:24 office kernel: mISDN_isac_init: ISACSX Nov 29 15:47:24 office kernel: AVM Fritz!PCI: IRQ 177 count 2 Nov 29 15:47:24 office kernel: fritz 1 cards installed Nov 29 15:47:24 office kernel: mISDN_dsp: Audio DSP Rev. 1.29 (debug=0x0) EchoCancellor MG2 dtmfthreshold(100) Nov 29 15:47:24 office kernel: mISDN_dsp: DSP clocks every 64 samples. This equals 8 jiffies. Mit misdnportinfo kann nun zum einen geprüft werden, ob die Module korrekt geladen wurden, und zum anderen die momentane Portkonfiguration ausgegeben werden: # misdnportinfo Port 1: TE-mode BRI S/T interface line (for phone lines) -> Protocol: DSS1 (Euro ISDN) -> childcnt: 2 -------mISDN_close: fid(3) isize(131072) inbuf(0x968d060) irp(0x968d060) iend(0x968d060) automatischer Programmstart Damit unser mISDN-Daemon automatisch bei jedem Systemstart starten kann ergänzen wir noch das startscript /etc/init.d/mISDN. Am Anfang der Datei tragen wir folgende Zeilen ein. # # # # # # Django: 29.11.2010 mISDN Start up mISDN subsystem chkconfig: 2345 10 90 description: Activates/Deactivates mISDN subsystem for Asterisk telephony https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 9/22 Asterisk Anbindung ans ISDN server # ### BEGIN INIT INFO # Provides: $mISDN ### END INIT INFO # vim /etc/init.d/mISDN Somit ergibt sich folgendes Startscript in Gänze: #!/bin/bash # Django: 29.11.2010 # # mISDN Start up mISDN subsystem # # chkconfig: 2345 10 90 # description: Activates/Deactivates mISDN subsystem for Asterisk telephony server # ### BEGIN INIT INFO # Provides: $mISDN ### END INIT INFO #---------------------------------------------# # CONFIGURATION: # MISDN_CONF="/etc/mISDN.conf" MISDN_CONF_XSL="/usr/lib/mISDN/mISDN.conf.xsl" # #---------------------------------------------SELF="${0}" USAGE="Usage: ${SELF} start|stop|restart|config|scan|help" function die { echo "[!!] ${1}" exit 1 } function check_cmd { if ! which "${1}" > /dev/null; if [ "${2}" = "opt" ]; return fi if [ "$(id -u)" != "0" die "$1 not in else die "$1 not in Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ then then ]; then path, please install and/or be root." path, please install." Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn fi exit 1 else local var=$(echo ${1} | tr a-z A-Z) eval "$var=`which ${1}`" fi } function check_misdn_conf { if [ ! -f ${MISDN_CONF} ]; then die "${MISDN_CONF} not found. Please run: ${SELF} config" fi } check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd check_cmd sed cut cp wc grep xsltproc modprobe sleep lspci lsusb opt mknod chown chmod declare -a START_COMMANDS declare -a STOP_COMMANDS declare -a HFCMULTI_card declare -a HFCMULTI_type declare -a HFCMULTI_protocol declare -a HFCMULTI_layermask HFCMULTI_options='' MISDNDSP_options='' L1OIP_options='' AVMFRITZ_protocol='' AVMFRITZ_layermask='' HFCPCI_protocol='' HFCPCI_layermask='' HFCSUSB_protocol='' HFCSUSB_layermask='' HFCSUSB_options='' XHFC_protocol='' https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 11/22 Asterisk Anbindung ans ISDN XHFC_layermask='' XHFC_options='' L1OIP_type='' L1OIP_protocol='' L1OIP_layermask='' L1OIP_codec='' L1OIP_ip='' L1OIP_port='' L1OIP_localport='' L1OIP_ondemand='' L1OIP_id='' DEVNODE_user='root' DEVNODE_group='root' DEVNODE_mode='0644' declare declare declare declare -a -a -a -a SCAN_card SCAN_opts SCAN_num_ports SCAN_port_opts function parse_config { local CONFIG=$(${XSLTPROC} ${MISDN_CONF_XSL} ${MISDN_CONF}) local t p l line i tmpcmd curr tmpstr extra_modules val local IFS=$'\n' START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignore-install capi" START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} mISDN_core debug=0" START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} mISDN_l1 debug=0" START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} mISDN_l2 debug=0" START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} l3udss1 debug=0" START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} mISDN_capi" --ignore-install --ignore-install --ignore-install --ignore-install --ignore-install for line in ${CONFIG}; do case "${line}" in DEVNODE:mISDN*) tmpstr=$(echo ${line} | ${SED} -n 's/.*user:\([^ ]*\).*/\1/p') if [ ! -z "${tmpstr}" ]; then DEVNODE_user="${tmpstr}" fi tmpstr=$(echo ${line} | ${SED} -n 's/.*group:\([^ ]*\).*/\1/p') Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn if [ ! -z "${tmpstr}" ]; then DEVNODE_group="${tmpstr}" fi tmpstr=$(echo ${line} | ${SED} -n 's/.*mode:\([^ ]*\).*/\1/p') if [ ! -z "${tmpstr}" ]; then DEVNODE_mode="${tmpstr}" fi ;; MODULE:hfcmulti*) HFCMULTI_options=${line:16} ;; MODULE:hfcsusb*) HFCSUSB_options=${line:15} ;; MODULE:xhfc*) XHFC_options=${line:12} ;; MODULE:mISDN_debugtool*) extra_modules[${#extra_modules[@]}]=${line:7} ;; MODULE:mISDN_dsp*) MISDNDSP_options=${line:17} ;; MODULE:l1oip*) L1OIP_options=${line:13} ;; CARD:BN*) curr='hfcmulti' i=${#HFCMULTI_type[@]} let "t = $(echo ${line} | ${SED} -n 's/.*type:\([^,]*\).*/\1/p')" HFCMULTI_type[${i}]=$(printf "0x%x" ${t}) # this is for the BN2E1 card that needs two type numbers t=$(echo ${line} | ${SED} -n 's/.*type:[^,]*,\([^ ]*\).*/\1/p') if [ ! -z "${t}" ]; then let "t = ${t}" HFCMULTI_type[${i}]="${HFCMULTI_type[${i}]},$(printf "0x%x" ${t})" fi HFCMULTI_card[${i}]=$(echo ${line:5} | ${CUT} -d" " -f1) ;; CARD:hfcpci*) curr='hfcpci' ;; CARD:hfcsusb*) curr='hfcsusb' ;; https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 13/22 Asterisk Anbindung ans ISDN CARD:xhfc*) curr='xhfc' ;; CARD:avmfritz*) curr='avmfritz' ;; CARD:l1oip*) curr='l1oip' ;; PORT*) case "${curr}" in hfcmulti) let "p = $(echo ${line} | ${SED} -n 's/.*protocol:\([^ ]*\).*/\1/p')" HFCMULTI_protocol[${i}]="${HFCMULTI_protocol[${i}]:+"${HFCMULTI_protocol[${i }]},"}$(printf "0x%x" ${p})" let "l = $(echo ${line} | ${SED} -n 's/.*layermask:\([^ ]*\).*/\1/p')" HFCMULTI_layermask[${i}]="${HFCMULTI_layermask[${i}]:+"${HFCMULTI_layermask[ ${i}]},"}$(printf "0x%x" ${l})" ;; hfcpci) let "p = $(echo ${line} | ${SED} -n 's/.*protocol:\([^ ]*\).*/\1/p')" HFCPCI_protocol="${HFCPCI_protocol:+"${HFCPCI_protocol},"}$(printf "0x%x" ${p})" let "l = $(echo ${line} | ${SED} -n 's/.*layermask:\([^ ]*\).*/\1/p')" HFCPCI_layermask="${HFCPCI_layermask:+"${HFCPCI_layermask},"}$(printf "0x%x" ${l})" ;; hfcsusb) let "p = $(echo ${line} | ${SED} -n 's/.*protocol:\([^ ]*\).*/\1/p')" HFCSUSB_protocol="${HFCSUSB_protocol:+"${HFCSUSB_protocol},"}$(printf "0x%x" ${p})" let "l = $(echo ${line} | ${SED} -n 's/.*layermask:\([^ ]*\).*/\1/p')" HFCSUSB_layermask="${HFCSUSB_layermask:+"${HFCSUSB_layermask},"}$(printf "0x%x" ${l})" ;; xhfc) let "p = $(echo ${line} | ${SED} -n 's/.*protocol:\([^ ]*\).*/\1/p')" XHFC_protocol="${XHFC_protocol:+"${XHFC_protocol},"}$(printf "0x%x" ${p})" let "l = $(echo ${line} | ${SED} -n 's/.*layermask:\([^ ]*\).*/\1/p')" XHFC_layermask="${XHFC_layermask:+"${XHFC_layermask},"}$(printf "0x%x" ${l})" ;; avmfritz) Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn let "p = $(echo ${line} | ${SED} -n 's/.*protocol:\([^ ]*\).*/\1/p')" AVMFRITZ_protocol="${AVMFRITZ_protocol:+"${AVMFRITZ_protocol},"}$(printf "0x%x" ${p})" let "l = $(echo ${line} | ${SED} -n 's/.*layermask:\([^ ]*\).*/\1/p')" AVMFRITZ_layermask="${AVMFRITZ_layermask:+"${AVMFRITZ_layermask},"}$(printf "0x%x" ${l})" ;; l1oip) let "val = $(echo ${line} | ${SED} -n 's/.*type:\([^ ]*\).*/\1/p')" L1OIP_type="${L1OIP_type:+"${L1OIP_type},"}$(printf "0x%x" ${val})" let "val = $(echo ${line} | ${SED} -n 's/.*protocol:\([^ ]*\).*/\1/p')" L1OIP_protocol="${L1OIP_protocol:+"${L1OIP_protocol},"}$(printf "0x%x" ${val})" let "val = $(echo ${line} | ${SED} -n 's/.*layermask:\([^ ]*\).*/\1/p')" L1OIP_layermask="${L1OIP_layermask:+"${L1OIP_layermask},"}$(printf "0x%x" ${val})" val="$(echo ${line} | ${SED} -n 's/.*codec:\([^ ]*\).*/\1/p')" L1OIP_codec="${L1OIP_codec:+"${L1OIP_codec},"}${val}" val="$(echo ${line} | ${SED} -n 's/.*ip:\([^ ]*\).*/\1/p')" L1OIP_ip="${L1OIP_ip:+"${L1OIP_ip},"}${val}" val="$(echo ${line} | ${SED} -n 's/.*port:\([^ ]*\).*/\1/p')" L1OIP_port="${L1OIP_port:+"${L1OIP_port},"}${val}" val="$(echo ${line} | ${SED} -n 's/.*localport:\([^ ]*\).*/\1/p')" L1OIP_localport="${L1OIP_localport:+"${L1OIP_localport},"}${val}" val="$(echo ${line} | ${SED} -n 's/.*ondemand:\([^ ]*\).*/\1/p')" L1OIP_ondemand="${L1OIP_ondemand:+"${L1OIP_ondemand},"}${val}" val="$(echo ${line} | ${SED} -n 's/.*id:\([^ ]*\).*/\1/p')" L1OIP_id="${L1OIP_id:+"${L1OIP_id},"}${val}" ;; esac ;; esac done if [ ! -z "${HFCMULTI_protocol[0]}" ]; then tmpcmd="${MODPROBE} --ignore-install hfcmulti type=${HFCMULTI_type[0]}" i=1 while [ ! -z "${HFCMULTI_type[${i}]}" ]; do tmpcmd="${tmpcmd},${HFCMULTI_type[${i}]}" https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 15/22 Asterisk Anbindung ans ISDN let "i = ${i} + 1" done tmpcmd="${tmpcmd} protocol=${HFCMULTI_protocol[0]}" i=1 while [ ! -z "${HFCMULTI_protocol[${i}]}" ]; do tmpcmd="${tmpcmd},${HFCMULTI_protocol[${i}]}" let "i = ${i} + 1" done tmpcmd="${tmpcmd} layermask=${HFCMULTI_layermask[0]}" i=1 while [ ! -z "${HFCMULTI_layermask[${i}]}" ]; do tmpcmd="${tmpcmd},${HFCMULTI_layermask[${i}]}" let "i = ${i} + 1" done START_COMMANDS[${#START_COMMANDS[@]}]="${tmpcmd} ${HFCMULTI_options}" fi if [ ! -z "${HFCPCI_protocol}" ]; then START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignoreinstall hfcpci protocol=${HFCPCI_protocol} layermask=${HFCPCI_layermask}" fi if [ ! -z "${HFCSUSB_protocol}" ]; then START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignoreinstall hfcsusb protocol=${HFCSUSB_protocol} layermask=${HFCSUSB_layermask} ${HFCSUSB_options}" fi if [ ! -z "${XHFC_protocol}" ]; then START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignoreinstall xhfc protocol=${XHFC_protocol} layermask=${XHFC_layermask} ${XHFC_options}" fi if [ ! -z "${AVMFRITZ_protocol}" ]; then START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignoreinstall avmfritz protocol=${AVMFRITZ_protocol} layermask=${AVMFRITZ_layermask}" fi if [ ! -z "${L1OIP_type}" ]; then START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignoreinstall l1oip type=${L1OIP_type} protocol=${L1OIP_protocol} layermask=${L1OIP_layermask} codec=${L1OIP_codec} ip=${L1OIP_ip} port=${L1OIP_port} localport=${L1OIP_localport} ondemand=${L1OIP_ondemand} id=${L1OIP_id} ${L1OIP_options}" fi START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignore-install mISDN_dsp ${MISDNDSP_options}" Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn i=1 while [ ! -z "${extra_modules[${i}]}" ]; do START_COMMANDS[${#START_COMMANDS[@]}]="${MODPROBE} --ignoreinstall ${extra_modules[${i}]}" let "i = ${i} + 1" done } function run_start_commands { local i=0 echo "-- Loading mISDN modules --" while [ ! -z "${START_COMMANDS[${i}]}" ]; do echo ">> ${START_COMMANDS[${i}]}" eval "${START_COMMANDS[${i}]}" let "i = ${i} + 1" done } function run_stop_commands { local mod i=0 for mod in $(lsmod | ${SED} -ne '/Module/!{s/\([^ ]*\).*/\1/;p}'); do case "${mod}" in mISDN_capi | mISDN_dsp | l3udss1 | mISDN_l2 | mISDN_l1 | mISDN_isac | hfcmulti | hfcpci | hfcsusb | xhfc | avmfritz | l1oip) STOP_COMMANDS[0]="${STOP_COMMANDS[0]:"${MODPROBE} -r --ignore-remove"} ${mod}" ;; mISDN_debugtool) STOP_COMMANDS[1]="${MODPROBE} -r --ignoreremove mISDN_debugtool" ;; mISDN_core) STOP_COMMANDS[2]="${MODPROBE} -r --ignoreremove mISDN_core" ;; esac done echo "-- Unloading mISDN modules --" for i in `seq 0 1 2`; do if [ ! -z "${STOP_COMMANDS[${i}]}" ]; then echo ">> ${STOP_COMMANDS[${i}]}" eval "${STOP_COMMANDS[${i}]}" fi done https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 17/22 Asterisk Anbindung ans ISDN } function scan_devices { local skipnext=0 IFS=$'\n' local NL=" " function addcard { SCAN_card[${#SCAN_card[@]}]="${1}" SCAN_opts[${#SCAN_opts[@]}]="${2}" SCAN_num_ports[${#SCAN_num_ports[@]}]="${3}" SCAN_port_opts[${#SCAN_port_opts[@]}]="${4}" } for line in $(${LSPCI} -n -d 0xd161:b410); do addcard "BN4S0" "" 4 'mode="te" link="ptmp"' done for line in $(${LSPCI} -n | ${SED} -n 's/^\(0000:\|\)\([0-9af]\{2\}:[0-9a-f]\{2\}.[0-9a-f]\{1\}\)\( Class \| \)[0-9a-f]\{4\}: 1397:\([0-9a-f]\{4\}\).*$/\4 \2/p'); do if [ ${skipnext} -eq 1 ]; then skipnext=0 continue fi case "${line}" in 30b1*) case "${line:5}" in 00*) addcard "BN1E1" "" 1 'mode="nt" link="ptp"' ;; *) if [ $(${LSPCI} -n -s "${line:5:3}" -d 0x1397:30b1 | ${WC} -l) -eq 2 ]; then addcard "BN2E1" "" 2 'mode="nt" link="ptp"' skipnext=1 else addcard "BN1E1" "" 1 'mode="nt" link="ptp"' fi ;; esac ;; 16b8*) addcard "BN8S0" "" 8 'mode="te" link="ptmp"' ;; 08b4*) if ${LSPCI} -n -v -s "${line:5}" | ${GREP} Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn "Subsystem" | ${GREP} "1397:b567" > /dev/null ; then addcard "BN1S0" "" 1 'mode="te" link="ptmp"' elif ${LSPCI} -n -v -s "${line:5}" | ${GREP} "Subsystem" | ${GREP} "1397:b566\|1397:b569" > /dev/null ; then addcard "BN2S0" "" 2 'mode="te" link="ptmp"' else addcard "BN4S0" "" 4 'mode="te" link="ptmp"' fi ;; esac done for line in $(${LSPCI} -n | ${GREP} "1397:\(2bd\(0\|6\|7\|8\|9\|a\|b\|c\)\|b100\)\|1043:0675\|0871:ffa\(1\|2\)\| 1051:0100\|15b0:2bd0\|114f:007\(0\|1\|2\|3\)\|13d1:2bd1\|182d:3069"); do addcard "hfcpci" "" 1 'mode="te" link="ptmp"' done for line in $(${LSPCI} -n -d 0x1397:a003); do addcard "xhfc" "" 4 'mode="te" link="ptmp"' done for line in $(${LSPCI} -n | ${GREP} "1244:\(0a00\|0e00\)"); do addcard "avmfritz" "" 1 'mode="te" link="ptmp"' done for line in $(${LSPCI} -n -d 1050:6692); do addcard "w6692pci" "" 1 'mode="te" link="ptmp"' done if [ -e ${LSUSB} ]; then for line in $(${LSUSB} | ${GREP} "0959:2bd0\|0675:1688\|07b0:0007\|0742:200\(7\|8\|9\|A\)\|08e3:0301\|07fa:08 4\(7\|8\)\|07ba:0006"); do addcard "hfcsusb" "" 1 'mode="te" link="ptmp"' done fi } function write_mISDN_conf { local NL=" " local TAB=" " local HEADER="<?xml version=\"1.0\"?> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: BN2S0, BN4S0, BN8S0 Card Attributes: ulaw=(yes|no), dtmf=(yes|no), pcm_slave=(yes|no), ignore_pcm_frameclock=(yes|no), rxclock=(yes|no), crystalclock=(yes|no), watchdog=(yes|no) Port Attributes: mode=(te|nt), link=(ptp|ptmp), master-clock=(yes|no), https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 19/22 Asterisk Anbindung ans ISDN capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: BN2E1 Card Attributes: ulaw=(yes|no), dtmf=(yes|no), pcm_slave=(yes|no), ignore_pcm_frameclock=(yes|no), rxclock=(yes|no), crystalclock=(yes|no), watchdog=(yes|no) Port Attributes: mode=(te|nt), link=(ptp|ptmp), optical=(yes|no), los=(yes|no), ais=(yes|no), slip=(yes|no), nocrc4=(yes|no), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Card Type: hfcmulti, avmfritz, w6692pci Port Attributes: mode=(te|nt), link=(ptp|ptmp), capi=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: hfcmulti Options: poll=<number>, pcm=<number>, debug=<number>, timer=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: hfcsusb Options: debug=<number> poll=<number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: xhfc Options: debug=<number> Port Attributes: mode=(te|nt), link=(ptp|ptmp), line=(s0|up) capi=(yes|no) lineloop_b1=(yes|no) lineloop_b2=(yes|no), lineloop_d=(yes|no) polx=(yes|no) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Module: mISDN_dsp Options: debug=<number>, options=<number>, poll=<number>, dtmfthreshold=<number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <mISDNconf> ${TAB}<module poll=\"128\" debug=\"0\" timer=\"no\">hfcmulti</module> ${TAB}<module debug=\"0\" options=\"0\">mISDN_dsp</module> ${TAB}<devnode user=\"root\" group=\"root\" mode=\"644\">mISDN</devnode>" local FOOTER="</mISDNconf>" local i=0 j=0 MAIN="" echo "Writing ${MISDN_CONF} for ${#SCAN_card[@]} mISDN compatible device(s):" while [ ! -z "${SCAN_card[${i}]}" ]; do echo ">> ${SCAN_card[${i}]}" MAIN="${MAIN}${NL}${TAB}<card type=\"${SCAN_card[${i}]}\"${SCAN_opts[${i}]:+" ${SCAN_opts[${i}]}"}>" Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn j=1 while [ ${j} -le ${SCAN_num_ports[${i}]} ]; do MAIN="${MAIN}${NL}${TAB}${TAB}<port${SCAN_port_opts[${i}]:+" ${SCAN_port_opts[${i}]}"}>${j}</port>" let "j = ${j} + 1" done MAIN="${MAIN}${NL}${TAB}</card>" let "i = ${i} + 1" done if [ -f ${MISDN_CONF} ]; then echo "${MISDN_CONF} already present, saving a backup: ${MISDN_CONF}.bak" ${CP} "${MISDN_CONF}" "${MISDN_CONF}.bak" || die "Could not backup your existing ${MISDN_CONF}!" fi echo "${HEADER}${MAIN}${NL}${FOOTER}" > ${MISDN_CONF} } function print_scan_results { local i=0 echo "${#SCAN_card[@]} mISDN compatible device(s) found:" while [ ! -z "${SCAN_card[${i}]}" ]; do echo ">> ${SCAN_card[${i}]}" let "i = ${i} + 1" done } function mk_misdn_dev { if [ ! -e /dev/mISDN ]; then echo "creating device node: /dev/mISDN" ${MKNOD} /dev/mISDN c 46 0 fi ${CHOWN} ${DEVNODE_user}:${DEVNODE_group} /dev/mISDN ${CHMOD} ${DEVNODE_mode} /dev/mISDN } # # MAIN # case "${1}" in start|--start) check_misdn_conf parse_config run_start_commands https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18. 21.12.2016 20:18. 21/22 Asterisk Anbindung ans ISDN mk_misdn_dev ;; stop|--stop) run_stop_commands ;; restart|--restart) check_misdn_conf parse_config run_stop_commands ${SLEEP} 2 run_start_commands mk_misdn_dev ;; config|--config) scan_devices write_mISDN_conf ;; scan|--scan) scan_devices print_scan_results ;; help|--help) echo "${USAGE}" exit 0 ;; *) echo "${USAGE}" exit 2 ;; esac Der Automatische Start kann nun durch Aufruf des folgenden Befehles erreicht werden: # chkconfig mISDN on Ein Überprüfung ob der Dienst (Daemon) mISDN wirklich bei jedem Systemstart automatisch mit gestartet wird, kann durch folgenden Befehl erreicht werden: # chkconfig --list | grep mISDN Linux - Wissensdatenbank - https://dokuwiki.nausch.org/ Last update: 04.08.2011 08:13. mISDN voip:asterisk18:isdn https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn 0:Aus 1:Aus 2:Aus 3:Ein 4:Ein 5:Ein 6:Aus Wichtig ist jeweils der Schalter on bei den Runleveln - 3 4 5. From: https://dokuwiki.nausch.org/ - Linux - Wissensdatenbank Permanent link: https://dokuwiki.nausch.org/doku.php/voip:asterisk18:isdn Last update: 04.08.2011 08:13. https://dokuwiki.nausch.org/ Printed on 21.12.2016 20:18.