E1板卡+Asterisk

1.编译环境的安装:
新装机器,需要执行sudo apt-get update
编译环境及依赖库安装:sudo apt-get install build-essential subversion libncurses5-dev libssl-dev libxml2-dev vim-nox
2.编译过程:(自行下载源码)
编译DAHDI
$tar -zxvf dahdi-linux-complete-current.tar.gz
$cd dahdi-linux-complete-X.X.X+X.X.X
$make
#sudo make install
#sudo make config
编译libpri
$tar -zxvf libpri-X.X-current.tar.gz
$cd libpri-X.X.X
$make
#sudo make install
编译asterisk
$tar -zxvf asterisk-X.X-current.tar.gz
$cd asterisk-X.X.X
$./configure
$make menuselect (依次按h、F8、x)
$make
#sudo make install
#sudo make samples
编译chan-ss7
$tar -zxvf chan-ss7-2.3.11.tar.gz
$cd chan-ss7-2.3.11
$vi Makefile (修改Makefile中的路径)
ASTERISK_PATH=../asterisk-1.8.8.0 —— asterisk的源码目录,这里也可以使用asterisk安装后的头文件路径
INCLUDE+=-I../dahdi-linux-complete-2.10.1+2.10.1/linux/include —— dahdi的头文件路径
因为我们使用的dahdi,所以CFLAGS+=-DUSE_ZAPTEL必须注释掉
$make chan_ss7.so
#sudo cp chan_ss7.so /usr/lib/asterisk/modules/
注意:以上我们全部使用的是默认的系统路径(除了chan-ss7的Makefile中修改的包含路径),如果需要自己定义路径,
可以在make install的时候,手动cp文件
3.驱动加载:
硬件准备:
一块E1的板卡(TE110P)
一根RJ48的交叉线(12收,对应45发)
语音卡识别:
$lspci -vvvv
03:00.0 Network controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
Subsystem: Device 79fe:0001
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- Latency: 32 (250ns min, 32000ns max)
Interrupt: pin A routed to IRQ 20
Region 0: I/O ports at de00 [size=256]
Region 1: Memory at fdeff000 (32-bit, non-prefetchable) [size=4K]
Capabilities:
Kernel driver in use: wcte11xp
如果没有如上的类似信息,说明板卡没有被识别,需要检查板卡是否插好,或者换一个插槽重试。
加载驱动:
在/etc/dahdi/modules文件中检查是否有所需要的驱动,至少包括以下两项:
wcte11xp
wct4xxp
生成配置文件
#sudo dahdi_scan —— 可以列出所查询到的硬件信息,如果没有信息,请执行sudo service dahdi restart
active=yes
alarms=UNCONFIGURED
description=Digium Wildcard TE110P T1/E1 Card 0
name=WCT1/0
manufacturer=Digium
devicetype=Digium Wildcard TE110P T1/E1
location=PCI Bus 03 Slot 01
basechan=1
totchans=31
irq=0
type=digital-E1
syncsrc=0
lbo=0 db (CSU)/0-133 feet (DSX-1)
coding_opts=HDB3

framing_opts=CCS,CRC4
coding=
framing=CAS
#sudo dahdi_genconf —— 可以生成默认的配置文件
文件如下:
/etc/dahdi/system.conf
/etc/asterisk/chan_dahdi.conf
/etc/asterisk/chan-channel.conf
#sudo dahdi_cfg -vv —— 可以查看当前所有通道状态
主机重启,运行命令:
#sudo asterisk -vvvvvvvvgc —— 能够进入asterisk的控制台说明配置成功,否则请检查配置(注意此时不要将chan_ss7相关的配置和动态库引入)
在cli控制台输入:
*CLI> dahdi show channels
Chan Extension Context Language MOH Interpret Blocked State
pseudo default default In Service
至此,板卡安装完毕、驱动加载完毕。
此时,语音卡的指示灯会变成红色,说明是板卡驱动加载了,但是物理层是断的,也就是说E1口没有连接(或者收发接反了)。
正确连接上交叉网线,板卡指示灯变成绿色。
4.配置说明:

