Поиск по этому блогу

07.04.2011

Применение call-block

Рассмотрю пример, когда на телефонной станции в голосовой шлюз cisco через E1 отправляется 100 номеров маской 20*, где * - любое количество символов. Логично, что если какой-то абонент на телефоне ошибочно наберет вместо четырехзначного трехзначный номер, либо не успеет по таймауту набрать последнюю цифру четырехзначного номера, то в поток Е1 будет смаршрутизирован звонок на трехзначный номер.
В случае, если на шлюзе cisco прописан dial-peer без четкого шаблона следующего вида, то шлюз и станция будут занимать все свободные на момент звонка таймслоты в попытках переадресовать звонок друг другу, так как dial-peer'ов с трехзначными номерами на шлюзе нет.
dial-peer voice 50 pots
description default
huntstop
preference 10
destination-pattern .T
progress_ind alert enable 8
direct-inward-dial
port 0/0/0:15
forward-digits all
Занятые таймслоты будут являться причиной отказа. Следует проверять статистику по isdn кодам на наличие ошибок no circuit (34), no resource (47), normal unspecified (31).


Варианта решения такой проблемы два. Это отказ от dial-peer'ов c .T или применение функционала call-block. Рассмотрим пример применения последнего:
voice translation-rule 100
rule 1 reject /^...$/
voice translation-profile reject
translate called 100

dial-peer voice 50 pots
call-block translation-profile incoming reject
call-block disconnect-cause incoming unassigned-number
Теперь все звонки на трехзначные номера будут возвращаться с ошибкой unassigned-number.
Проверяется включением отладки и чисткой счетчиков кодов isdn:
voip-gw#debug isdn q931
voip-gw#clear h323 gateway cause-codes
Делается тестовый звонок со станции. В логах запись вида:
Bearer Capability i = 0x8090A3
Standard = CCITT
Transfer Capability = Speech
Transfer Mode = Circuit
Transfer Rate = 64 kbit/s
Channel ID i = 0xA9831B
Exclusive, Channel 27
Facility i = 0x9FAA068001008201008B0100A11402020100020100800B412E562E20506574726F76
Progress Ind i = 0x8183 - Origination address is non-ISDN
Calling Party Number i = 0x0980, '2000'
Plan:Private, Type:Unknown
Called Party Number i = 0x89, '300'
Plan:Private, Type:Unknown
Sending Complete
ISDN Se0/0/0:15 Q931: TX -> RELEASE_COMP pd = 8 callref = 0xD546
Cause i = 0x8081 - Unallocated/unassigned number
В статистике увеличился счетчик:
voip-gw#sh h323 gateway cause-codes

CAUSE CODE STATISTICS AT 5d17h

DISC CAUSE CODE FROM OTHER PEER FROM H323 PEER
1 unassigned number (1) 1 0
16 normal call clearing ( 35 7
17 user busy (17) 1 0
19 no user answer (19) 0 2

Но это еще не все. Двухзначная маска на станции позволяет звонить на двухзначные номера. В логах звонок с занятием таймслотов выглядит многократный набор одного и того же номера с вероятным появлением в отладке ошибок вида:
**ERROR**: CCPRI_Go: call id 0x245B event 0x65 No ccb Source->HOST
Поэтому правило приводится к следующему виду:
voice translation-rule 100
rule 1 reject /^...$/
rule 2 reject /^..$/