Linux Call Router
В мире OpenSource всегда есть альтернатива, за это я и люблю его. После обновления сервера на OpenSuse 11.1 отказался устанавливаться драйвер mISDN, необходимый для работы chan_misdn. Быстрое обследование показало, что в ядро 2.6.27 были включены драйверы mISDN, но версии v2, которые не поддерживаются в chan_misdn, уже давно застывшем в развитии.
Несмотря на сложность ситуации работа ISDN линии была восстановлена в течении часа. Выхода было три:
- Установить ядро 2.6.26. Был отброшен, потому как проблемы нужно решать, а не убегать от них
- Дождаться пока в chan_dahdi добавят поддержку бюджетных однопортовых ISDN BRI карт. Не было столько времени, случится это, по моим прогнозам, не в этом году.
- Найти замену, работающую с mISDN v2
Такая замена была найдена в лице проекта Linux Call Router, ранее носившем название ISDN4Linux. Стоит сказать, что этот проект встречался мне 3-4 года назад, но тогда опыта не хватило чтобы оценить его предназначение.
1) Скачиваем последний исходный код (на момент написания - версия 1.5). Не забываем библиотеку mISDNuser (в ядре только модули, без поддержки NT режима). Если ядро младше 2.6.27, то и mISDN понадобится юному джедаю. Отсутствие в системе mISDNuser явилось для меня первой проблемой, потребовавшей некоторого времени для выяснения.
2) Устанавливаем по очереди mISDN и mISDNuser. Вполне традиционные make;make install;
3) Выполняем ./configure в папке с lcr. Далее традиционно make;make install; Если Астериск (я собирал с 1.6.1.1) установлен в обычном месте, то будет собран и установлен chan_lcr.so
4) Поздравляю, вы в одном шаге от использования chan_lcr. Далее все по инструкции с сайта проекта.
Генерируем скрипты запуска для mISDN:
server-voip:/usr/src/voip/lcr # ./genrc This program generates a script, which is used to start/stop/restart mISDN driver. Please select card only once. Mode and options are given by LCR. Select driver for cards: (1) HFC PCI (Cologne Chip) (2) HFC-4S / HFC-8S / HFC-E1 (Cologne Chip) (3) HFC-S USB (Cologne Chip) Select driver number[1-n] (or enter 'done'): 1 Select another driver for cards: (1) HFC PCI (Cologne Chip) (2) HFC-4S / HFC-8S / HFC-E1 (Cologne Chip) (3) HFC-S USB (Cologne Chip) Select driver number[1-n] (or enter 'done'): done Enter LAW audio mode. For a-LAW (default), just enter 0. For u-LAW enter 1. [0..n | 0xn]: 0 Enter debugging flags of mISDN core. For no debug, just enter 0. [0..n | 0xn]: 0 Enter debugging flags of cards. For no debug, just enter 0. [0..n | 0xn]: 0 Enter dsp debugging flags of driver. For no debug, just enter 0. [0..n | 0xn]: 0 Where do you like to load the modules from, enter 0 for default, 1 for '/usr/local/lcr/modules/' or the full path. [0 | 1 | <path>]: 0 Finally tell me where to write the mISDN rc file. Enter the name 'mISDN' for current directory. You may want to say '/usr/local/lcr/mISDN' or '/etc/rc.d/mISDN' : /etc/rc.d/mISDN File '/etc/rc.d/mISDN' is written to the current directory.
Выполняем ряд команд чтобы сделать init-скрипт mISDN пригодным для запуска, запускаем и проверяем что все модули загрузились:
chmod +x /etc/rc.d/mISDN /etc/rc.d/mISDN lsmod |grep mISDN
Запрашиваем информацию о настроенных портах и присвоенным им номерам:
server-voip:/usr/src/voip/lcr # lcr query ** LCR Version 1.5 -> Using 'misdn_info' Found 1 port Port 0 'hfc-pci.1': TE/NT-mode BRI S/T (for phone lines & phones) 2 B-channels: 1-2
Все конфигурационные файлы LCR содержатся после установки в /usr/local/lcr.
Для того чтобы Asterisk запущенный из под непривилегированного пользователя могу работать с сокетом, созданным LCR указываем опцию socketrights 0777 в options.conf. Чтобы направить все вызовы приходящие на ISDN в Астериск (и отказаться от всех функций LCR) в routing.conf записываем:
[main] : remote application=asterisk context=isdn
Вписываем единственный BRI интерфейс в настройки (interface.conf):
[Ext] portnum 0
Остается запустить LCR и загрузить модуль канала chan_lcr в Астериск:
asterisk -rx "module load chan_lcr.so" lcr fork
Теперь все входящие вызовы будут попадать в контекст isdn и экстенжн равный вызываемому MSN. Исходящие вызовы делаются посредством простой строки набора LCR/Ext/84951234567. Никаких дополнительных конфигурационных файлов в /etc/asterisk не требуется.