环境说明:主机两台(A:192.168.1.25 B:192.168.1.61),都安装了E1板卡,使用RJ48交叉线连接
目标:在两台主机各注册了一个SIP终端(A1:9901,B2:9802),能够使得两个终端中间使用E1连接,能够通话
SIP终端:A1:PC上安装软电话,注册在主机A上,号码9901
B2:使用WIFI连接,在手机上使用linphone,注册在主机B上,号码9802
主机A配置:
1.配置SIP内线呼叫:(SIP号码9901、9902)
/etc/asterisk/sip.conf —— 列出的是需要修改的配置或者是需要注意的配置,未列出的配置项保持默认即可
[general]
allowguest=yes
allowoverlap=yes
udpbindaddr=0.0.0.0 默认监听所有地址,端口为5060,如若指定端口,则udpbindaddr=0.0.0.0:5000
tcpenable=no 不使用TCP
disallow=all 先禁止所有编码
allow=ulaw
allow=alaw
[sip-phone](!)
allow=ulaw
allow=alaw
type=friend
host=dynamic
nat=yes
canreinvite=no
context=sip-internal
[9901](sip-phone)
username=9901
secret=123456
[9902](sip-phone)
username=9902
secret=123456
/etc/asterisk/extensions.conf
[general]
autofallthrough=no
[sip-internal]
exten => _99.,1,Dial(SIP/${EXTEN},20,r)
至此,内线号码9901、9902可以互相呼叫并且通话。
同样的配置,设置主机B,并且两个号码:9801、9802能够互相通话,详细配置略
2.配置ss7呼叫
主机A设置:
/etc/dahdi/system.conf
# Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" (MASTER)
span=1,1,0,ccs,hdb3 —— crc4校验不需要,实际环境是否需要,要看对端的设置
# termtype: te
bchan=1-31 —— 这是专门为Chan_SS7而设置的
#dchan=16 —— C

han_SS7需要注释掉该行
#echocanceller=mg2,1-15,17-31 —— 注释掉
/etc/asterisk/ss7.conf
[linkset-test]
enabled => yes ; The linkset is enabled
enable_st => yes ; The end-of-pulsing (ST) is not used to determine when incoming address is complete
use_connect => yes ; Reply incoming call with CON rather than ACM and ANM
recently used ; The CIC hunting policy (even_mru, odd_lru, seq_lth, seq_htl) is even CIC numbers, most
hunting_policy => even_mru ; The CIC hunting policy (even_mru, odd_lru, seq_lth, seq_htl) is even CIC numbers, most recently used
context => ss7 ; Incoming calls are placed in the ss7 context in the asterisk dialplan
language => en ; The language for this context is da
;t35 => 15000,timeout ; The value and action for t35. Value is in msec, action is either st or timeout
; If you use overlapped dialling dial plan, you might choose: t35 => 4000,st
subservice => auto ; The subservice field: national (8), international (0), auto or decimal/hex value
; The auto means that the subservice is obtained from first received SLTM
;mtp3server => localhost ; The host running the mtp3 service
variant => CHINA ; SS7 variant, either ITU or CHINA
[link-l1]
linkset => test
channels => 1-15,17-31
schannel => 16
firstcic => 1
enabled => yes
echocancel => no
echocan_train => 350
echocan_taps => 128
;stp => 0x3ff0
[host-shihz-G41MT-S2PT]
enabled => yes
opc => 0x8e0 ; The point code for this SS7 signalling point is 0x8e0
dpc => test:0x3fff ; The destination point (peer) code is 0x3fff for linkset test
links => l1:1
globaltitle => 0x00, 0x04, 0x01, 4546931411
ssn => 7
/etc/asterisk/extensions.conf
[ss7] // 对应 ss7.conf 文件里面的context
exten => _99.,1,Dial(SIP/${EXTEN},20,r)
exten => _99.,2,Hangup
[sip-internal]
exten => _98.,1,Dial(ss7/${EXTEN}) // 呼出号码
注释掉/etc/asterisk/chan_dahdi.conf中关于通道部分内容,注释掉dahdi-channels.conf中的所有内容
主机B设置:(参考A设置)
注意:在ss7.conf的设置中,有关opc、dpc的内容,需要与主机A相互对应
拨号计划设置如下:
/etc/asterisk/extensions.conf
[ss7] // 对应 ss7.conf 文件里面的context
exten => _98.,1,Dial(SIP/${EXTEN},20,r)
exten => _98.,2,Hangup
[sip-internal]
exten => _99.,1,Dial(ss7/${EXTEN}) // 呼出号码
关于拨号计划的设置,一点经验:
ss7.conf中需要的拨号计划(ss7),是指从E1口进来的呼叫信令,是呼叫本地内线的,因此需要Dial的目标为SIP终端
sip.conf中对应的拨号计划(sip-internal),是指sip内线呼叫外线,因此目标为E1路线,即Dial的目标为ss7链路
源码程序、驱动等编译安装最后都是使用sudo(root权限),因

此在执行asterisk时,最好使用sudo执行,否则可能会出现程序启动报错,不能执行的问题
5.使用场景:
主机A上注册SIP终端号码9901
主机B上注册SIP终端号码9802
9901呼叫9802,成功
9802呼叫9901,成功

相关文档
最新文档