เทคนิคการ Loop พอร์ต E1 เพื่อทดสอบ

Asterisk Opensource IP Pbx

เทคนิคการ Loop พอร์ต E1 เพื่อทดสอบ

โพสต์โดย nuiz » 25 พ.ย. 2011 16:47

สวัสดีครับ ผมมีเทคนิคง่ายๆในการทดสอบการ์ด E1 มาฝากครับ เอาไว้ทดสอบว่าพอร์ต E1 บนการ์ดมีปัญหาหรือเปล่า การ์ดที่ผมจะใช้ทดสอบนี้มี E1 อยู่ 2 พอร์ตนะครับ สำหรับการ์ดที่มีพอร์ต E1 เดียวผมจะนำเทคนิคการทดสอบมานำเสนอต่อไป วันนี้เอาแบบ 2 E1 ก่อน

โดยผมจะเทสแบบ PRI

1. ทำสาย Loop
เป็นหัว RJ-45 ทั้ง 2 ด้าน ใช้ Lan แบบธรรมดาๆนี่เองครับ แต่ให้เข้าหัวใหม่ ตัวอย่างสายเป็นแบบในรูปนี้

รูปภาพ

เข้าหัวแบบนี้

โค้ด: เลือกทั้งหมด
1 <---> 4
2 <---> 5
4 <---> 1
5 <---> 2


แล้วเสียบเข้าไปที่พอร์ต E1 ทั้ง 2 พอร์ต รอจนไฟ Sync เขียว

รูปภาพ

2. คอนฟิกไฟล์ /etc/dahdi/system.conf
คอนฟิกให้พอร์ตหนึ่งจ่าย Clock และอีกพอร์ตรับ Clock โดยผมจะให้ Port 1 จ่าย Clock นะครับ ส่วน Port 2 รับ Clock

# Span 1: TE4/0/1 "T4XXP (PCI) Card 0 Span 1" (MASTER)
span=1,0,0,ccs,hdb3
# termtype: te
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31

# Span 2: TE4/0/2 "T4XXP (PCI) Card 0 Span 2"
span=2,2,0,ccs,hdb3
# termtype: te
bchan=32-46,48-62
dchan=47
echocanceller=oslec,32-46,48-62

# Global data

loadzone = th
defaultzone = th

สังเกตุตรง Span 1 นะครับ ผมเซ็ตแบบนี้

span=1,0,0,ccs,hdb3

เลข 0 (ที่ผมทำเป็นสีแดงไว้) หมายถึงจ่าย Clock หรือเรียกว่า พอร์ต 1 นี้เป็น Master

ส่วน Span 2 (หรือพอร์ตที่ 2) ผมปล่อยตามดีฟอลท์แบบนี้

span=2,2,0,ccs,hdb3

ตัวเลข 2 ที่ผมทำเป็นสีแดงไว้ หมายถึงรับ Clock จากพอร์ต 2 (ตัวมันเอง) มาใช้เป็น Reference หรือเราเรียกว่าพอร์ต 2 นี้เป็น Slave

เซฟไฟล์แล้วห้ามรันคำสั่ง "dahdi_genconf" นะครับ ไม่งั้นคอนฟิกจะกลับมาเป็นเหมือนเดิมอีก ไว้เลิกเทสแล้วค่อยรันคำสั่งนี้

3. คอนฟิกไฟล์ /etc/asterisk/dahdi-channels.conf

; Span 1: TE4/0/1 "T4XXP (PCI) Card 0 Span 1" (MASTER)
group=0,11
context=from-pstn
switchtype = euroisdn
signalling = pri_net
channel => 1-15,17-31
context = default
group = 63

; Span 2: TE4/0/2 "T4XXP (PCI) Card 0 Span 2"
group=1,12
context=from-pstn
switchtype = euroisdn
signalling = pri_cpe
channel => 32-46,48-62
context = default
group = 63

แก้บรรทัด signalling ของ Span 1 ให้เป็น pri_net ครับ คือให้มันทำหน้าที่เป็น Network side ส่วน Span 2 ปล่อยเป็น CPE (User) side ตามดีฟอลท์ อย่าลืมแก้ group ของ Span 2 ให้อยู่คนละ Group กับ Span 1 ด้วยนะครับ

เช่นกันครับเซฟไฟล์แล้วห้ามรันคำสั่ง "dahdi_genconf" จนกว่าจะเลิกเทสแล้ว

4. รีสตาร์ท dahdi และรีโหลด dahdi
รันสองคำสั่งนี้

โค้ด: เลือกทั้งหมด
service dahdi restart
asterisk -rx "dahdi restart"


เสร็จแล้วครับ ต่อไปก็ทดสอบการใช้งาน โดยคอนฟิกให้โทรออกทาง E1 หนึ่ง มันก็จะ Loop กลับมายังอีก E1 หนึ่ง

Messages ที่เกิดขึ้นระหว่างโทรออก (และรับเข้า)
ระหว่างเทสโทรออก ผมแค๊บเจอร์ debug ดู ISDN messages ก็เห็นแบบนี้

