设为首页 收藏本站
开启辅助访问
注册会员 找回密码

VoIP88

VoIP88 Aster+ 技术文档 Freeswitch 查看内容

FreeSWITCH FreeTDM 语音板卡接口

2013-1-5 08:35| 发布者: james.zhu| 查看: 8478| 评论: 0|原作者: james.zhu

摘要: FreeSWITCH FreeTDM 语音板卡接口 此文档是本人翻译并添加了最新的技术资料。未经同意,不得转载。 介绍 FreeTDM 是一个高级信令和I/O接口的软件库,支持Digium 和Sangoma语音板卡。FreeSWITCH 调用了模块m ...
FreeSWITCH FreeTDM 语音板卡接口

此文档是本人翻译并添加了最新的技术资料。未经同意,不得转载。

介绍

FreeTDM 是一个高级信令和I/O接口的软件库,支持Digium 和Sangoma语音板卡。FreeSWITCH 调用了模块mod_freetdm. 如果你使用asterisk 软交换平台的话,这个模块相当于asterisk的chan_dahdi模块, 主要区别在于FreeTDM是一个结构非常清晰的支持库,并且可以在其他应用模块上使用。

FreeTDM 使用模块化结构,可以实现轻松调用不同的信令协议栈。例如,可以调用开源的Libpri 支持PRI. 还可以调用其他的PRI协议栈,例如运营商级的Trillium的运营商级的PRI协议栈。此协议栈是Sangoma提供,并且完全免费。

FreeTDM 支持多个厂家的语音板卡,包括最有名的Digium和Sangoma语音板卡。目前,FreeTDM 支持3种I/O模块,每个模块都支持硬件层.

I/O 模块

Sangoma (ftmod_wanpipe): 这个模块使用了Sangoma默认的API (libsangoma)接口,安装Wanpipe 驱动程序时会自动安装。更多信息访问:Sangoma’s wiki: http://wiki.sangoma.com/, 这个模块只能被Sangoma语音板卡使用,同时建议Sangoma客户安装此模块。
Zaptel/DAHDI I/O module (ftmod_zt): 这个模块支持DAHDI接口. 此模块也支持旧的Zaptel接口,但是不鼓励使用。此模块可能得不到开发人员的支持。DAHDI 接口可以使用在几个厂家的硬件板卡上,包括Digium, Redfone, Sangoma 和Xorcom (尽管Sangoma语音卡也支持Dahdi 模式,但是不建议使用。建议客户使用ftmod_wanpipe).
PIKA (ftmod_pika): 这个拓展模块支持 PIKA 语音卡。
I/O 模块负责读写原始数据和执行板上命令,不负责其他的功能。FreeTDM 模块控制所有高级信令协议。

Signaling 模块

FreeTDM 支持PRI(30B+D或者23B+D), BRI(2B+D), SS7, MFC-R2 和模拟信令. 需要注意的是,没有任何一个模块一个信令. 可可以在一种信令可以支持多种选择。例如,你可以在3种协议栈选择其中之一。希望以下描述为客户选择协议栈时提供一个参考。

ISDN 模块

Sangoma ISDN module (ftmod_sangoma_isdn): 提供电信级的Trillium 协议栈,支持PRI和BRI协议 (只有sangoma板卡支持). 如果安装此协议栈,你必须确认libsng_isdn已经安装. 更多信息,请参考:http://wiki.sangoma.com/Freeswitch-FreeTDM-Sangoma-ISDN-Library
中文wiki如何安装sangoma FreeSwitch ISDN,参考
LibPRI module (ftmod_libpri): 支持PRI 线路,基于开源的 libpri 协议栈,通过FreeTDM支持任何类型的语音卡(例如Sangoma 和 Digium). 如果使用这个模块,必须确认LIBPRI已经安装。现在都支持安装PRI 和BRI协议 signalling。如果需要支持BRI语音卡,必须安装libpri-1.4.12以上版本。
libpri 官方网站:www.asterisk.org
Native ISDN module (ftmod_isdn): 这是第一个FreeTDM自有协议栈,支持PRI线路。但是目前处于开发阶段,不能作为稳定版发布。
SS7 模块

