บทความตอนที่ 1 เกี่ยวกับ E1 Hardware
การติดตั้ง Driver ของการ์ด E1
1. ติดตั้ง libpri
เป็นไดร์เวอร์ของการ์ด E1/T1/J1 การ์ด E1 จากผู้ผลิตส่วนใหญ่สามารถใช้ไดร์เวอร์ตัวนี้ได้ ยกเว้นของยี่ห้อ Sangoma อาจจต้องใช้ไดร์เวอร์ของ Sangoma เอง ซึ่งเรียกว่า Wanpipe for Asterisk
2. ติดตั้ง Zaptel หรือ DAHDI
เลือกเอาอย่างใดอย่างหนึ่ง แนะนำว่า Asterisk 1.4 ลงมาให้ติดตั้ง Zaptel ส่วน Asterisk 1.6 ขึ้นไปให้ติดตั้ง DAHDI และนี่เป็นวิธีการติดตั้ง DAHDI ร่วมกับ OSLEC - Line Echo Canceller
3. ติดตั้ง Asterisk
วิธีการติดตั้ง Asterisk 1.6.2.0
4. หาค่า Span Numbers
Span Number ก็คือหมายเลขพอร์ตของ E1 ซึ่งเวลาเราจะใช้งานพอร์ตเราต้องระบุค่า Span นี้ด้วยเพราะจะได้รู้ว่าจะใช้งานพอร์ตไหน ค่านี้จะไม่เป็นปัญหาสำหรับเราเลยถ้าในเครื่องมีการ์ด E1 การ์ดเดียว (ไม่มีการ์ด E1 หรือการ์ด Analog อื่นอีก) และมี E1 แค่พอร์ตเดียว ค่าๆนี้คนที่กำหนดจะไม่ใช่ Asterisk นะครับ แต่จะเป็นที่ซอฟแวร์หรือเฟิร์มแวร์ของการ์ดเองที่จะตั้งค่า Span Number ถ้ามีการ์ดเดียวแต่มีหลายพอร์ต ลำดับของ Span Number จะเรียงตามลำดับพอร์ต แล้วก็มีค่าต่อๆกันไป เช่น มีการ์ด E1 อยู่ 4 พอร์ต มีหมายเลขพอร์ตเป็น 1-4 และทั้งเครื่องก็ติดตั้งการ์ดเดียว ก็จะได้ว่า Span Number 1, 2, 3 และ 4
การ์ดรุ่นเก่าๆบนการ์ดจะมีสวิตซ์หรือจั๊มเปอร์ให้เราตั้งค่า Span Number ซึ่งถ้าติดตั้งการ์ดมากกว่า 1 การ์ดบนเครื่องเดียวกัน อย่าให้ค่า Span Number ซ้ำกันนะครับ ส่วนการ์ดรุ่นใหม่ๆเขาจะฝังค่านี้ไว้ในเฟิร์มแวร์บนการ์ดมาให้แล้วครับ เราแค่หาให้ได้ว่าพอร์ตไหนเป็นพอร์ตที่ 1 หรือ 2 หรือ 3 หรือ 4 ก็หาไม่ยากครับดูจากตัวเลขที่เขาพิมพ์ไว้บนการ์ดหรือดูว่าพอร์ตไหนอยู่บนสุด พอร์ตนั้นก็จะเป็นพอร์ต 1 หน่ะครับ เรียงกันลงมา
คำสั่ง dahdi_genconf มันจะดีเท็ค Span Number ของการ์ดและพอร์ตที่มันพบ แล้วนำมาไรท์ลงไปในไฟล์ /etc/dahdi/system.conf เราแทบไม่ต้องทำอะไรไฟล์นี้เลยครับ ยกเว้นไปตั้งค่าเกี่ยวกับการรับ (slave) หรือการจ่าย (master) สัญญาณคล๊อค
5. หาค่าพารามิเตอร์เหล่านี้
ต้องคุยกับทางฝั่งชุมสายหรือตู้สาขา
- เป็น E1 แบบไหน R2, PRI หรือว่า Q.Sig
- ใช้ Line Encoding แบบไหน HDB3 หรือ AMI โดยมากจะเป็นแบบ HDB3
- ใช้ Framing แบบไหน no-CRC4 หรือว่า CRC4 โดยมากมักจะเป็น CRC4
- เซ็ต Clocking ยังไง ใครเป็นคนจ่าย (Clock Source Internal) ใครเป็นคนรับ (Clock Source Line) ปกติเวลาเราไปต่อกับ E1 ของชุมสายโทรศัพท์ ทางชุมสายจะเป็นคนจ่าย Clock มาให้ แต่เวลาไปต่อกับตู้ PABX ปกติเราก็ให้พอร์ต E1 บนการ์ดที่เราต่อกับ E1 ของตู้เป็นคนจ่าย Clock ให้ตู้ครับ
- Line Build Out หรือค่าชดเชยความสูญเสียในสายที่ต่อระหว่างพอร์ต E1 และชุมสาย ค่านี้ใส่เป็น 0 ก็ได้ครับ เพราะถามเจ้าหน้าที่ชุมสายเขาอาจจะไม่รู้
- เป็น PRI Network หรือ PRI User ถ้าต่อกับชุมสาย ฝั่งเราจะเป็น User และชุมสายจะเป็น Network แต่ถ้าต่อกับตู้ PBX เราจะเป็น Network ส่วน PBX จะเป็น User ครับ
- Switch Type เป็นแบบไหน เป็น Net5 หรือไม่ บ้านเราเป็น PRI มาตรฐาน Net5 ซึ่ง Asterisk จะเรียกมาตรฐานนี้ว่า EuroISDN ครับ
สมมติว่าจะเชื่อมต่อแบบ PRI, Line Code = HDB3, Framing = CRC4, CCS, Switch Type = Net5 (Asterisk เรียกชื่อ euroisdn แทน Net5) ให้การ์ด E1 รับ Clock จากชุมสาย เชื่อมต่อแค่ 1 E1 ดังนั้น B channel คือแชนแนลที่ 16 และ D Channel คือแชนแนลที่ 1-15 และ 17-31
6. เช็คว่าเครื่องมองเห็นการ์ด E1 หรือไม่
ใช้คำสั่ง
- โค้ด: เลือกทั้งหมด
lspci -v
ต้องเห็นประมาณนี้ครับ
02:03:0 Communication controller: Digium, Inc. Wildcard TE410P Quad-Span togglable E1/T1/J1 card 3.3v (rev 02)
7. คอนฟิก /etc/dahdi/system.conf
ไฟล์ system.conf นี้จะมีข้อมูลที่ Linux สามารถเข้ามาตรวจสอบฮาร์ดแวร์ได้ เป็น text file ที่อยู่ในไดเร็คตอรี่ /etc/dahdi ไฟล์นี้สร้างไฟล์นี้ขึ้นมาโดยใช้ทูลที่มีชื่อว่า "dahdi_genconf" ครับ ได้จากตอนที่เราติดตั้ง "dahdi-tools"
เช็คก่อนนะครับว่าใน /etc/dahdi มีไฟล์ชื่อ genconf_parameters อยู่หรือเปล่า (ปกติจะมี ถ้าไม่มีก็ให้ก๊อปมาจากซอร์สโค๊ดของ dahdi-tools เอามาใส่) ถ้าไม่มีก็ให้สร้างไฟล์เปล่าๆขึ้นมา touch /etc/dahdi/genconf_parameters เพราะคำสั่ง dahdi_genconf มันจะไปอ่านคอนฟิกเริ่มต้น จากไฟล์นี้ แล้วมันจะไรท์ข้อมูลลงไฟล์ /etc/dahdi/system.conf
สร้างไฟล์ system.conf ด้วยคำสั่งนี้
- โค้ด: เลือกทั้งหมด
dahdi_genconf
ถ้าเป็นการ์ดแบบ FXS/FXO ก็ไม่ต้องไปแก้ไขอะไรในไฟล์นี้เลยครับ แต่ถ้าเป็น E1 ต้องเข้าไปแก้ไขอีกครับ เพราะว่าคำสั่ง dahdi_genconf นี้มันไม่รู้ว่าเราจะใช้ E1 แบบไหน ใช้ Signaling เป็นอะไร
มาดูรายละเอียดในไฟล์นี้กันครับ บางอย่างทูลนี้จะทำให้ บางอย่างเราต้องทำเอง
span=<span num>,<timing source>,<line build out (lbo)>,<framing>,<coding>[,yellow alarm]
#span num เป็นหมายเลขของ Span การ์ดหนึ่งจะมีหมายเลข Span แค่เลขเดียว เริ่มต้นที่ 1 และเพิ่มค่าขึ้นทีละ 1 สำหรับการ์ดต่อไป (ถ้ามี) ค่านี้ระบบจะกำหนดค่าให้
#ตอนที่ใช้ทูล dahdi_genconf
#timing source = 0 (จ่าย clock) | 1 (รับ clock) | 2,3,4... (รับ clock และใช้เป็น secondary clock source) ถ้าพอร์ตแรกเสียก็จะใช้ clock source จากพอร์ตที่มีหมายเลขตามที่ระบุไว้แทน
# ขอขยายความ timing source เพิ่มเติมอีกนิดนึงนะครับ กรณีตั้งค่าเป็น 0 และ 1 นั้นก็ตรงไปตรงมา แต่กรณีตั้งค่าเป็น 2 หมายความว่า E1 พอร์ตนี้จะรับคล๊อกมาจากพอร์ตที่ 2 แต่ใช้เป็น Secondary ไม่ได้ใช้เป็น Primary ผมมีข้อแนะนำอย่างหนึ่งในกรณีที่การ์ดๆเดียวเป็นทั้งตัวจ่าย clock และตัวรับ clock ว่าควรใช้ clock จากแหล่งๆเดียวแล้วเอามาเป็นอ้างอิงให้กับพอร์ตอื่น ไม่ควรจ่ายหรือรับ clock แบบสะเปะสะปะ
#line build out (LBO) เป็นเลขจำนวนเต็ม เป็นค่าชดเชย Loss ที่เกิดจากขนาดของสายและระยะทางจากชุมสาย มีค่าตามตารางต่อไปนี้
# 0: 0 dB (CSU)/0-133 feet (DSX-1), 1: 133-266 feet (DSX-1), 2: 266-399 feet (DSX-1), 3: 399-533 feet (DSX-1), 4: 533-655 feet (DSX-1), 5: -7.5 dB (CSU)
# 6: -15 dB (CSU), 7: -22.5 dB (CSU) ปกติค่านี้ใส่เป็น 0 ครับ
#framing สำหรับ E1 ได้แก่ cas หรือ ccs
#coding สำหรับ E1 ได้แก่ hdb3 หรือ ami และอาจจะมีคีย์เวอร์ดใส่เพิ่มเติมด้วย เช่น crc4 เพื่อใช้งานแบบเช็ค crc4
#yellow alarm ถ้าไม่มี Channel เปิดใช้งาน การ์ดจะส่ง Yello Alarm ไปยังชุมสาย
และนี่คือไฟล์ /etc/dahdi/system.conf ครับ ซึ่งใช้ Echo Canceller แบบ OSLEC ด้วย
# Autogenerated by /usr/sbin/dahdi_genconf on Thu Jan 14 00:54:52 2010
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
# Dahdi Configuration File
#
# This file is parsed by the Dahdi Configurator, dahdi_cfg
# This file is parsed by the Dahdi Configurator, dahdi_cfg
#
# Span 1: D115P/D115E/0/1 "D115P/D115E (PCI/PCI-E) Card 0 Span 1" (MASTER)
span=1,1,0,ccs,hdb3,crc4
# termtype: te
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31
# Global data
loadzone = us
defaultzone = us
ดูบรรทัด span=1,1,0,ccs,hdb3,crc4 นะครับ บรรทัดนี้ถูกสร้างอัตโนมัติหลังจากที่เราพิมพ์คำสั่ง dahdi_genconf บรรทัดนี้หมายความว่า
port number = 1
clock = slave (1 หมายถึงรับ clock)
lbo = 0
framing = ccs
coding = hdb3
crc4 = yes
ถ้าเราต้องการให้พอร์ตนี้เป็นตัว "จ่าย clock" ต้องเซ็ตแบบนี้ครับ
span=1,0,0,ccs,hdb3,crc4
อีกตัวอย่างนึง ถ้ามีพอร์ต E1 มากกว่า 1 พอร์ต ต่อกับชุมสายโทรศัพท์ สมมติว่าต่ออยู่ 4 พอร์ตเลย เรารู้ว่าชุมสายโทรศัพท์เขาจะเป็นคนจ่าย clock มาให้ ทำไงหล่ะทีนี้เพราะคอนเซ็ปต์คือควรจะรับ clock มาจากแหล่งๆเดียวเท่านั้น (คำว่าแหล่งเดียวในที่นี้หมายถึงพอร์ตเดียวนะครับ ไม่ใช่ชุมสายเดียวแต่หลายๆพอร์ต) ไม่ยากครับ เราก็ใช้คอนเซ็ปต์ของ Primary/Secondary ยังไงหล่ะครับ ซึ่งก็คือเซ็ตให้ทุกพอร์ตรับ Clock แต่ให้มีพอร์ตเดียวเท่านั้นที่เป็น Primary ส่วนพอร์ตอื่นๆอีก 3 พอร์ตให้เป็น Secondary แบบนี้
span=1,1,0,ccs,hdb3,crc4
span=2,2,0,ccs,hdb3,crc4
span=3,3,0,ccs,hdb3,crc4
span=4,4,0,ccs,hdb3,crc4
ซึ่งคอนฟิกแบบนี้ดูเหมือนจะเป็นค่าดีฟอลท์ของการ์ดที่มีพอร์ต E1 หลายๆพอร์ต ซึ่งหมายความว่าถ้าพอร์ต 1 เจ้งไป (อาจเกิดจากสายหลุด อุปกรณ์ที่ชุมสายมีปัญหา หรือสาเหตุอื่นๆ) การ์ดนี้ก็จะใช้พอร์ตที่ 2 เป็น Primary Clock แทนครับ
เซฟไฟล์แล้วรีโหลด dahdi ใหม่
- โค้ด: เลือกทั้งหมด
service dahdi restart
8.ทดสอบ
ใช้ทูล dahdi_cfg และ dahdi_tool
- โค้ด: เลือกทั้งหมด
dahdi_cfg -vvvvv
DAHDI Tools Version - 2.2.1-rc2
DAHDI Version: 2.2.1
Echo Canceller(s): OSLEC
Configuration
======================
SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)
Channel map:
Channel 01: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 01)
Channel 02: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 02)
Channel 03: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 03)
Channel 04: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 04)
Channel 05: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 05)
Channel 06: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 06)
Channel 07: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 07)
Channel 08: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 08)
Channel 09: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 09)
Channel 10: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 10)
Channel 11: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 11)
Channel 12: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 12)
Channel 13: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 13)
Channel 14: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 14)
Channel 15: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 15)
Channel 16: D-channel (Default) (Echo Canceler: none) (Slaves: 16)
Channel 17: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 17)
Channel 18: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 18)
Channel 19: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 19)
Channel 20: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 20)
Channel 21: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 21)
Channel 22: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 22)
Channel 23: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 23)
Channel 24: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 24)
Channel 25: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 25)
Channel 26: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 26)
Channel 27: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 27)
Channel 28: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 28)
Channel 29: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 29)
Channel 30: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 30)
Channel 31: Clear channel (Default) (Echo Canceler: oslec) (Slaves: 31)
9. ไฟล์ /etc/dahdi/modules
ไฟล์นี้จะมีรายชื่อโมดูล (หรือจะเรียกว่าไดร์เวอร์ก็ได้ครับ) ที่ DAHDI จะโหลดขึ้นมาใช้งาน ให้แน่ใจว่าโมดูลการ์ด E1 จะถูกโหลดขึ้นมาชัวร์
#Digium TE110P: PCI single-port T1/E1/J1
wcte11xp
อาจต้องรีสตาร์ท DAHDI ใหม่อีกรอบ
10. คอนฟิก Asterisk ให้ใช้ DAHDI Channel
ไฟล์ /etc/asterisk/chan_dahdi.conf
ไฟล์นี้เอาไว้คอนฟิกออปชั่นของการ์ด E1 เพิ่มเติมจากในไฟล์ /etc/dahdi/system.conf
[channels]
language=en
context=from-pstn
switchtype=euroisdn
signaling=pri_cpe
group=0
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
relaxdtmf=yes
rxgain=0.0
txgain=0.0
group=1
callgroup=1
pickupgroup=1
immediate=no
cidsignalling=dtmf
cidstart=ring
pridialplan=international
prilocaldialplan=national
;Sangoma A102 port 1 [slot:1 bus:4 span: 1]
switchtype=euroisdn
context=from-internal
group=1
signalling=pri_cpe
channel => 1-15,17-31
เข้า Asterisk Console
- โค้ด: เลือกทั้งหมด
dahdi restart
reload chan_dahdi.so
module reload chan_dahdi.so
10. ตรวจสอบว่าคอนฟิก E1 ถูกต้องหรือไม่ คุยกับชุมสายได้หรือไม่
dahdi_tool
dahdi_cfg -vvvvv
11. เขียน Dialplan
- โค้ด: เลือกทั้งหมด
[from-internal]
exten => _02X.,1,Dial(DAHDI/g1,${EXTEN})
exten => _02X.,Hangup()
exten => _08X.,1,Dial(DAHDI/g1,${EXTEN})
exten => _08X.,Hangup()
เป็นตัวอย่างการโทรออกเบอร์ 02 และ 08 ครับ
12. ทดสอบโทรออก
โทรจากเบอร์ Extension ที่อยู่ใน Context [from-internal] โดยกด 02 หรือ 08 ตรงๆ
แถมกรณีมี E1 มากกว่า 1 พอร์ต
ยกตัวอย่างเช่นติดตั้งการ์ด E1 แบบ 4 พอร์ต ต้องระบุด้วยครับเรื่องของ Clocking ว่าจะให้พอร์ต E1 ไหนเป็น Primary Clock Source พอร์ตไหนเป็น Secondary Clock Source
ไฟล์ /etc/dahdi/system.conf
# Span 1: TE4/0/1 "T4XXP (PCI) Card 0 Span 1"
span=1,1,1,ccs,hdb3,crc4
# termtype: te
bchan=1-15,17-31
dchan=16
# Span 2: TE4/0/2 "T4XXP (PCI) Card 0 Span 2"
span=2,2,1,ccs,hdb3,crc4
# termtype: te
bchan=32-46,48-62
dchan=47
# Span 3: TE4/0/3 "T4XXP (PCI) Card 0 Span 3"
span=3,3,1,ccs,hdb3,crc4
# termtype: te
bchan=63-77,79-93
dchan=78
# Span 4: TE4/0/4 "T4XXP (PCI) Card 0 Span 4"
span=4,4,1,ccs,hdb3,crc4
# termtype: te
bchan=94-108,110-124
dchan=109
loadzone = us
defaultzone = us
echocanceller=oslec,1-15,17-31,32,46,48-62,63-77,79-93,94-108,110-124
ไฟล์ /etc/asterisk/chan_dahdi.conf
[channels]
language=en
context=from-pstn
switchtype=euroisdn
pridialplan=unknow
signalling=pri_cpe
usecallerid=yes
hidecallerid=no
callwaiting=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
echocanceller=yes
rxgain=0.0
txgain=0.0
group=1
callgroup=1
immediate=no
callprogress=no
callerid=asreceived
cidsignalling=dtmf
cidstart=ring
pridialplan=international
prilocaldialplan=national
#
group=1
signalling=pri_cpe
channel => 1-15,17-31
group=1
signaling=pri_cpe
channel => 32-46,48-62
group=1
signaling=pri_cpe
channel => 63-77,79-93
group=1
signaling=pri_cpe
channal => 94-108,110-124
#include dahdi-channels.conf
ไฟล์ /etc/asterisk/dahdi-channels.conf
signalling=pri_cpe
callerid=asreceived
group=0
context=from-pstn
channel => 1-15,17-31,63-77,79-93,94-108,110-124
callerid=
group=1
context=default
เข้า Asterisk Console
- โค้ด: เลือกทั้งหมด
dahdi restart
reload chan_dahdi.so
module reload chan_dahdi.so
บทความที่เกี่ยวข้อง
เทคนิคการติดตั้งการ์ด 1 E1 รุ่น TE110P บน Elastix
เทคนิคการติดตั้งการ์ด 4 E1 รุ่น TE405P บน Elastix