< Protocol Discriminator: Q.931 (8) len=42
< TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent from originator)
< Message Type: SETUP (5)
< [04 03 80 90 a3]
< Bearer Capability (len= 5) [ Ext: 1 Q.931 Std: 0 Info transfer capability: Speech (0)
< Ext: 1 Trans mode/rate: 64kbps, circuit-mode (16)
< User information layer 1: A-Law (35)
< [18 03 a9 83 81]
< Channel ID (len= 5) [ Ext: 1 IntID: Implicit Other(PRI) Spare: 0 Exclusive Dchan: 0
< ChanSel: As indicated in following octets
< Ext: 1 Coding: 0 Number Specified Channel Type: 3
< Ext: 1 Channel: 1 Type: CPE]
< [28 03 62 6b 6b]
< Display (len= 3) [ bkk ]
< [6c 0a 21 80 30 32 30 30 30 32 30 30]
< Calling Number (len=12) [ Ext: 0 TON: National Number (2) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1)
< Presentation: Presentation permitted, user number not screened (0) '02000200' ]
< [70 07 80 31 32 33 34 35 36]
< Called Number (len= 9) [ Ext: 1 TON: Unknown Number Type (0) NPI: Unknown Number Plan (0) '123456' ]
< [a1]
< Sending Complete (len= 1)
-- Making new call for cref 3
Received message for call 0xa7a2030 on 0xa77a2b8 TEI/SAPI 0/0, call->pri is 0xa77a2b8 TEI/SAPI 0/0
-- Processing Q.931 Call Setup
-- Processing IE 4 (cs0, Bearer Capability)
-- Processing IE 24 (cs0, Channel Identification)
-- Processing IE 40 (cs0, Display)
-- Processing IE 108 (cs0, Calling Party Number)
-- Processing IE 112 (cs0, Called Party Number)
-- Processing IE 161 (cs0, Sending Complete)
q931.c:6871 post_handle_q931_message: Call 3 enters state 6 (Call Present). Hold state: Idle
q931.c:4524 q931_call_proceeding: Call 3 enters state 9 (Incoming Call Proceeding). Hold state: Idle

> DL-DATA request
> Protocol Discriminator: Q.931 (8) len=10
> TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent to originator)
> Message Type: CALL PROCEEDING (2)
TEI=0 Transmitting N(S)=6, window is open V(A)=6 K=7

> Protocol Discriminator: Q.931 (8) len=10
> TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent to originator)
> Message Type: CALL PROCEEDING (2)
> [18 03 a9 83 81]
> Channel ID (len= 5) [ Ext: 1 IntID: Implicit Other(PRI) Spare: 0 Exclusive Dchan: 0
> ChanSel: As indicated in following octets
> Ext: 1 Coding: 0 Number Specified Channel Type: 3
> Ext: 1 Channel: 1 Type: CPE]

q931.c:4683 q931_connect: Call 3 enters state 8 (Connect Request). Hold state: Idle

> DL-DATA request
> Protocol Discriminator: Q.931 (8) len=14
> TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent to originator)
> Message Type: CONNECT (7)
TEI=0 Transmitting N(S)=7, window is open V(A)=7 K=7

> Protocol Discriminator: Q.931 (8) len=14
> TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent to originator)
> Message Type: CONNECT (7)
> [18 03 a9 83 81]
> Channel ID (len= 5) [ Ext: 1 IntID: Implicit Other(PRI) Spare: 0 Exclusive Dchan: 0
> ChanSel: As indicated in following octets
> Ext: 1 Coding: 0 Number Specified Channel Type: 3
> Ext: 1 Channel: 1 Type: CPE]
> [1e 02 81 82]
> Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
> Ext: 1 Progress Description: Called equipment is non-ISDN. (2) ]

< Protocol Discriminator: Q.931 (8) len=5
< TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent from originator)
< Message Type: CONNECT ACKNOWLEDGE (15)
Received message for call 0xa7a2030 on 0xa77a2b8 TEI/SAPI 0/0, call->pri is 0xa77a2b8 TEI/SAPI 0/0
q931.c:7024 post_handle_q931_message: Call 3 enters state 10 (Active). Hold state: Idle


< Protocol Discriminator: Q.931 (8) len=9
< TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent from originator)
< Message Type: DISCONNECT (69)
< [08 02 81 90]
< Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
< Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]
Received message for call 0xa7a2030 on 0xa77a2b8 TEI/SAPI 0/0, call->pri is 0xa77a2b8 TEI/SAPI 0/0
-- Processing IE 8 (cs0, Cause)
-- Found active call: 0xa7a2030 cref:3
q931.c:7201 post_handle_q931_message: Call 3 enters state 12 (Disconnect Indication). Hold state: Idle

q931_hangup: other hangup
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Disconnect Indication, peerstate Disconnect Request, hold-state Idle
q931.c:4721 q931_release: Call 3 enters state 19 (Release Request). Hold state: Idle

