เชื่อมต่อ Asterisk + DAHDI กับ E1 MFC/R2 ตอนที่ 1

Asterisk Opensource IP Pbx

เชื่อมต่อ Asterisk + DAHDI กับ E1 MFC/R2 ตอนที่ 1

โพสต์โดย voip4share » 24 ก.พ. 2010 10:22

บทความนี้จะแนะนำการเชื่อมต่อ Asterisk กับ E1 แบบ R2

บทความเกี่ยวกับ E1 MFC/R2

1. ติดตั้งการ์ด E1
ติดตั้งการ์ด E1 เข้าไปในสล๊อตที่ว่างอยู่ นี้เป็นรายละเอียดการติดตั้งการ์ด E1 ครับ แม้จะพูดถึง ISDN PRI ก็ใช้กับกรณีของ MFC/R2 ได้ครับ

2. ติดตั้ง dahdi-linux
ตัดตั้งแบบที่ให้รองรับ OSLEC ด้วยนะครับ

3. ติดตั้ง dahdi-tools
ติดตั้ง dahdi-tools

4. ติดตั้ง OpenR2
http://www.libopenr2.org/
ดาวน์โหลด http://code.google.com/p/openr2/downloads/list

โค้ด: เลือกทั้งหมด
cd /tmp
wget http://openr2.googlecode.com/files/openr2-1.2.0.tar.gz
tar xzvf openr2-1.2.0.tar.gz -C /usr/src
cd /usr/src/openr2-1.2.0
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var

โปรแกรมจะเช็ค DAHDI ที่เราติดตั้งในเครื่อง ถ้าเจอจะแสดงข้อความแบบนี้

checking dahdi/user.h usability... yes
checking dahdi/user.h presence... yes
checking for dahdi/user.h... yes

คอมไพล์ต่อครับด้วยคำสั่ง
โค้ด: เลือกทั้งหมด
make
make install


ไฟล์ที่เกี่ยวข้อง
/etc/r2proto.conf
/etc/r2test.cof
/usr/share/man/man5/r2test.conf.5
/usr/share/man/man8/r2test.conf.8
/usr/bin/r2test

ไดเร็คตอรี่
/usr/include/openr2

5. ติดตั้ง Asterisk 1.6.2.2 (หรือคอมไพล์ใหม่)
ติดตั้ง Asterisk
สังเกตุในขณะที่ใช้คำสั่ง ./configure นะครับ มันจะดีเท็ค OpenR2 เองครับ แบบนี้

checking for openr2_chan_new in -lopenr2... yes
checking openr2.h usability... yes
checking openr2.h presence... yes
checking for openr2.h... yes


หลังจากใช้คำสั่ง make install แล้วให้เช็คว่า chan_dahdi.so มันรู้จักไลบรารี่ openr2 แล้วหรือยัง ใช้คำสั่งนี้
โค้ด: เลือกทั้งหมด
ldd /usr/lib/asterisk/modules/chan_dahdi.so | grep openr2

ถ้าเวอร์คจะต้องเห็นเป็นแบบนี้ครับ
โค้ด: เลือกทั้งหมด
libopenr2.so.1 => /usr/lib/libopenr2.so.1 (0x00c1b000)

ลองเข้า Asterisk Console แล้วพิมพ์คำสั่ง mfcr2 show version ดูครับ

6. สร้างไฟล์ system.conf
รันคำสั่งต่อไปนี้ครับ
โค้ด: เลือกทั้งหมด
dahd_genconf


7. แก้ไขไฟล์คอนฟิก /etc/dahdi/system.conf
โค้ด: เลือกทั้งหมด
span=1,1,0,cas,hdb3
cas=1-15:1101
dchan=16
cas=17-31:1101
echocanceller=oslec,1-15,17-31

loadzone        = us
defaultzone     = us


รายละเอียดแต่ละบรรทัดเป็นดังนี้
span=<span num>,<timing source>,<line build out (LBO)>,<framing>,<coding>[,crc4|yellow[,yellow]]


