Вопросу подключения Asterisk по ОКС-7 посвящена отдельная статья, которая в настойщем материале расширена процедурой проверки модулей.
Процедура проверки модулей Asterisk
Для проверки готовности модулей к сборке запускаем make menuselect
Убеждаемся, что драйвер chan_dahdi готов к сборке (система автоматического конфигурирования нашла библиотеки и файлы заголовков для dahdi, библиотек libpri и libss7).
Выполняем компиляцию и установку asterisk для телефонии:
make
sudo -u root make install
sudo -u root make samples
Последняя команда установит пример конфигурации в каталог /etc/asterisk.
Теперь нам необходимо отредактировать /etc/asterisk/chan_dahdi.conf для определения в нем параметров сетевого уровня для создаваемых подключений.
[trunkgroups]
; Оставляем эту секцию пустой, если только каналы EuroISDN
; не используют схему сборки потоков в транки с указанием идентификатора потока
; в сообщении. Для ОКС-7 эта секция вообще не используется.
[channels]
; Общие параметры для наших EuroISDN-подключений
echocancel=no
faxdetect=incoming
; Контекст приземления входящих вызовов из ISDN-портов
; В нашем случае он один для всех физических портов,
; но можно использовать и раздельные контексты.
context=landing
Конфигурируем порты EuroISDN:
switchtype=euroisdn
;
; Некоторые специфичные для ISDN параметры опущены, ибо их описание есть
; тема отдельной статьи
;
; Зависит от удаленной системы. Если она не распознает ситуацию, когда
; вы «положили трубку», попробуйте заменить значение на inband (извращенцы!)
priindication = outofband
; CLIP обрабатывать будем
usecallerid=yes
; Да и calling presentation будем посылать на исходящих вызовах. Вдруг кто захочет
; скрыть свой АОН от определения? ;)))
usecallingpres=yes
; Наш downlink, использующий все 30 таймслотов для передачи трафика.
; Физически подключается на первый порт второй потоковой платы.
; Для него мы выступаем как сеть (NET), он для нас является CPE.
; Передача вызова ему производится командой
; Dial(DAHDI/g5/вызываемый_номер)
group=5
callgroup=5
signalling=pri_net
channel => 125-139
channel => 141-155
; Наш downlink, использующий только 10 таймслотов для передачи трафика.
; Физически подключается на второй порт второй потоковой платы.
; Передача вызова ему производится командой
; Dial(DAHDI/g6/вызываемый_номер)
group=6
callgroup=6
signalling=pri_net
; У клиента используется 10 таймслотов
channel => 156-165
Итак, мы имеем 4 физических потока E1, собранных в один пучок, управляемый по сигнализации ОКС-7. В каждом из физических потоков имеется один сигнальный линк (стандартное расположение 16-й таймслот), остальные линки используются для передачи данных. Потоки в пучек собраны начиная с младшего, CIC нумеруются последовательно, начиная с 1. Соответствующий кусок из chan_dahdi.conf:
; Тип сигнализации
signalling=ss7
; Дальше идут общие для различных типов сигнализации параметры
; Врядли вам потребуется их изменять
usecallerid=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=no
transfer=no
canpark=no
cancallforward=no
echocancel=no
echocancelwhenbridged=no
; Контекст, на который будут приземляться вызовы, пришедшие от удаленной системы
context=landing
; Логическая группа, используемая для отправки вызова на этот пучек. Т.е.
; команда вызова будет иметь вид
; Dial(DAHDI/g1/номер_назначения)
group=1
callgroup=1
;pickupgroup=1
; В Европе (и в России) используется вариант ITU
ss7type = itu
; SS7 Called Nature of Address Indicator
; Для подключений местного/зонового уровня
; можно задать явно ss7_called_nai=National
; Но мы оставляем значение по умолчанию (оно также закомментировано):
;ss7_called_nai=dynamic
; Префиксы также указывать не будем. Мне с ними проще разобраться в диалплане
;ss7_internationalprefix = 00
;ss7_nationalprefix = 0
;ss7_subscriberprefix =
;ss7_unknownprefix =
; На входящих вызовах будем посылать ACM сразу, как только начнется обработка
; диалплана приземления. Т.е. удаленная сторона поймет, что вызов был хоть куда-то
; доставлен. Разрешать этот параметр или нет — дело вкуса.
;ss7_explicitacm=yes
; Автоматическая передача ACM на входящих вызовах, когда он был перенаправлен
; asterisk-ом на другой канал и на этом другом канале возникло состояние вызова
; или ответа. Влияет на передачу early media от стороннего канала на вызывной.
; Либо всегда надо будет вызывать Proceeding() перед Dial().
;ss7_autoacm=yes
; При инициализации драйвера канала считаем все CIC заблокированными (т. е.
; недоступными для использования). Их разблокировка произойдет автоматически
; после завершения логического тестирования канала связи.
;ss7_initialhwblo=yes
; Управление эходавом. Я оставляю по умолчанию.
;ss7_use_echocontrol=yes
;ss7_default_echocontrol=yes
; Определение пучка (linkset)
linkset = 1
; Для первого потока в пучке SLC=0 (для каждого последующего увеличивается на 1)
; Этот параметр зависит от конфигурации удаленной стороны
slc=0
; Наш pointcode
pointcode = 651
; pointcode удаленной стороны
; Этот параметр зависит от конфигурации удаленной стороны
adjpointcode = 599
; Врядли вы будете использовать STP-маршрутизацию, поэтому конечный pointcode
; совпадает с pointcode удаленной стороны. Но может иметь другое значение, если
; удаленная сторона не является конечной точкой.
; Этот параметр зависит от конфигурации удаленной стороны
defaultdpc = 599
; Значение NI для MTP3. Скорее всего это будет либо national, либо national_spare
; Этот параметр зависит от конфигурации удаленной стороны
networkindicator=national_spare
; Указываем сигнальный канал для 1-го потока
sigchan = 16
; Обязательно определяем таймеры! Их необходимо определять
; после каждого нового сигнального канала
#include ss7.timers
; Определяем соответствие CIC и физическим каналам
cicbeginswith = 1
channel = 1-15
cicbeginswith = 17
channel = 17-31
; По аналогии определяем оставшиеся 3 физических порта, входящих в пучек
slc=1
pointcode = 650
adjpointcode = 599
defaultdpc = 599
networkindicator=national_spare
sigchan = 47
#include ss7.timers
cicbeginswith = 33
channel = 32-46
cicbeginswith = 49
channel = 48-62
slc=2
pointcode = 650
adjpointcode = 599
defaultdpc = 599
networkindicator=national_spare
sigchan = 78
#include ss7.timers
cicbeginswith = 65
channel = 63-77
cicbeginswith = 81
channel = 79-93
slc=3
pointcode = 650
adjpointcode = 599
defaultdpc = 599
networkindicator=national_spare
sigchan = 109
#include ss7.timers
cicbeginswith = 97
channel = 94-108
cicbeginswith = 113
channel = 110-124
Осталось только составить диалплан в extensions.conf и запустить asterisk в консольном режиме:
asterisk -vvvc