> DL-DATA request
> Protocol Discriminator: Q.931 (8) len=9
> TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent to originator)
> Message Type: RELEASE (77)
TEI=0 Transmitting N(S)=8, window is open V(A)=8 K=7

> Protocol Discriminator: Q.931 (8) len=9
> TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent to originator)
> Message Type: RELEASE (77)
> [08 02 81 90]
> Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
> Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]
-- Hungup 'DAHDI/32-1'

< Protocol Discriminator: Q.931 (8) len=9
< TEI=0 Call Ref: len= 2 (reference 3/0x3) (Sent from originator)
< Message Type: RELEASE COMPLETE (90)
< [08 02 81 90]
< Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
< Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]
Received message for call 0xa7a2030 on 0xa77a2b8 TEI/SAPI 0/0, call->pri is 0xa77a2b8 TEI/SAPI 0/0
-- Processing IE 8 (cs0, Cause)
q931.c:7083 post_handle_q931_message: Call 3 enters state 0 (Null). Hold state: Idle
q931_hangup: other hangup
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null, hold-state Idle
NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null, hold-state Idle

โดยสัญลักษณ์ < หมายถึงส่งออก ส่วน > หมายถึงรับเข้า


คำสั่งอื่นๆเพิ่มเติมเอาไว้ดูสถานะ

โค้ด: เลือกทั้งหมด
asterisk -rx "pri show span 1"

Primary D-channel: 16
Status: Provisioned, Up, Active
Switchtype: EuroISDN
Type: Network
Overlap Dial: 0
Logical Channel Mapping: 0
Timer and counter settings:
N200: 3
N202: 3
K: 7
T200: 1000
T202: 10000
T203: 10000
T303: 4000
T305: 30000
T308: 4000
T309: 6000
T313: 4000
T-HOLD: 4000
T-RETRIEVE: 4000
T-RESPONSE: 4000
Overlap Recv: No

โค้ด: เลือกทั้งหมด
asterisk -rx "pri show span 2"

Primary D-channel: 47
Status: Provisioned, Up, Active
Switchtype: EuroISDN
Type: CPE
Overlap Dial: 0
Logical Channel Mapping: 0
Timer and counter settings:
N200: 3
N202: 3
K: 7
T200: 1000
T202: 10000
T203: 10000
T303: 4000
T305: 30000
T308: 4000
T309: 6000
T313: 4000
T-HOLD: 4000
T-RETRIEVE: 4000
T-RESPONSE: 4000
Overlap Recv: No

สถานะตอน E1 Down
ผมลองถอนสาย Loop ออก พอร์ต E1 จะ Down เข้า Asterisk Console แล้วพิมพ์คำสั่ง pri set debug on span 2 ก็จะเห็นข้อความแบบนี้

TEI=0 MDL-ERROR (I): T200 expired N200 times sending RR/RNR in state 8(Timer recovery)
TEI=0 Sending SABME
Changing from state 8(Timer recovery) to 5(Awaiting establishment)
TEI=0 Sending SABME
TEI=0 Sending SABME
TEI=0 Sending SABME
TEI=0 MDL-ERROR (G): T200 expired N200 times sending SABME in state 5(Awaiting establishment)
Changing from state 5(Awaiting establishment) to 4(TEI assigned)
q931.c:7700 q931_dl_indication: link is DOWN
TEI=0 Sending SABME
Changing from state 4(TEI assigned) to 5(Awaiting establishment)
TEI=0 Sending SABME
TEI=0 Sending SABME
TEI=0 Sending SABME
TEI=0 MDL-ERROR (G): T200 expired N200 times sending SABME in state 5(Awaiting establishment)
Changing from state 5(Awaiting establishment) to 4(TEI assigned)
q931.c:7700 q931_dl_indication: link is DOWN
TEI=0 Sending SABME
Changing from state 4(TEI assigned) to 5(Awaiting establishment)
TEI=0 Sending SABME
TEI=0 Sending SABME
TEI=0 Sending SABME

เกิดจากการไม่ได้รับ Messages ภายในระยะเวลาที่กำหนด ซึ่งทางฝั่ง Network และ User (CPE) จะมีการตรวจเช็คหรือที่เรียกว่า Handchecking กันอยู่เป็นช่วงๆ เพื่อเช็คว่าอีกฝั่งสถานะเป็นยังไง ดาวน์ไปหรือเปล่า โดยที่ค่า T200 เป็น Timer ตัวหนึ่งของ ISDN PRI มีค่าดีฟอลท์คือ 1000 ms หรือ 1 วินาที ดูค่าพารามิเตอร์ตัวอื่นๆของ PRI ได้จากคำสั่ง pri show span ครับ

หมายเหตุ... พารามิเตอร์เกี่ยวกับ Timing ของ PRI แก้ไขได้ทั้งหมดครับ ทำในไฟล์ /etc/asterisk/chan_dahdi.conf


บทความที่เกี่ยวข้อง
การติดตั้งและใช้งานการ์ด 2 E1 บน Elastix
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

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

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

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

cron