Sangoma SS7 module (ftmod_sangoma_ss7): 使用电信级的Trillium SS7 协议栈。支持ISUP中国7号(只有Sangoma板卡支持)。安装此协议栈协议获得SS7的许可证。更多信息,请联系sangoma官方,或者中国总代理-星昊通(james.zhu@hiastar.com
模拟接口

Analog 模块 (ftmod_analog): 提供标准FreeTDM支持的 FXO/FXS语音卡,例如Digium, Sangoma 和Xorcom。
Analog EM module (ftmod_analog_em): 提供标准的FreeTDM支持的板卡。例如Digium and Sangoma。
MFC-R2

OpenR2 module (ftmod_r2): 提供FreeTDM板卡(Digium,Sangoma)支持E1 线路的MFC-R2 信令支持。如果编译此模块,必须安装openr2 包 (要求最新的 SVN trunk). http://www.libopenr2.org/
如果配置MFC-R2,请访问: FreeTDM_OpenR2

定制协议(因为已经停止开发,不做进一步介绍)

Boost (ftmod_sangoma_boost): Deprecated module offering support for the boost protocol to access PRI, BRI and SS7 signaling daemons for Sangoma cards. In order to compile this module you need to have SCTP libraries and development headers. Again, this module is DEPRECATED, DO NOT USE IT, the best way to use a Sangoma board is using ftmod_sangoma_isdn for BRI and PRI, ftmod_sangoma_ss7 for SS7 signaling and ftmod_analog and ftmod_analog_em for Analog protocols.
录音

PRI tapping 录音 (ftmod_pritap): 此模块对PRI线路实现录音(passive monitoring) 。用户不能操作通话,只能通过E1线路检测通话。此模块已经在sangoma语音板卡成功测试,其他的厂家板卡不一定可以工作。编译此模块,你必须已经安装libpri ,并且执行FreeTDM 命令时: ./configure –with-pritap”
安装

FreeTDM 是一个可独立安装的软件包,无需依赖FreeSWITCH. 如果客户计划开发自己的应用软件,可以充分利用此软件包或者使用FreeSWITCH. 其实FreeTDM与生俱来就是FreeSWITCH的一个部分, 源代码仍然是FreeSWITCH 主代码库。如果客户这是使用FreeTDM 作为一个API接口的话,开发者不需要安装FreeSWITCH.

依赖关系

一些FreeTDM 模块依赖其他的软件包,这些依赖包安装时通过执行命令 ./configure 时被检测,如果没有安装,请安装依赖包,否则模块不会被成功编译。

ftmod_wanpipe 依赖于 Wanpipe 头文件和libsangoma,所以这两个软件包必须预先成功安装.
ftmod_libpri 和 ftmod_pritap 依赖于 (http://downloads.asterisk.org/pub/telephony/libpri/releases/).
如果 mod/ftmod_libpri.* files 文件没有被安装,开发者必须分别安装以上文件。
cd libs/freetdm
./configure –with-libpri –prefix=/opt/freeswitch
make
make install
ftmod_sangoma_isdn 依赖于 libsng_isdn (http://wiki.sangoma.com/FreeTDM-Sangoma-ISDN-Library andhttp://wiki.sangoma.com/wanpipe- ... sngisdn#libsng_isdn).
ftmod_r2 依赖于 openr2 (http://www.libopenr2.org/)
ftmod_sangoma_boost 依赖于SCTP 软件包和头文件。
如果依赖包没有成功安装,其他的安装包将不能成功安装。如果开发者不需要某些软件包,当然你可以不用安装。

下面的脚本是一个非常方便的方法,具体的内容 在Sangoma wiki here :

#!/bin/sh
#
# Simple script to install FreeTDM/Wanpipe pre-reqs
# NOTE: Assumes you want to put stuff in /usr/src
#
cd /usr/src
echo Fetching wanpipe drivers...
wget ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-current.tgz
machine=`uname -m`
echo Fetching libsangoma for ${machine}
wget ftp://ftp.sangoma.com/linux/libsng_isdn/libsng_isdn-current.${machine}.tgz
echo Unpacking wapipe drivers...
tar zxvf wanpipe-current.tgz
echo Unpacking libsangoma...
tar zxvf libsng_isdn-current.${machine}.tgz
echo Building wanpipe...
wanpipedir=`tar tzvf wanpipe-current.tgz | head -n 1 | cut -c49-`
cd ${wanpipedir}
make freetdm
make install
echo Building libsng...
cd ..
libsngdir=`tar tzvf libsng_isdn-current.${machine}.tgz | head -n 1 | cut -c49-`
cd ${libsngdir}
make install
cd ..
echo Doing wanrouter hwprobe...
wanrouter hwprobe
语音板卡底层驱动

如果使用DAHDI, 所有的底层板卡驱动必须安装。幸运的是,这里有一个ready-to-be-built git 代码树安装Digium DAHDI svn latest trunk + zaphfc driver + OSLEC echo canceller.

git clone --depth=0 git://dahdi-zaphfc.git.sourceforge.net/gitroot/dahdi-zaphfc/dahdi-zaphfc
cd dahdi-zaphfc && make && make install
FreeTDM 和 FreeSWITCH

如果开发者计划在FreeSWITCH 环境下使用FreeTDM 模拟接口,安装步骤相当简单。FreeSWITCH ./bootstrap 和 ./configure 也可以配置FreeTDM。这里多一步,需要打开 modules.conf 文件,注释掉: ../../libs/freetdm/mod_freetdm, 编译时,系统将会自动编译mod_freetdm to。此模块是必要的一个FreeSWITCH和FreeTDM接口。
如果freeswitch 配合freetdm 和ftmod_sangoma_isdn工作,开发者必须这样做:

下载 libsng_isdn version 1.2.0+
必须是root 用户
减压文件
执行:make install
下载 wanpipe version 3.5.17+
减压文件
执行:make freetdm
执行:make install
下载 Freeswitch (e.g. (git-d872408 2010-11-09 19-29-19 -0500))
bootstrap.sh
去掉module.conf 注释 mod_freetdm
执行:configure
执行:make all; make install
配置 Wanpipe and FreeSWITCH for sangoma_isdn
As root
wancfg_fs
检查权限 /freetdm.conf, conf/wanpipe.conf and conf/autoload-configs/freetdm.conf.xml if you run FS as non-root user
添加通道 d-channel in conf/freetdm.conf (e.g. d-channel => 1:16)
Start FS or load mod_freetdm
FreeTDM API

无内容!

配置

FreeTDM 配置是通过一个单独的文件进行配置. 但是大部分开发者使用FreeTDM配合FreeSWITCH一起使用。所以,还需要配置freetdm.conf.xml文件.

首先,开发者必须配置控制freetdm 模块的freetdm.conf,然后配置 freetdm.conf.xml 文件控制mod_freetdm FreeSWITCH 模块

FreeTDM 配置

FreeTDM模块负责读写语音板卡的端口和配置 I/O 选项. 这里不涉及信令协议的控制。文件名称是 freetdm.conf,这个文件是一个简单的文本文件。最终文件路径取决于配置执行FreeTDM ./configure时的选择项路径–prefix= option,默认路径在:/usr/local/freeswitch/conf/freetdm.conf

freetdm.conf 文件是一个简单的文本文件,包括了板卡的端口号,通道,中继类型,组和语音增益调整(gains).

此文件的语法规定:

在 [general]部分有一个选项,可以控制全部的配置选项,是一个全局配置项.
FreeTDM spans 是一个 channel 容器,每个端口的定义从端口,类型,和名称都必须在方括号内 (例如 [span wanpipe mySpanName]).
任何一个通道必须在一个单独的端口配置下。通道的定义在参数设置之后。 (顺序参考,asterisk环境下的 chan_dahdi.conf配置文件).
如果每行以 ‘;’ 或者 ‘#’开始, 此行将被忽略掉。相当于被注释.
特别的字符串 “__END__” 可以用来放在一段文本的顶部,告诉系统停止解析以下部分文件。
’;’ 字符可以用来注释任何一行内容.
’=’ 和 ‘=>’ 用来定义分开参数名称和值.
如何配置这个文件取决于客户使用的硬件层驱动是 ( Wanpipe或 DAHDI)。标准的配置文件如下:

[general]
global_parameter => value

# This span is awesome
[span <span I/O type> <span name>]
; other comment here
parameter1_name => value ; mid-line comment
parameter2_name => value
parameterN_name => value
<sig>-channel => <channel-range-format>
parameterX_name => value
<sig>-channel => <channel-range-format>

# This span is not so awesome
[span <span I/O type> <span name>]
; other comment here
parameter1_name => value ; mid-line comment
parameter2_name => value
parameterN_name => value
<sig>-channel => <channel-range-format>
[general] 标签下,有效的配置参数是:

cpu_monitor – ‘yes’ or ‘no’.  此参数决定当系统到达了设定的阀值时,是否FreeTDM 启动一个线程检测CPU负载和停止接受呼叫事件。
cpu_monitoring_interval – 定义都是毫秒时间去检测CPU的使用情况。默认是1000毫秒 (1 second).
cpu_set_alarm_threshold – 如果达到CPU的使用率阀值,将发起一个告警。 (默认设置是80).
cpu_reset_alarm_threshold – 如果达到CPU使用阀值,此告警讲被清除。 (默认是 70).
cpu_alarm_action – 当发起告警时,有效的值是拒绝呼叫事件,和打印警告信息。此值可以通过冒号合并使用。
以下是一个全局配置的例子:

[general]
cpu_monitor => yes
cpu_monitoring_interval => 2000 ; monitor usage every 2 seconds
cpu_set_alarm_threshold => 90 ; whenever 90% of global CPU usage is reached, trigger the alarm.
cpu_reset_alarm_threshold => 80 ; when the CPU usage decreases at 80%, clear the alarm.
cpu_alarm_action => reject,warn ; Start rejecting calls when the CPU alarm is triggered and also print warnings.
对于每个端口来说,有效的I/O 类型是: wanpipe, zt 和pika. 所以,用户可以这样使用:

[span wanpipe myWanpipeSpan]

或者 Zaptel or DAHDI spans as:

[span zt myDAHDISpan]

最后, PIKA 板卡端口:

[span pika myPIKASpan]

每个端口的有效配置参数是:

trunk_type – 指定中继端口配置类型. 有效值是: E1, T1, J1, BRI, BRI_PTMP, FXO, FXS, EM, 这个值是端口的全局变量。
analog-start-type – 或者 “kewl”, “loop”, “ground” , “wink”.
group – 组名称是为呼出设置。用户可以定义为任何字符,但是为了不和端口数混淆,用户必须使用字母开始。任何在组参数下的通道将被添加到组里面,并且作为呼出的轮寻通道。
txgain – 语音发送的增益设置. 可以为任何浮点数. 如果此值过大,将会影响语音质量,例如语音嘈杂等等。通常取值范围-5.0 to 5.0.
rxgain – 语音接收增益。可以为任何浮点数. 如果此值过大,将会影响语音质量,例如语音嘈杂等等。通常取值范围-5.0 to 5.0.
number – 此值只适用于FXO 端口,呼入的DNIS号码设置到一个固定号码.
除了以上设置以外,用户必须在端口定义通道类型。每个通道以前的参数将会影响通道的设置。 (参考 Asterisk chan_dahdi.conf).



b-channel – 指定一个或多个 b-channels通道 (ISDN and SS7).
d-channel – 指定一个和多个 D channels (ISDN,PRI).
fxo-channel – 指定一个或多个FXO 信令通道 (analog, RBS).
fxs-channel – 指定一个或多个FXS信令通道 (analog, RBS).
em-channel – 指定E & M 信令通道.
有效格式取决于 I/O type (硬件板卡类型) (或者是wanpipe, zt, pika). 以下列出详细信息.

另外,对于freetdm.conf, 几个其他的文件是可选的.

以下文件是定义I/O 模块,板卡的全局设置:

zt.conf
wanpipe.conf
pika.conf
所有的参数设置必须设置到默认的标签 [defaults] 部分.

zt.conf 可以设置的参数:

codec_ms – 毫秒数,定义对通道的读写速率. (默认是 20)
wink_ms – 毫秒数,等待检测一个 wink. (默认是150)
flash_ms – 设置一个flash的时间段 (摘机/挂机).
echo_cancel_level – 对dahdi驱动设置回声抑制.
rxgain – 调整Dahdi驱动的发送语音通道增益.
txgain – 调整Dahdi驱动的接收语音通道增益.
wanpipe.conf 接受的配置参数:

codec_ms – 毫秒数-对通道的读写速率. (默认是 20)
wink_ms – 多少毫秒-等待检测wink. (默认是150)
flash_ms – 拍叉簧时间段 (on-hook/off-hook).
一些freetmd 模块的单元调用了(主要是ftmod_analog模块) tones.conf 文件用于检测信号音生成和检测.  特别是呼出时的拨号音。如果用户使用模拟接口,需要呼出,用户必须确认正确配置 tones.conf 文件,对应相应的国家,例如确认配置中国制式;否则FreeTDM将没有拨号音(或者不能正确检测拨号音)。

Wanpipe 模式

在此模式下,用户不需要安装Zaptel或者DAHDI驱动. 用户需要安装最新的Wanpipe 驱动,用户可以在 Wanpipe 驱动路径下执行命令:”make freetdm && make install” 快速安装FreeTDM模块。

wanpipe 端口的语法参数如下:

xx-channel => <wanpipe-span-number>:<channel number> xx-channel => <wanpipe-span-number>:<low-channel-number>-<higher-channel-number>

用户可以在一个端口下添加一个通道或者添加一个通道范围。用户可以在一个端口上添加一个通道或者数个通道。wanpipe 驱动通过 “wanrouter start” Wanpipe 命令在/dev 路径下创建路径. 如果是 Windows,用户可以使用Windows 设备管理员来配置.

例如,如果在第4端口,从通道 1到 23 in span 4,  linux文件系统将创建 /dev/wanpipe4_if1 到 /dev/wanpipe4_if23,用户在freetdm.conf文件中可以看到的是:

[span wanpipe trunk1]
trunk_type => T1
b-channel => 4:1-23
这里”wanpipe” 用来设置 端口定义的I/O 类型和通道语法 xx-channel (例如 b-channel通道),语法是 <wanpipe span number>:<range of channels>. 因为在Wanpipe 设备中,对于所有的端口来说,通道的数量不少一个全局变量,而是每个端口的来说的。(注意,区别于dahdi 驱动来说,通道数是相对于所有端口。).

这里是一个 2 个端口使用T1 (span 7 和10)例子 .

[span wanpipe PRI_1]
trunk_type => T1
b-channel => 7:1-23
d-channel => 7:24

[span wanpipe PRI_2]
trunk_type => T1
b-channel => 10:1-23
d-channel => 10:24
这是一个E1的配置例子:

[span wanpipe PRI_1]
trunk_type => E1
b-channel => 7:1-15
d-channel => 7:16
b-channel => 7:17-31

[span wanpipe PRI_1]
trunk_type => E1
b-channel => 10:1-15
d-channel => 10:16
b-channel => 10:17-31
wanpipe 1个端口带有2个PSTN模拟接口的配置文件 (在Linux文件系统中是 /dev/wanpipe1_if1 和 /dev/wanpipe1_if2):

[span wanpipe FXO]
trunk_type => FXO

txgain => 3.5
rxgain => 7.5
fxo-channel => 1:1

txgain => 0.5
rxgain => 8.5
fxo-channel => 1:2
一个FXS 端口,带2个坐席分机的配置:

[span wanpipe FXS]
trunk_type => FXS
txgain => 3.5
rxgain => 7.5
fxs-channel => 1:3

txgain => 0.5
rxgain => 8.5
fxs-channel => 1:4
注意,wanpipe 端口必须先设置成功。配置文件通过Sangoma配置工具来实现。(查看http://wiki.sangoma.com/ ). 注意在TDM_VOICE_API in wanpipe*.conf 配置的端口可以和freetdm。conf 文件的I/O 类型一起工作。

完整的查看配置文件,查看: Freetdm.conf_Examples

DAHDI 模式

DAHDI 模式可以支持任何基于Dahdi的语音板卡,包括Sangoma,Digium( Sangoma同时支持FreeTDM下的Wanpipe和DAHDI模式)和Redfone foneBRIDGE2 T1/E1 网关. Sangoma 语音卡最好使用 Wanpipe 模式. 这里注意的是Sangoma B601不支持硬件HDLC,如果需要HDLC支持的话,用户只能选择Dahdi 模式(Dahdi支持软件的HDLC传输)。Sangoma其他板卡建议使用Wanpipe模式。

Digium 语音卡必须使用Dahdi模式.

DAHDI 模式兼容Zaptel 模式,但是Zaptel 已经停止维护。此模式依赖于 “ftmod_zt.so”, 此文件默认和DAHDI或者zaptel一起编译。在运行环境中,FreeTDM 将检查是否存在系统文件( /dev/zap/ctl 或者 /dev/dahdi/ctl) ,如果其中之一存在,将和其中之一进行通信.

在DAHDI的典型安装环境下,freetdm.conf 文件包含了基本的一些配置选项: /etc/dahdi/system.conf (如果使用zaptel的话: /etc/zaptel.conf ), dahdi_cfg 将调用文件配置硬件语音板卡。

以下是一个1个端口的通道配置文件,从1到23,因此创建了文件节点: /dev/zap/1 到 /dev/zap/23。freetdm.conf 配置文件例子如下:

[span zt trunk1]
trunk_type => T1
b-channel => 1-23
这里 “zt” 设置端口的I/O 类型,通道的语法是xx-channel (例如B通道) 值是一个通道范围. 因为在Dahdi模式下,通道数量是一个对所有端口的全局变量。所以, 下一个端口将从通道25开始(假设端口1有24个通道).

这里是2个端口的T1设置文件:

[span zt PRI_1]
trunk_type => T1
b-channel => 1-23
d-channel => 24

[span wanpipe PRI_2]
trunk_type => T1
b-channel => 25-47
d-channel => 48
可以看到,在Dahdi模式下,通道配置参数是一个对所有端口的全局设置,没有指定任何通道。 (相对于wanpipe模式,端口可以指定).

查看完整配置文件: Freetdm.conf_Examples

‘注意:’ 如果使用DAHDI模式,system.conf 文件是这样的

bchan=1-15,17-31
dchan=16
freetdm.conf 文件应该是这样的:

b-channel => 1-15
d-channel => 16
b-channel => 17-21
用户可以按照system.conf 设置freetdm.conf。但是可能引起呼叫问题,如果呼叫通过通道16的话。确认通道16不承载语音。

FreeSWITCH FreeTDM configuration

一旦freetdm配置完成,你可以使用freeSWITCH或者第三方的应用程序去调用此配置文件。可以通过配置应用层文件去配置语音呼叫。默认路径是: /usr/local/freeswitch/conf/autoload_configs/freetdm.conf.xml。

autoload_configs/freetdm.conf.xml 样本:

<configuration name="freetdm.conf" description="FreeTDM Configuration">
  <settings>
    <param name="debug" value="0"/>
    <param name="sip_headers" value="true"/>
    <!--<param name="hold-music" value="$${moh_uri}"/>-->
    <!--<param name="enable-analog-option" value="call-swap"/>-->
    <!--<param name="enable-analog-option" value="3-way"/>-->
  </settings>
   <pri_spans>
     <span name="myPRI">
       <!-- Log Levels: none, alert, crit, err, warning, notice, info, debug -->
       <param name="q921loglevel" value="alert"/>
       <param name="q931loglevel" value="alert"/>
       <param name="mode" value="user"/>
       <param name="dialect" value="q931"/>
       <param name="dialplan" value="XML"/>
       <param name="context" value="pstn"/>
     </span>
   </pri_spans>

   <analog_spans>
     <span name="myFXO">
       <!--<param name="hold-music" value="$${moh_uri}"/>-->
       <param name="dialplan" value="XML"/>
       <param name="context" value="Incoming-FXO"/>
       <param name="tonegroup" value="fr"/>
       <param name="enable_callerid" value="true"/>
       <param name="enable-analog-option" value="call-swap"/>
       <!--<param name="enable-analog-option" value="3-way"/>-->
     </span>

     <span name="myFXS">
       <!--<param name="hold-music" value="$${moh_uri}"/>-->
       <param name="dialplan" value="XML"/>
       <param name="context" value="default"/>
       <param name="tonegroup" value="fr"/>
       <param name="enable_callerid" value="true"/>
       <param name="enable-analog-option" value="call-swap"/>
       <param name="dialplan" value="XML"/>
       <param name="context" value="Incoming-FXS"/>
     </span>

   </analog_spans>

   <config_profiles>
     <profile name="my_pri_te_e1_1">
       <param name="switchtype" value="euroisdn" />
       <param name="interface" value="cpe"/>
     </profile>
   </config_profiles>

   <sangoma_pri_spans>
     <span name="wp1" cfgprofile="my_pri_te_e1_1">
       <param name="dialplan" value="XML"/>
       <param name="context" value="pstn"/>
       <param name="tei" value="<*0..127>"/>
       <param name="overlap" value="<yes|*no>"/>
       <param name="min_digits" value="4"/>
       <param name="setup arbitration" value="<yes|*no>"/>
       <param name="facility" value="<yes|*no>"/>
       <param name="facility-timeout" value="0"/>
       <param name="outbound-called-ton" value="<*unknown|international|national|network-specific|subscriber-number|abbreviated-number|reserved>"/>
       <param name="outbound-called-npi" value="<*ISDN|data|telex|national|private|reserved|unknown>"/>
       <param name="outbound-calling-ton" value="<*unknown|international|national|network-specific|subscriber-number|abbreviated-number|reserved>"/>
       <param name="outbound-calling-npi" value="<*ISDN|data|telex|national|private|reserved|unknown>"/>
       <param name="outbound-rdnis-ton" value="<*unknown|international|national|network-specific|subscriber-number|abbreviated-number|reserved>"/>
       <param name="outbound-rdnis-npi" value="<*ISDN|data|telex|national|private|reserved|unknown>"/>
       <param name="outbound-bearer_cap" value="<*speech|unrestricted-digital|3.1Khz>"/>
       <param name="outbound-bearer_layer1" value="<v110|ulaw|alaw>"/>
       <param name="local-number" value=""/>
     </span>
   </sangoma_pri_spans>

</configuration>
“*” 默认
在freetdm.conf.xml文件中,标准的端口语法是:

<span name="spanName">
    <param name="dialplan" value="XML"/>
    <param name="context" value="default"/>
    <param name="xxx" value="xxx"/>
</span>
名称属性的标签必须对应在freetdm.conf 文件中的端口名称。这样,FreeSWITCH会识别哪一个端口是用户计划配置的信令。

大部分的参数配置取决于信令支持的模式。每个端口必须包含在信令模块里面。每个信令模块必须命名一个唯一的标签。信令模块接受所有的拨号规则和context 参数。并且,每个端口必须设置端口所支持的信令模块。在freetdm.conf.xml中,用户可以使用以下信令模块的标签。

<analog_spans> </analog_spans> – 信令模块 ftmod_analog将设置模拟端口.
<analog_em_spans> </analog_em_spans> – 信令模块 ftmod_analog将设置模拟 EM信令。
<pri_spans> </pri_spans> – FreeTDM ISDN 协议栈设置E1 为 ftmod_isdn.
<libpri_spans> </libpri_spans> – 端口将使用libpri 模块设置ftmod_libpri.
<pritap_spans> </pritap_spans> – 端口将通过PRI tapping module 模块,配置ftmod_pritap.
<sangoma_pri_spans> </sangoma_pri_spans> – 端口将通过ISDN signaling module 模块配置ftmod_sangoma_isdn.
<sangoma_bri_spans> </sangoma_bri_spans> – 端口将通过Sangoma ISDN signaling module 模块配置 ftmod_sagoma_isdn.
<sangoma_ss7_spans> </sangoma_ss7_spans> – 端口将通过Sangoma SS7 signaling module 模块配置 ftmod_sangoma_ss7.
<r2_spans> </r2_spans> – 端口将通过 OpenR2 MFC-R2 signaling module 模块支持ftmod_r2.
<boost_spans> </boost_spans> – 端口将调用 custom protocol module模块支持 ftmod_sangoma_boost to access SS7, PRI 和 BRI lines.
请参考freetdm 源代码查看相应的参数配置.

以下是一个HFC-S BRI PCI 语音卡的工作实例。如果其他的设备占用了 S0-bus, 可能出现一些问题,目前只是在单设备S0上工作。

<configuration name="freetdm.conf" description="FreeTDM Configuration">
  <settings>
    <param name="debug" value="0"/>
    <!--<param name="hold-music" value="$${moh_uri}"/>-->
    <!--<param name="enable-analog-option" value="call-swap"/>-->
    <!--<param name="enable-analog-option" value="3-way"/>-->
  </settings>

   <libpri_spans>
     <span name="ZTHFC1">
        <param name="node" value="cpe"/>
        <param name="switch"   value="euroisdn"/>
        <param name="opts" value="omit_redirecting_number"/>
        <param name="dp" value="unknown"/>
        <param name="debug" value="none"/>
        <!-- <param name="debug"    value="q931_all"/> -->

        <param name="dialplan" value="XML"/>
        <param name="context" value="public"/>
      </span>
   </libpri_spans>
</configuration>
Dial Plan(拨号规则)

当使用 mod_freetdm调用FreeTDM 和FreeSWITCH. 用户必须为你的线路添加拨号规则。

<extension name="outgoing-pri">  // 通过PRI 线路呼出
  <condition field="destination_number" expression="^.+$">
    <action application="bridge" data="freetdm/1/a/${destination_number}"/>
  </condition>
</extension>
<extension name="outgoing-FXO">  // 通过FXO 模拟口呼出
  <condition field="destination_number" expression="^.+$">
    <action application="bridge" data="freetdm/1/1/${destination_number}|freetdm/1/2/${destination_number}"/>
  </condition>
</extension>
FXS 通道通过FXO呼出

<extension name="bridge-FXS-to-FXO">
  <condition field="destination_number" expression="^.+$" />
  <condition field="chan_name" expression="FreeTDM/1/[34]" >
    <action application="bridge" data="freetdm/1/1/${destination_number}|freetdm/1/2/${destination_number}"/>
  </condition>
</extension>
Ascending vs. Descending Channel Selection(呼叫通道的选择策略(向上选择/向下选择))

FreeTDM 支持在一个端口自动选择呼叫通道。选择 “a” 向上选择通道 (从最低的空闲通道开始) ,或者选择 “A” 向下选择通道 (从最高有效通道开始).

举例:

<!-- Ascending, i.e. start at channel 1 and work up -->
<action application="bridge" data="freetdm/1/a/${destination_number}>

<!-- Descending, i.e. start at "the top" (e.g. 23 in T1) and work down -->
<action application="bridge" data="freetdm/1/A/${destination_number}>
Sangoma A200 的软件回声抑制

如果用户购买了Sangoma 不带回声DSP的A200 语音卡,软件回声模块将不能使用。在03/11以前的sangomawiki上没有说明。默认的Wanpipe模式不支持软件回声抑制。用户必须使用Dahdi模式。如果没有软件回声抑制的话,挂机功能可能出现问题。此板卡可以更好低在mg2 模块下工作,也可以在oslec工作. 这个数据已经在Gentoo-64环境下得到证实。

提示: 在wanpipe默认模式:

第一步: 编译安装 dahdi, dahdi-tools, and libpri

第二步: 编译安装最新版本的wanpipe驱动,执行”./Setup dahdi”。

… same thing with Oslec instead of mg2 software echo cancellation

提示: 不要下载dahdi-complete版本,分别下载 dahdi 和dahdi-tool .

第三部: 设置 “echocanceller=oslec,X”, X 代表端口数(/etc/dahdi/system.conf).

Sangoma G.722 ISDN calls

2011 年 5月份开始, Sangoma 语音卡可以实现通过G.722 编码呼出呼入。(其他编码可以插入到TDM 64kbps 数据流)。

这个方法可以在 “unrestricted digital” (不受限数字业务)承载能力的ISDN电路使用。一个典型的语音通话将被发送到运营商和运营商发送给用户, 默认的承载能力是”speech”. 如果使用 “unrestricted digital” (不受限数字业务),B通道的数据可以是任何形式。用户必须配置FreeSWITCH 去决定使用何种语音编码,在使用G.722环境中,Sangoma端口的XML配置是这样的 <param name=”context” value=”xx” />) :

<param name="unrestricted-digital-codec" value="G722@8000h" />
此配置将对所有FreeTDM不受限数字业务呼叫都设置成 G.722 codec。

为了启动一个带”unrestricted digital” 呼叫,呼叫的bridge application 如下:

<action application="bridge" data="{freetdm_bearer_capability=1}freetdm/xxx" />
这里注意的是{freetdm_bearer_capability=1}, 0 是 speech (默认) , 1 是unrestricted digital.

FreeSWITCH/FreeTDM CLI 命令

支持 mod_freetdm

如果确认mod_freetdm 被成功加载到FreeSWITCH, 用户可以使用许多FreeTDM 命令:

查看所有的端口配置:

ftdm list
查看所有端口的详细内容:

ftdm dump <span_id>
查看端口的一个通道内容

ftdm dump <span_id> <chan_id>
启动一个端口(当已经关闭端口以后,此命令关闭sangoma_isdn)

ftdm start <span_id>
停止一个端口

ftdm stop <span_id>
获取抓包数据( pcap trace) (可能不能正常工作)

ftdm q931_pcap <span_id> on|off [pcapfilename without suffix]
(这个命令应该不是定义在mod_freetdm, 应该在ftmod_isdn,(可能)用来启用或者关闭端口或者某些通道的DTFM检测:

ftdm dtmf on|off <span_id> [<chan_id>]
打开端口或者某些通道的跟踪信息

ftdm trace <path where to save files per channel> <span_id> [<chan_id>]
关闭端口或者某些通道的trace信息

ftdm notrace <span_id> [<chan_id>]
调整端口或者通道的收发语音增益

ftdm gains <rxgain> <txgain> <span_id> [<chan_id>]
其他可以支持ftmod’s api的命令

支持 ftmod_sangoma_isdn API

ftmod_sangoma_isdn 是基于Sangoma’s libsng_isdn PRI需要栈。运行之前,用户必须下载安装此软件包。

打开一个端口的运行的Q921或Q931信令信息

ftdm sangoma_isdn trace <q921|q931> <span_name>
打开一个端口的运行的Q921或Q931信令信息

ftdm sangoma_isdn trace disable <span_name>
获得 端口  layer 1 的数据 (来自于Sangoma驱动底层)

ftdm sangoma_isdn l1_stats <span_name>
获取每个端口的状态信息报考

ftdm sangoma_isdn show_spans
SIP-Headers

如果在freetdm.conf.xml中启用 “sip_headers”,用户可以通过SIP-Header控制mod_freetdm模块:

X-FreeTDM-CallerName
X-FreeTDM-CallerNumber
X-FreeTDM-ANI
X-FreeTDM-ANI-TON
X-FreeTDM-ANI-Plan
X-FreeTDM-ANI2
X-FreeTDM-DNIS
X-FreeTDM-DNIS-TON
X-FreeTDM-DNIS-Plan
X-FreeTDM-RDNIS
X-FreeTDM-RDNIS-TON
X-FreeTDM-RDNIS-Plan
X-FreeTDM-Screen
X-FreeTDM-Presentation
Channel Variables(通道变量)

Info

freetdm_span_name
freetdm_span_number
呼入所占用的端口数.
freetdm_chan_number
呼入所占用的通道数.
Control

freetdm_bearer_capability
freetdm_bearer_layer1
freetdm_outbound_ton
freetdm_custom_call_data
Applications(应用)

disable_ec
关闭这个通话的回声抑制.
disable_dtmf
关闭这个通话的DTMF检测.
enable_dtmf
启用通话的DTMF检测.
Mailing List FAQ (邮件列表)

This is a collection of questions and answers from the FreeSWITCH mailing list.

FreeTDM partial spans, group dialing and trunks

http://lists.freeswitch.org/pipe ... October/063519.html

The question:

I have oodles of FXO ports configured on Xorcom Astribanks. On the Astribank
each set of 8 FXO ports forms a zaptel/openzap/freetdm span.

Now if a trunk consists of an integral multiple of 8 FXO ports it is easy to
just dial out on the first available channel:

<action application="bridge" data="freetdm/1/a/$1|freetdm/2/a/$1"/>

This grabs the first available channel out of 16 FXO ports.

But what is the "right" way to do it when I need to use 1.5 spans (i.e. 12
FXO ports)?

Is there such a thing as a virtual span that can be built out of individual
FXO ports?
The answer:

You can create spans with channels from any other span (as long as the
signaling is the same).

[span zt xorcomSpan]
; channels from 1.5 trunks
fxo-channel => 1-12

Then dial:

<action application="bridge" data="freetdm/xorcomSpan/a/$1/>

You can also just define a group for those channels and use the group
for dialing.

[span zt xorcomTrunk1]
trunk_type => FXO
group => xorcomg1
fxo-channels => 1-8

[span zt xorcomTrunk2]
trunk_type => FXO
group => xorcomg1
fxo-channels => 9-12

Then dial using the group name.

<action application="bridge" data="freetdm/xorcomg1/a/$1/>

This means spans and groups are strings within the same name space (as
far as hunting is concerned), and you should not make them conflict.
The question in this thread refers to “virtual spans”. In FreeTDM, all spans declared in freetdm.conf are virtual or logical, however you want to call them. Meaning the FreeTDM span structure it’s just a channel container. The actual channels may belong to different physical spans. You can do things like:

freetdm.conf

[span wanpipe superWanpipeSpan]
b-channel => 1:1-15
b-channel => 1:17-31
b-channel => 2:1-15
b-channel => 2:17-31
This freetdm.conf file creates a span containing B channels from 2 physical E1′s. A span of type “wanpipe” was used for this example because is clearer that channels from 2 spans are being put in a single span. For zt I/O spans this looks like:

freetdm.conf

[span zt superZtSpan]
b-channel => 1-15
b-channel => 17-31
b-channel => 32-46
b-channel => 48-62
This super spans, or logical spans that are composed of channels across physical spans are actually used for some signaling types like “boost”, which requires all b-channels in a single span. That module however is deprecated, and is not recommended to group channels like that (because some other signaling modules assume all channels in a span come from a single physical span).

Note that, although for analog modues it’s supported to add channels from any physical span to any FreeTDM span, it’s not recommended for other signaling modules (like PRI, BRI). Group dialing was introduced to stop using FreeTDM logical spans as dialing groups. If you need to group channels for dialing purposes, use the “group” parameter to add the channels to a given group.

FreeTDM Screening Indicator

http://lists.freeswitch.org/pipe ... October/064539.html

The question:

Hi,
I have a server with FreeSWITCH (latest GIT revision) + FreeTDM with some
Sangoma A108 boards.
I have the necessity to set, for outgoing calls, the ISDN information
element "Screening Indicator" of calling party number.
I have see that some information element can be set in the
"freetdm.conf.xml" file (i.e. calling and called typer of number or
numbering plan) but I have not found any reference to the screening
indicator.
If there is no way to specify this information element for each trunk, it's
possible to change its default value (that is 01=user provided, verified and
passed)?
Thanks,
The answer:

To check the value on incoming call, try the screen_bit variable from the dial plan:

${screen_bit} which will be either true or false.

To set it for outgoing calls, try using the privacy application that FreeSWITCH has.

<action application="privacy" data="on" />
FreeTDM Sangoma PRI rx errors

http://lists.freeswitch.org/pipe ... October/064569.html

The question:

After installing FreeSWITCH and Sangoma, I am getting following error in fs_cli

2010-10-27 17:57:03.228457 [ERR] ftmod_sangoma_isdn_stack_rcv.c:883 sng_isdn->s11 Rx Error
2010-10-27 17:57:03.228457 [DEBUG] ftmod_sangoma_isdn_stack_rcv.c:871 sng_isdn->s1: Resetting L1 link

What does these mean?
These errors mean we’re seeing errors on L1 (the T1/E1 link).

To troubleshoot, it is advised:

Can you check what type of L1 errors you are seeing:

from FS cli:
ftdm sangoma_isdn l1_stats wp1

Can you also check if wanpipemon is reporting errors:

wanpipemon -i w1g1 -c Ta

(repeat a couple times to see if any of the alarms are continuously
toggling or the number of errors at the bottom keep incrementing)
How to identify whether a port in a card is a problem

The question:

How to check whether there is a problem with the ports in the Sangoma card that you have?
The Answer:

You need to check by using loopback.
Single port loopback:

            +-------+
            |       |
        1   2   4   5
        |       |
        |       |
        +-------+
You need to configure the port as MASTER to get the clock signal. Otherwise tx will expect clock
from rx and rx will expect clock from tx, and port won't show "Connected" status.

If it shows "Connected" then most probably there is no problem in the port
If you are using a CSU with the sangoma card, you can simply put the CSU in loopback mode and start sending out the test patterns
What is YELLOW alarm

The question:

What is meant by YELLOW alarm? Will I be able to simulate to get better understanding?
The Answer

Of-course yes. You can generate the YELLOW alarm as follows.
Make a Loopback cable as follows:

           PORT A                            PORT B
            +---------------------------------------+
            |       +-----------------------+       |
            |       |                       |       |
        1   2   4   5                   1   2   4   5
        |       |                       |       |
        |       +-----------------------+       |
        +---------------------------------------+

Configure the clock of PORT A as "NORMAL" and PORT B as "MASTER".
Remove the 1 and 2 pins, in PORT B. You will get "YELLOW" alarm on PORT B.
In PORT A, it will have "Remote Alarm Indication" = "ON". ( wanpipemon -i w1g1 -c Ta )
PORT A will be in "Connected" state ( since it gets the packet sent by PORT B.
PORT B will be in "Disconnected" state.
Here is the explanation:

Once PORT B is unable to receive any message from PORT A, it will send a indication saying that
"I'm unable to receive you" in the Tx (pins 4,5), and it will set the "YELLOW" alarm on. Then
PORT A finds that, PORT B is not receiving packets which is sent by PORT A, and it will enable the "RAI".
(Red Alarm Indicator). Alarm recovery time can vary from equipment to equipment. Yellow alarm is also
known as AIS on some equipment.
Sangoma E1 语音卡 中文wiki:http://wiki.voip88.com/index.php/%E6%95%B0%E5%AD%97%E5%8D%A1
Sangoma wanpipe 驱动介绍:
http://wiki.voip88.com/index.php ... 5%E5%B7%A5%E5%85%B7
http://wiki.voip88.com/index.php ... 8%E5%91%BD%E4%BB%A4

鲜花

握手

雷人

路过

鸡蛋
关闭

站长推荐上一条 /1 下一条

手机版|VoIP88 ( 粤ICP备11095982号   填写您的邮件地址,订阅我们的精彩内容:

GMT+8, 2017-9-22 17:42 , Processed in 0.270002 second(s), 27 queries .

Powered by VoIP88

© 2001-2017 VoIP88

返回顶部