В мире 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:
12345678910111213141516171819202122232425262728293031323334353637383940414243 server-voip:/usr/src/voip/lcr # ./genrcThis program generates a script, which is used to start/stop/restart mISDNdriver. 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'): 1Select 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'): doneEnter LAW audio mode. For a-LAW (default), just enter 0. For u-LAW enter 1.[0..n | 0xn]: 0Enter debugging flags of mISDN core. For no debug, just enter 0.[0..n | 0xn]: 0Enter debugging flags of cards. For no debug, just enter 0.[0..n | 0xn]: 0Enter dsp debugging flags of driver. For no debug, just enter 0.[0..n | 0xn]: 0Where 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>]: 0Finally 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/mISDNFile '/etc/rc.d/mISDN' is written to the current directory.
Выполняем ряд команд чтобы сделать init-скрипт mISDN пригодным для запуска, запускаем и проверяем что все модули загрузились:
123 chmod +x /etc/rc.d/mISDN/etc/rc.d/mISDNlsmod |grep mISDN
Запрашиваем информацию о настроенных портах и присвоенным им номерам:
123456789 server-voip:/usr/src/voip/lcr # lcr query** LCR Version 1.5-> Using 'misdn_info'Found 1 portPort 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 записываем:
12 [main]: remote application=asterisk context=isdn
Вписываем единственный BRI интерфейс в настройки (interface.conf):
12 [Ext]portnum 0
Остается запустить LCR и загрузить модуль канала chan_lcr в Астериск:
12 asterisk -rx "module load chan_lcr.so"lcr fork
Теперь все входящие вызовы будут попадать в контекст isdn и экстенжн равный вызываемому MSN. Исходящие вызовы делаются посредством простой строки набора LCR/Ext/84951234567. Никаких дополнительных конфигурационных файлов в /etc/asterisk не требуется.