Поддержка SS7 (ОКС7) протокола в Астериск
Администратор,
Описание
На данный момент существуют следующие варианты подключения Астериск к сети с использованием ОКС7
- LIBISUP. Замена LIBPRI от Cosini technologies, доступная по коммерческой лицензии Digium.
- Использование внешнего SS7 конвертера для подключения Asterisk к ОКС7 сети.
- (SMG & ss7box), коммерческий продукт от Sangoma.
- chan_ss7. Open Source ss7 реализация от Sifira A/S.
-
libss7. "Родная" реализация SS7 для Asterisk как libpri.Итого, первые три способа требуют покупки оборудования/лицензий, а последние два являются открытыми и бесплатными.
После изучения libpri и chan_ss7 был сделан вывод о "сырости" первого и готовности второго к коммерческому использованию. Далее речь пойдет о chan_ss7.
Драйвер SS7 chan_ss7 от Sifira
Данный драйвер был разработан для внутреннего использования и был выложен в открытый доступ по лицензии GPL в надежде на дальнейшее развитие активными участниками сообщества.
Основные функциональные возможности
- Compatible with Asterisk 1.2.x, 1.4.x and 1.6.x.
- MTP2 (Q.703) implementation
- MTP3 (Q.704) implementation (subset).
- ISUP (Q.76x) implementation (mostly complete).
- Supports Dahdi/Zaptel compatible digital interfaces, e.g. Redfone, Sangoma, Digium or Openvox
- Facilities for protocol analysis using e.g. wireshark
- Supports high call volumes
- Supports multiple linksets with different OPCs and DPCs
- Supports linksets with multiple links.
- Supports load sharing and MTP changeover.
- Supports multiple hosts (cluster) configuration with load sharing and failover.
- Flexible Dial command syntax to allow routing to different linksets.
Требования
Общие
Для работы chan_ss7 треубется работающий сервер Астериск с E1 платой Digium TE134 и драйвером Dahdi. Драйвер протестирован с оборудованием Digium, asterisk 1.4.10 и chan_ss7-0.9. Лучше всего использовать ядро версии 2.6 в связи с улучшенным временем реакции (lower latency), что позволяет избегать недогрузок буферов ОКС7 линка (MTP2 протокол является протоколом реального времени). Однако возможно запускать решение и на более старом оборудовании путем увеличения значения NUM_ZAP_BUF в mtp.c.
Zaptel
chan_ss7 работает с сигнализацией напрямую, поэтому в zaptel.conf под b-каналы нужно отдавать все таймслоты. Пример zaptel.conf:
Обратите внимание на отсутствующие декларации dchan!
Ядро
Часто современные Linux дистрибутивы поставляются с активированными режимами вытесняющей многозадачности (preemption), предназанченными для desktop систем для улучшенной интерактивности. Ядро должно быть пересобрано со следующими настройками:
Конфигурационный файл chan_ss7
Конфигурационный файл для канала chan_ss7 называется ss7.conf и должен находится в папке с остальными конфигурационными файлами Астериск (обычно /etc/asterisk).
Конфигурационный файл содержит несколько секций.
- linkset-имя - параметры набора линков (linkset).
- link-имя - параметры линков.
- host-имя - в данной секции определяются хосты (это позволяет иметь единый файл конфигурации для разных серверов, каждый будет использовать свои настройки).
- cluster - определяет настройки кластера.
Секция Linkset
- hunting_policy. Алгоритм выбора каналов для исходящих звонков. Желательно выбирать подходящий алгоритм с обих сторон ОКС7 линка для минимизации риска коллизий (когда обе стороны пытаются сделать исходящий звонок по тому же самому каналу одновременно). Возможные варинты:
-
odd_lru- осуществлять исходящие звонки по нечетным CICs, по каждой группе выбирать последний использованный (odd least reacently used);
-
even_mru- алгоритм по умолчанию. Использовать четные CICs и выбирать последний использованный в каждой группе (even least recently used);
-
seq_lth- последовательный перебор CICs снизу вверх (sequential low-to-high);
-
seq_htl- последовательный перебор CICs вверху внизу (sequential high-to-low).
- enable_st. Использовать end-of-pulsing (ST) для определения полноты номера (завершенности).
- use_connect. Отвечать на входящий звонок сообщением CON вместо ACM и ANM.
- context. Название контекста для входящих звонков. По умолчанию default.
- language. Язык астериск для входящих звонков из данного линксета. По умолчанию пустая строка
Пример конфигурационного файла ss7.conf для Digium TE207P
В данном примере используются следующие настройки ОКС7:
- 2 потока E1 по карте Digium TE210P.
- Сигнализация на первом таймслоте на обоих потоках.
- firstcic=1
- opc=1, dpc=5003 (decimal)
Часто задаваемые вопросы
В вышепреведенном примере 2 E1 потока, на первом потоке сигнализация на первом канале, на втором потоке сигнализации нет, все таймслоты (31) отданы под голосовые каналы.
В диалплане Asterisk выбор линка для исходящего звонка осуществляется при помощи названия линксета, например Dial(SS7/A/${EXTEN}).
Ниже представлены конфигурационные файлы серверов.
Проблемы
Excessive poll delay
Это мистическая проблема, которую пытаются отловить наверняка. Один из авторов chan_ss7 Anders Baekgaard (ab at sifira.dk) попросил высылать ему письмо с темой "chan_ss7 statistics". Anders попросил каждого, независимо от его опыта, помочь решить данную проблему и выслать ему содержимое команд:
Write buffer full on CIC=4 (wrote only 0 of 160), audio lost.