DAHDI คืออะไร ใช้งานยังไง
โพสต์แล้ว: 10 ม.ค. 2010 22:21
DAHDI ย่อมาจาก Digium Asterisk Hardware Device Interface เป็นเหมือนกับไดร์เวอร์ที่ทำให้ Asterisk รู้จักและทำงานร่วมกับการ์ดอินเตอร์เฟสต่างๆได้ เช่น การ์ด FXS, FXO โดยที่ Asterisk จะมองการ์ดเหล่านี้ (ผ่านทาง DAHDI) ว่าเป็น Channel
เดิมทีใช้ชื่อว่า "ZapTel" แต่บังเอิญชื่อนี้ไปตรงกับชื่อบริษัท "ZapTel" ซึ่งทำธุรกิจทางด้านให้บริการบัตรโทรศัพท์ บริษัทนี้โวยวายมาที่บริษัท Digium ว่าเวลาค้นหาคำว่า "Zaptel cards" ในอินเตอร์เน็ตเจอแต่ ZapTel ที่เกี่ยวข้องกับ Asterisk ทั้งนั้น ไม่เจอสินค้าของบริษัทเลย ทาง Digium ก็เลยเปลี่ยนชื่อ Zaptel ไปเป็น DAHDI เมื่อวันที่ 18 พฤษภาคม 2550 DAHDI เวอร์ชั่นแรกคือ 2.0.0
ตั้งแต่ Asterisk 1.6.0 ขึ้นไปรองรับเฉพาะ DAHDI เท่านั้นนะครับ มันไม่รองรับ Zaptel ถ้าเดิมเราใช้ Asterisk 1.4 + Zaptel แล้วอัพเกรดเป็น Asterisk 1.6 + DAHDI ก็ยังคงใช้ Dial Plan เดิมได้นะครับ แต่ก็อาจจะมีปัญหาเล็กน้อยซึ่งทาง Digium ก็สามารถแก้ปัญหาไปได้ระดับหนึ่งแล้ว ผมเชื่อว่าถ้า Dial Plan ไม่ซับซ้อนมากก็ไม่ต้องกังวลอะไร
การเปลี่ยนชื่อจาก Zaptel เป็น DAHDI ส่งผลให้ชื่อไฟล์ต่างๆที่เกี่ยวข้องกับ Zaptel ก็เปลี่ยนไปด้วย ดังนี้ครับ
/etc/zaptel.conf --> /etc/dahdi/system.conf
/etc/asterisk/zapata.conf --> /etc/asterisk/chan_dahdi.conf
ไฟล์คอนฟิกของ DAHDI
/etc/dahdi/system.conf
/etc/asterisk/chan_dahdi.conf
/etc/dahdi/init.conf (ใช้แทนไฟล์ /etc/sysconfig/zaptel) เป็นไฟล์คอนฟิก (ที่อยู่ในรูปแบบของ shell script) ของ dahdi init.d script ค่าที่อยู่ไฟล์นี้ใช้จะถูกใช้แทนค่าดีฟอลท์ที่เซ็ตจาก init.d script ทุกค่าเป็นออปชั่น (ไม่จำเป็นต้องคอนฟิกบอก TELEPHONY=no) แต่อย่างไรก็ตาม Asterisk จะไม่ได้อ่านตัวแปร MODULES จากไฟล์นี้แล้ว เพราะมันไปอ่านจากไฟล์ /etc/dahdi/modules แทน
ไฟล์ /etc/sysconfig/zaptel ถูกแยกเป็น 2 ไฟล์ คือ /etc/dahdi/modules ซึ่งจะบอก DAHDI ว่าให้โหลดโมดูลอะไรบ้าง และ /etc/modprobe.d/dahdi จะบอกว่าโหลดโมดูลด้วยออปชั่นอะไรบ้าง
DAHDI แบ่งออกเป็น 2 ส่วนคือ DAHDI-Linux และ DAHDI-Tools ดังนี้
1 DAHDI-LINUX
1.1 โมดูลทั่วไป
ตอนที่เราคอมไพล์ dahdi-linux นะครับ จะมีไฟล์ .ko ติดตั้งอยู่ในไดเร็คตอรี่ของ Linux Kernel โมดูลเหล่านี้ได้แก่
zaptel.ko --> dahdi.ko
ztd-eth.ko --> dahdi_dynamic_eth.ko
ztd-loc.ko --> dahdi_dynamic_loc.ko
ztdummy.ko --> dahdi_dummy.ko
ztdynamic.ko --> dahdi_dynamic.ko
zttranscode.ko --> dahdi_transcode.ko
รายชื่อโมดูลที่จะถูกโหลดจะอยู่ในไฟล์ /etc/dahdi/modules
1.2 โมดูล Software Echo Canceller
Echo Canceller คือส่วนที่จะทำหน้าที่กำจัดเสียงสะท้อนกลับเวลาคุยโทรศัพท์ ถ้าในระหว่างที่เราคุยโทรศัพท์เราได้ยินเสียงของเราเองย้อนกลับเข้ามานั่นแสดงว่าเกิดเสียงสะท้อนนะครับ Asterisk รองรับ Echo Canceller อยู่ 2 ประเภทครับ คือแบบ Software (ใช้โปรแกรมหรือโค๊ดโปรแกรมช่วย) และแบบ Hardware (มีอยู่บนการ์ดอินเตอร์เฟสเลย) โดยที่ Asterisk มีแบบ Software Echo Canceller มาให้ในตัวแล้วนะครับ รอให้เราเปิดให้งานเท่านั้น
Software และ Hardware Echo Canceller ต่างกันตรงที่แบบ Software ใช้ CPU ของเครื่องคอมพิวเตอร์เป็นตัวประมวลผล ซึ่งว่ากันว่าจะทำให้ CPU โหลดพอสมควร ยิ่งมีคอลมากก็ยิ่งโหลดมากขึ้น ส่วนแบบ Hardware นั้นนะครับทางผู้ผลิตการ์ดอินเตอร์เฟสได้ใส่ Echo Canceller ไว้บนตัวการ์ดเลย ทำให้ Asterisk ไม่ต้องรับภาระตรงนี้ ดังนั้นถ้าเราใช้การ์ดที่มี Echo Canceller ในตัวก็ให้ปิด Echo Canceller บน Asterisk ด้วยนะครับ อย่าลืมหล่ะ
ตอนที่ติดตั้ง dahdi-linux เราไม่ต้องระบุว่าจะใช้ Software Echo Canceller แบบใด ซึ่งมีทั้งหมด 4 แบบคือ MG2, KB1, SEC และ SEC2 ทั้ง 4 แบบจะถูกคอมไพล์สร้างเป็นโมดูลที่สามารถโหลดได้
เราสามารถคอนฟิกเลือก Echo Canceller ได้โดยใช้ยูติลิตี้ "dahdi_cfg" เราควรใช้ Echo Canceller เสมอนะครับ เว้นแต่ว่าใช้การ์ดอินเตอร์เฟสที่มี Echo Canceller อยู่ในตัวแล้ว และดีฟอลท์ในไฟล์ system.conf ไม่ได้อินาเบิล Echo Canceller ไว้นะครับ (เพราะมี # อยู่หน้าบรรทัด) เราต้องอินาเบิลขึ้นมาใช้งานเอง
/etc/dahdi/genconf_parameters (แทนไฟล์ zapconf และ genzaptelconf) เป็นไฟล์คอนฟิกเพื่อปรับแต่งพารามิเตอร์แบบละเอียดสำหรับยูติลิตี้ dahdi_genconf
2 DAHDI Tools
เป็นคำสั่งหรือยูติลิตี้ที่เกี่ยวข้องกับ DAHDI มีดังต่อไปนี้ครับ
ztcfg --> dahdi_cfg
เป็น DAHDI Configurator โดยอาศัยข้อมูลในไฟล์ /etc/dahdi/system.com
zapconf --> dahdi_genconf
สร้างไฟล์ /etc/dahdi/system.conf ดังนั้นมันจะเป็นการดีที่เราจะไม่ไปแก้ไขไฟล์ /etc/dahdi/system.conf ใช้ /etc/dahdi/genconf_parameters เพื่อกำหนดแอ๊คชั่น
dahdi_hardware
แสดงรายชื่อของการ์ด DAHDI ที่ดีเทคได้ในเครื่อง
ztmonitor --> dahdi_monitor
มอนิเตอร์ระดับสัญญาณบน Analog channel ยอมให้เราบันทึกเสียงได้ คำสั่งคือ
dahdi_monitor <channel num> [-vv] -m -o -p -l limit -s FILE -S FILE
เช่น dahdi_monitor 1 -vv
ไฟล์เสียงที่อัดได้มีฟอร์แม๊ตแบ 8 KHz, 16 Bit signed ใช้โปรแกรม sox แปลงให้เป็นไฟล์ .wav ใช้คำสั่ง sox -r 8000 -s -w file.raw file.wav
ztscan --> dahdi_scan
สร้างรายชื่อทั้งหมดของ DAHDI channels พร้อมแสดงรายละเอียดสั้นๆ
zttest --> dahdi_test
วัดความแม่นยำในการทำงานของภาค Digital Signal Processing ของการ์ด FXS/FXO
zttool --> dahdi_tool
เช็คว่าขณะนี้การ์ดอินเตอร์เฟสกำลังทำอะไรอยู่
ztspeed --> dahdi_speed
การ์ดอินเตอร์เฟสหรือฮาร์ดแวร์ของ DAHDI
ปัจจุบันมีผู้ผลิตการ์ดอินเตอร์เฟสหลายบริษัท ซึ่งเข้ากันได้กับ DAHDI โดยไม่ต้องลงไดร์เวอร์แต่อย่างใด ตัวอย่างผู้ผลิตการ์ดเหล่านี้ได้แก่
Digium
Sangoma
Xorcom Asteribank
Rhino
OpenVox
นอกจาก Asterisk ที่รองรับการ์ดอินเตอร์เฟสเหล่านี้แล้ว ยังมีโปรแกรมอื่นที่รองรับการ์ดด้วยนะครับ ซึ่งเป็นโปรเจ็คเกี่ยวกับ VoIP เช่นเดียวกัน ได้แก่ CallWeaver และ YATE
เดิมทีใช้ชื่อว่า "ZapTel" แต่บังเอิญชื่อนี้ไปตรงกับชื่อบริษัท "ZapTel" ซึ่งทำธุรกิจทางด้านให้บริการบัตรโทรศัพท์ บริษัทนี้โวยวายมาที่บริษัท Digium ว่าเวลาค้นหาคำว่า "Zaptel cards" ในอินเตอร์เน็ตเจอแต่ ZapTel ที่เกี่ยวข้องกับ Asterisk ทั้งนั้น ไม่เจอสินค้าของบริษัทเลย ทาง Digium ก็เลยเปลี่ยนชื่อ Zaptel ไปเป็น DAHDI เมื่อวันที่ 18 พฤษภาคม 2550 DAHDI เวอร์ชั่นแรกคือ 2.0.0
ตั้งแต่ Asterisk 1.6.0 ขึ้นไปรองรับเฉพาะ DAHDI เท่านั้นนะครับ มันไม่รองรับ Zaptel ถ้าเดิมเราใช้ Asterisk 1.4 + Zaptel แล้วอัพเกรดเป็น Asterisk 1.6 + DAHDI ก็ยังคงใช้ Dial Plan เดิมได้นะครับ แต่ก็อาจจะมีปัญหาเล็กน้อยซึ่งทาง Digium ก็สามารถแก้ปัญหาไปได้ระดับหนึ่งแล้ว ผมเชื่อว่าถ้า Dial Plan ไม่ซับซ้อนมากก็ไม่ต้องกังวลอะไร
การเปลี่ยนชื่อจาก Zaptel เป็น DAHDI ส่งผลให้ชื่อไฟล์ต่างๆที่เกี่ยวข้องกับ Zaptel ก็เปลี่ยนไปด้วย ดังนี้ครับ
/etc/zaptel.conf --> /etc/dahdi/system.conf
/etc/asterisk/zapata.conf --> /etc/asterisk/chan_dahdi.conf
ไฟล์คอนฟิกของ DAHDI
/etc/dahdi/system.conf
/etc/asterisk/chan_dahdi.conf
/etc/dahdi/init.conf (ใช้แทนไฟล์ /etc/sysconfig/zaptel) เป็นไฟล์คอนฟิก (ที่อยู่ในรูปแบบของ shell script) ของ dahdi init.d script ค่าที่อยู่ไฟล์นี้ใช้จะถูกใช้แทนค่าดีฟอลท์ที่เซ็ตจาก init.d script ทุกค่าเป็นออปชั่น (ไม่จำเป็นต้องคอนฟิกบอก TELEPHONY=no) แต่อย่างไรก็ตาม Asterisk จะไม่ได้อ่านตัวแปร MODULES จากไฟล์นี้แล้ว เพราะมันไปอ่านจากไฟล์ /etc/dahdi/modules แทน
ไฟล์ /etc/sysconfig/zaptel ถูกแยกเป็น 2 ไฟล์ คือ /etc/dahdi/modules ซึ่งจะบอก DAHDI ว่าให้โหลดโมดูลอะไรบ้าง และ /etc/modprobe.d/dahdi จะบอกว่าโหลดโมดูลด้วยออปชั่นอะไรบ้าง
DAHDI แบ่งออกเป็น 2 ส่วนคือ DAHDI-Linux และ DAHDI-Tools ดังนี้
1 DAHDI-LINUX
1.1 โมดูลทั่วไป
ตอนที่เราคอมไพล์ dahdi-linux นะครับ จะมีไฟล์ .ko ติดตั้งอยู่ในไดเร็คตอรี่ของ Linux Kernel โมดูลเหล่านี้ได้แก่
zaptel.ko --> dahdi.ko
ztd-eth.ko --> dahdi_dynamic_eth.ko
ztd-loc.ko --> dahdi_dynamic_loc.ko
ztdummy.ko --> dahdi_dummy.ko
ztdynamic.ko --> dahdi_dynamic.ko
zttranscode.ko --> dahdi_transcode.ko
รายชื่อโมดูลที่จะถูกโหลดจะอยู่ในไฟล์ /etc/dahdi/modules
1.2 โมดูล Software Echo Canceller
Echo Canceller คือส่วนที่จะทำหน้าที่กำจัดเสียงสะท้อนกลับเวลาคุยโทรศัพท์ ถ้าในระหว่างที่เราคุยโทรศัพท์เราได้ยินเสียงของเราเองย้อนกลับเข้ามานั่นแสดงว่าเกิดเสียงสะท้อนนะครับ Asterisk รองรับ Echo Canceller อยู่ 2 ประเภทครับ คือแบบ Software (ใช้โปรแกรมหรือโค๊ดโปรแกรมช่วย) และแบบ Hardware (มีอยู่บนการ์ดอินเตอร์เฟสเลย) โดยที่ Asterisk มีแบบ Software Echo Canceller มาให้ในตัวแล้วนะครับ รอให้เราเปิดให้งานเท่านั้น
Software และ Hardware Echo Canceller ต่างกันตรงที่แบบ Software ใช้ CPU ของเครื่องคอมพิวเตอร์เป็นตัวประมวลผล ซึ่งว่ากันว่าจะทำให้ CPU โหลดพอสมควร ยิ่งมีคอลมากก็ยิ่งโหลดมากขึ้น ส่วนแบบ Hardware นั้นนะครับทางผู้ผลิตการ์ดอินเตอร์เฟสได้ใส่ Echo Canceller ไว้บนตัวการ์ดเลย ทำให้ Asterisk ไม่ต้องรับภาระตรงนี้ ดังนั้นถ้าเราใช้การ์ดที่มี Echo Canceller ในตัวก็ให้ปิด Echo Canceller บน Asterisk ด้วยนะครับ อย่าลืมหล่ะ
ตอนที่ติดตั้ง dahdi-linux เราไม่ต้องระบุว่าจะใช้ Software Echo Canceller แบบใด ซึ่งมีทั้งหมด 4 แบบคือ MG2, KB1, SEC และ SEC2 ทั้ง 4 แบบจะถูกคอมไพล์สร้างเป็นโมดูลที่สามารถโหลดได้
เราสามารถคอนฟิกเลือก Echo Canceller ได้โดยใช้ยูติลิตี้ "dahdi_cfg" เราควรใช้ Echo Canceller เสมอนะครับ เว้นแต่ว่าใช้การ์ดอินเตอร์เฟสที่มี Echo Canceller อยู่ในตัวแล้ว และดีฟอลท์ในไฟล์ system.conf ไม่ได้อินาเบิล Echo Canceller ไว้นะครับ (เพราะมี # อยู่หน้าบรรทัด) เราต้องอินาเบิลขึ้นมาใช้งานเอง
/etc/dahdi/genconf_parameters (แทนไฟล์ zapconf และ genzaptelconf) เป็นไฟล์คอนฟิกเพื่อปรับแต่งพารามิเตอร์แบบละเอียดสำหรับยูติลิตี้ dahdi_genconf
2 DAHDI Tools
เป็นคำสั่งหรือยูติลิตี้ที่เกี่ยวข้องกับ DAHDI มีดังต่อไปนี้ครับ
ztcfg --> dahdi_cfg
เป็น DAHDI Configurator โดยอาศัยข้อมูลในไฟล์ /etc/dahdi/system.com
zapconf --> dahdi_genconf
สร้างไฟล์ /etc/dahdi/system.conf ดังนั้นมันจะเป็นการดีที่เราจะไม่ไปแก้ไขไฟล์ /etc/dahdi/system.conf ใช้ /etc/dahdi/genconf_parameters เพื่อกำหนดแอ๊คชั่น
dahdi_hardware
แสดงรายชื่อของการ์ด DAHDI ที่ดีเทคได้ในเครื่อง
ztmonitor --> dahdi_monitor
มอนิเตอร์ระดับสัญญาณบน Analog channel ยอมให้เราบันทึกเสียงได้ คำสั่งคือ
dahdi_monitor <channel num> [-vv] -m -o -p -l limit -s FILE -S FILE
เช่น dahdi_monitor 1 -vv
ไฟล์เสียงที่อัดได้มีฟอร์แม๊ตแบ 8 KHz, 16 Bit signed ใช้โปรแกรม sox แปลงให้เป็นไฟล์ .wav ใช้คำสั่ง sox -r 8000 -s -w file.raw file.wav
ztscan --> dahdi_scan
สร้างรายชื่อทั้งหมดของ DAHDI channels พร้อมแสดงรายละเอียดสั้นๆ
zttest --> dahdi_test
วัดความแม่นยำในการทำงานของภาค Digital Signal Processing ของการ์ด FXS/FXO
zttool --> dahdi_tool
เช็คว่าขณะนี้การ์ดอินเตอร์เฟสกำลังทำอะไรอยู่
ztspeed --> dahdi_speed
การ์ดอินเตอร์เฟสหรือฮาร์ดแวร์ของ DAHDI
ปัจจุบันมีผู้ผลิตการ์ดอินเตอร์เฟสหลายบริษัท ซึ่งเข้ากันได้กับ DAHDI โดยไม่ต้องลงไดร์เวอร์แต่อย่างใด ตัวอย่างผู้ผลิตการ์ดเหล่านี้ได้แก่
Digium
Sangoma
Xorcom Asteribank
Rhino
OpenVox
นอกจาก Asterisk ที่รองรับการ์ดอินเตอร์เฟสเหล่านี้แล้ว ยังมีโปรแกรมอื่นที่รองรับการ์ดด้วยนะครับ ซึ่งเป็นโปรเจ็คเกี่ยวกับ VoIP เช่นเดียวกัน ได้แก่ CallWeaver และ YATE