Linux Call Router

26 июля 2009, 18:40
Linux Call Router

Linux Call Router

В мире OpenSource всегда есть альтернатива, за это я и люблю его. После обновления сервера на OpenSuse 11.1 отказался устанавливаться драйвер mISDN, необходимый для работы chan_misdn. Быстрое обследование показало, что в ядро 2.6.27 были включены драйверы mISDN, но версии v2, которые не поддерживаются в chan_misdn, уже давно застывшем в развитии.

Несмотря на сложность ситуации работа ISDN линии была восстановлена в течении часа. Выхода было три:

  1. Установить ядро 2.6.26. Был отброшен, потому как проблемы нужно решать, а не убегать от них
  2. Дождаться пока в chan_dahdi добавят поддержку бюджетных однопортовых ISDN BRI карт. Не было столько времени, случится это, по моим прогнозам, не в этом году.
  3. Найти замену, работающую с 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 не требуется.