<span num> ใส่ตัวเลข Span Number หาได้จากชื่อไฟล์ในไดเรคตอรี่ /proc/dahdi เช่น 1
<timing source> เป็นตัวเลขที่กำหนดแหล่งของสัญญาณ Clock ใส่ 0 ถ้าให้พอร์ต E1 จ่าย Clock หรือใส่ 1 ถ้าให้พอร์ต E1 รับ Clock และใช้เป็น first priority clock ให้การ์ด หรือใส่ 2 เพื่อใช้เป็น secondary priority clock หรือใส่ 3 เพื่อเป็น third priority clock หรือใส่ 4 เพื่อเป็น forth priority clock ปกติเวลาเราต่อกับ PSTN ทางนั้นจะจ่าย clock ออกมา
ถ้าต่อกับ PBX เราต้องให้พอร์ต E1 จ่าย Clock ให้ PBX กรณีนี้ก็เซ็ต timing source = 0 และดังนั้นบรรทัด span จะเป็นแบบนี้ span=1,0,0,cas,hdb3
<line build out> เป็นจำนวนเต็มมีค่าระหว่าง 0 ถึง 7 กำหนด transmission level ของ Span
<framing> และ <coding> เป็น Low Level Signaling และ Formating ของ E1 Frame สำหรับกรณีของ R2 ให้ใช้ cas และ hdb3 ตามลำดับ
ส่วน crc4 และ yellow กรณีของ E1 R2 นั้นไม่ต้องครับ
หลังจากคอนฟิก span เสร็จแล้ว เราก็มาคอนฟิกแต่ละแชนแนลของ span ด้วยค่า signaling ที่เหมาะสม ในกรณีนี้ cas span จะมีทุกแชนแนลเป็น cas signaling (หรือเรียกว่า user signaling)
cas=x-y:1101
ซึ่งหมายความว่า range ของแชนแนลตั้งแต่ x ถึง y จะรายงาน CAS bits ค่า :1101 คือตำแหน่งเริ่มต้นของ CAS bits (หรือเรียกว่า ABCD bits) ซึ่ง R2 ใช้เพื่อส่งสัญญาณสถานะของ line เช่น answer, hangup เป็นต้น ใน R2 ค่า 1101 หมายถึง Blocked ซึ่งหมายความว่าเมื่อฮาร์ดแวร์สตาร์ทขึ้นมาครั้งแรกมันยังไม่พร้อมจะให้บริการรับคอล (ซึ่ง Asterisk หรือโปรแกรมอื่นที่ต้องการใช้งาน R2 จะเปลี่ยนค่านี้ให้เป็น 1001 เอง ซึ่งหมายถึง IDLE หรือพร้อมจะใช้งาน)
dchan=16
แชนแนลที่ 16 (หรือเรียกให้มันถูกต้องจริงๆต้องเรียกว่า ไทม์สล๊อตที่ 16) ถูกใช้เพื่อรับส่ง Multiplexed CAS bit สำหรับไทม์สล๊อตอื่นบนลิ้งค์ E1 เดียวกัน แต่จากประสบการณ์นะครับไม่ว่าเราจะเซ็ต dchan=16 หรือไม่ก็ตาม การรับส่งบิตเหล่านี้ก็ยังทำงานได้ดีอยู่ แต่การเซ็ตไว้จะช่วยให้เราไม่สับสนตอนที่เขียนบรรทัด cas

8. ไฟล์ /etc/asterisk/chan_dahdi.conf

[trunkgroups]

[channels]
context=from-pstn
usecallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes

signalling=mfcr2
mfcr2_variant=itu
mfcr2_get_ani_first=no
mfcr2_max_ani=20
mfcr2_max_dnis=20
mfcr2_category=national_subscriber
mfcr2_logdir=span1
mfcr2_call_files=yes
loglevel=error,warning,debug,notice,cas,mf
mfcr2_logging=all

group=0
callgroup=0
pickupgroup=0
channel => 1-15
channel => 17-31

9. สร้าง Dial Plan

[from-internal]
exten => _0X.,1,Dial(DAHDI/g0/${EXTEN})
exten => _0X.,n,Hangup()

exten => 100,1,Dial(SIP/100,30)
exten => 100,n,Hangup()

exten => 101,1,Dial(SIP/100,30)
exten => 101,n,Hangup()

[from-pstn]
exten => s,1,Goto(from-internal,100,1)
exten => s,n,Hangup()

10. ทดสอบโทรเข้าออก
สายภายในโทรออกสายนอก กดเบอร์ปลายทางได้เลย สายนอกโทรเข้ามาสายใน Asterisk จะโอนไปเบอร์ Extension 100

โปรดติดตาม Asterisk,E1 MFC/R2 ตอนที่ 2
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 2 ท่าน

cron