W tym artykule zajmiemy się kompilacją modułu chan_dahdi oraz dodamy obsługę T1/E1 w Asterisku 16 na systemie CentOS 7. Jako, że różnica pomiędzy T1 a E1 polega głównie na miejscu użytkowania (T1 – Stany Zjednoczone, Kanada, Japonia; E1 – Europa i inne kraje), dla uproszczenia w tym poście będę posługiwał się oznaczeniem E1.
Postawą poniższego materiału będzie założenie, że posiadasz już zainstalowanego Asteriska. Jeśli nie, możesz zobaczyć ten post.
Wyjdziemy też z założenia, że masz odpowiednie uprawnienia do wykonywania akcji jako root
. Jeśli nie, to przed poleceniem należy dodać "sudo"
np. "sudo yum -y install pciutils"
Spis treści
1) Czym jest łącze E1?
Łącze E1 pracuje najczęściej na zwykłej skrętce. Przepustowość wynosi 2048 kb/s, łącze pracuje w trybie pełnego dupleksu (ang. full duplex). Czas transmisji pojedynczej porcji danych (tzw. ramki) na łączu E1 jest dzielony na 32 przedziały czasowe (ang. time slot) oznaczane TS0 – TS31. Transmisja pojedynczej ramki trwa 125 μs (8000 transmisji na sekundę). W tym czasie w każdej szczelinie przesyłane jest 8 bitów informacji, stąd wynika przepustowość pojedynczego kanału (8000/s x 8 bit = 64 kb/s) i całego łącza (32 x 64 kb/s = 2048 kb/s).
W tłumaczeniu na nasze: pojedyncze łącze E1 umożliwia nam 30 jednoczesnych połączeń (dwa kanały wykorzystywane są do testów ramek HDLC). W dobie telefonii analogowej był to wysoki standard, z którego w dalszym ciągu korzysta wiele firm.
2) Sprzęt i okablowanie
Warto pamiętać, że sygnalizacja E1 / Pri / Pra / jakkolwiek by jej nie nazywać, wymaga specjalnie skrosowanego kabla, zgodnie z poniższą rozpiską lub dokumentacją dostępną np. na stronie testowanej bramy.
3) Instalacja pakietów dahdi-linux oraz dahdi-tools
Do sprawdzenia, czy poprawnie wykryto zamontowaną kartę, można użyć poniższego polecenia:
lspci
Jeśli widzisz błąd typu "lspci: command not found"
to warto doinstalować pakiet pciutils poleceniem:
yum -y install pciutils
W naszym przypadku znaleziono kontroler: „Communication controller: Digium, Inc. Wildcard TE210P/TE212P dual-span T1/E1/J1 card 3.3V (rev 02)”
Następnie pobierzemy pliki źródłowe, które wykorzystamy do komplikacji modułu chan_dahdi
.
cd /usr/src/
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/dahdi-tools-current.tar.gz
tar -zxvf dahdi-linux-current.tar.gz
tar -zxvf dahdi-tools-current.tar.gz
Zaczniemy od dahdi-linux
.
cd dahdi-linux-*
make
Jeśli widzisz błąd w stylu "You do not appear to have the sources for the 3.10.0-1160.76.1.el7.x86_64 kernel installed"
to znaczy, że trzeba doinstalować nagłówki jądra linuksa.
yum -y install kernel-devel kernel-headers
make
.
make
Następnie zainstalujemy do końca pakiet dahdi-linux
.
make install
W kolejnym kroku należy zainstalować drugi z pobranych pakietów, czyli dahdi-tools
.
cd /usr/src/dahdi-tools-*
./bootstrap.sh
./configure
Jeśli polecenie ./bootstrap.sh
generuje błąd "Generating the configure script ...
to znaczy, że trzeba doinstalować pakiet libtool i ponownie wykonać polecenie
configure.ac:82: error: possibly undefined macro: AC_PROG_LIBTOOL"./bootstrap.sh
yum -y install libtool
Z kolei polecenie ./configure
może wyświetlić "configure: error: cannot find install-sh, install.sh, or shtool in auxdir "."/auxdir"
. W takim przypadku wykonaj dodatkowo poniższe polecenia i ponownie uruchom ./configure
libtoolize
aclocal
automake --add-missing
autoconf
Po skutecznym wykonaniu ./bootstrap.sh
oraz ./configure
, możemy przejść do skompilowania pakietu.
make all
make install
make install-config
Jeśli wszystko przeszło bez błędów, to możemy od tego momentu korzystać z całego zestawu poleceń, takich jak: dahdi_cfg, dahdi_genconf, dahdi_hardware, dahdi_maint, dahdi_monitor, dahdi_registration, dahdi_scan, dahdi_span_assignments, dahdi_span_types, dahdi_speed, dahdi_test, dahdi_tools oraz dahdi_waitfor_span_assignments.
My jednak, zgodnie z założeniem, zaczniemy od automatycznego wygenerowania konfiguracji, tylko dla naszej karty.
dahdi_genconf modules
Zanim zaczniemy konfigurację należy sprawdzić na jakim użytkowniku uruchomiona jest usługa Asterisk. W naszym przypadku jest to użytkownik i grupa 'asterisk’.
Jeśli chcesz się dowiedzieć, jak zmienić użytkownika, sprawdź ten post.
Następnie należy dostosować zawartość pliku /etc/udev/rules.d/dahdi.rules
do naszych rzeczywistych ustawień. Inaczej zobaczymy błąd „Unable to open master device '/dev/dahdi/ctl'
4) Kompilacja modułu chan_dahdi.so
Skoro konfigurację już mamy gotową to pora, żeby skompilować główny moduł chan_dahdi.so
, który na tym etapie najprawdopodobniej w ogólnie nie istnieje w katalogu modułów Asteriska.
Jeśli nie posiadasz plików źródłowych, możesz pobrać je ze strony http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz a następnie rozpakować, zgodnie z tym postem.
Wystarczy tylko ponownie skompilować Asteriska i nasz moduł chan_dahdi.so
zostanie utworzony.
cd /usr/src/asterisk-*
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
make menuselect
make
make install
Jeśli w pliku /etc/asterisk/modules.conf
mamy ustawione 'autoload’ na 'yes’, to nie musimy robić nic więcej.
Jeśli ręcznie wpisujemy moduły to należy dodać:load => chan_dahdi.so
Chcemy mieć pewność, że wszystkie sterowniki oraz karty zostały poprawnie załadowane, dlatego najlepiej w tym miejscu wykonać restart serwera.
reboot
Na tym etapie mamy już moduł kanału chan_dahdi.so, ale nie posiadamy konfiguracji, czyli pliku chan_dahdi.conf.
Zalecane jest w tym miejscu utworzenie osobnych plików chan_dahdi.conf
(dla oprogramowania) oraz dahdi-channels.conf
(dla sprzętu). Chociaż oczywiście można je zmieścić w jednym pliku.
Żeby wygenerować przynajmniej część konfiguracji automatycznie wykonamy polecenie dahdi_genconf
.
dahdi_genconf -v
Jeśli najpierw wykonasz dahdi_cfg -v
to zobaczysz błąd o brakującym pliku:"line 0: Unable to open configuration file '/etc/dahdi/system.conf'"
.
Dlatego najpierw należy wykonać dahdi_genconf
z odpowiednim parametrem.
dahdi_genconf system (dla pojedynczego pliku /etc/dahdi/system.conf)
dahdi_genconf -v (dla kompletu plików konfiguracyjnych)
Warto przejrzeć wygenerować pliki i dokonać stosownych poprawek. Na przykład w pliku /etc/dahdi/system.conf
możesz chcieć zmienić strefę z 'us’ na 'pl’
Możemy teraz bez przeszkód wykonać polecenie:
dahdi_cfg -vvvvv
Od tego momentu porty na karcie powinny zacząć mrugać na czerwono.
Pozostają nam już tylko dwie sprawy.
Po pierwsze, cały czas brakuje nam pliku chan_dahdi.conf
. Jeśli tworzyłeś system zgodnie naszymi pozostałymi postami, to powinieneś mieć katalog samples
, z którego możesz skopiować ten plik.
cd /etc/asterisk/samples
cp chan_dahdi.conf /etc/asterisk
Jeśli nie posiadasz wspomnianego katalogu, możesz pobrać pojedynczy plik, bezpośrednio z repozytorium asteriska.
cd /etc/asterisk/
wget https://github.com/asterisk/asterisk/blob/master/configs/samples/chan_dahdi.conf.sample
mv chan_dahdi.conf.sample chan_dahdi.conf
Zmodyfikuj plik odpowiednio do swoich potrzeb, a na końcu dodaj linijkę #include dahdi-channels.conf
, która zaczyta nasz automatycznie wygenerowany plik konfiguracyjny.
W naszym przypadku, uruchamiamy system jako użytkownik/grupa 'asterisk’, więc zmienimy też właściciela nowo utworzonych plików.
chown asterisk:asterisk chan_dahdi.conf
chown asterisk:asterisk dahdi-channels.conf
W konsoli Asteriska (asterisk -r
) zobaczymy już nasze urządzenie.
dahdi restart
dahdi show status
W tym miejscu moglibyśmy już zakończyć nasz tutorial ….. gdybyśmy konfigurowali zwykłą kartę cyfrową.
Jednak ten post opisuje coś więcej niż kartę do ISDN. Mówimy o porcie E1. Więc niestety konsola wyrzuca nam błąd o nierozpoznanej sygnalizacji.
"ERROR[2124]: chan_dahdi.c:18579 process_dahdi: Unknown signalling method 'pri_cpe' at line 14."
Mamy też alarmy (Red Alarm) wskazujące na brak synchronizacji:"chan_dahdi.c:7518 handle_alarms: Detected alarm on channel 1: Red Alarm
-- Reconfigured channel 1, ISDN PRI signalling"
Żeby nasza karta zaczęła działać w 100%, musimy się nieco cofnąć i do naszego Asteriska dokompilować bibliotekę libpri
.
5) Dodanie libpri dla obsługi sygnalizacji E1
Pobierzmy więc i skompilujmy dodatkową bibliotekę.
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
tar -zxvf libpri-current.tar.gz
cd libpri-*
make
make install
Ponownie skompilujmy też Asteriska.
cd /usr/src/asterisk-*
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
make
make install
Tym razem polecenie "dahdi restart"
w konsoli Asteriska, nie będzie nam wyrzucać błędu o nieznanej sygnalizacji.
6) Testy konfiguracji
Jeśli posiadasz jakieś urządzenie z portem E1/T1 to możesz po prostu zacisnąć kabel według wspomnianej na początku instrukcji i sprawa będzie jasna.
Jeśli karta ma dwa porty, po podłączeniu powinny się zaświecić na zielono.
Jeśli posiadasz drugi serwer lub jakąś zewnętrzną bramę to też nie powinno być problemu z synchronizacją.
Jeśli nie posiadasz żadnego z powyższych to możesz przeprowadzić test wewnętrzny z wykorzystaniem pobranego wcześniej pakietu dahdi-tools
. W związku z tym, że test wymaga, żeby port nie był zajęty przez żadną usługę, to dodatkowo wyłączymy Asteriska.
W przeciwnym razie możemy otrzymać błąd "DAHDI_SPECIFY ioctl failed: Device or resource busy"
# wyłączenie Asteriska
systemctl stop asterisk
cd /usr/src/dahdi-tools-*
make patlooptest
# Włącz cyfrową pętlę zwrotną na span 1
dahdi_maint -s1 -l localhost
# Uruchom test na kanale 1
# Jeśli zakończy się to bez błędów, oznacza to, że poprawnie zapętlasz dane
./patlooptest 1 -t 10
# Wyłącz pętlę lokalną, aby wznowić prawidłowe działanie karty
dahdi_maint -s1 -l off
# ponowne uruchomienie usługi Asteriska
systemctl start asterisk
W trakcie testu zobaczysz, że port 1 na karcie zacznie mrugać na zielono.
I to tyle jeśli chodzi o instalację i wstępną konfigurację kart cyfrowych z obsługą kanału chan_dahdi
i biblioteki libpri
.
Powodzenia!
Jeżeli chcesz monitorować wszystko co dzieje się na Twojej centrali wypróbuj nasze autorskie oprogramowanie VOIPERO
System niedawno wystartował i teraz jest udostępniany całkowicie za darmo. Instalacja i konfiguracja zajmuje kilka minut
Przeczytaj co potrafi nasz system VOIPERO w zakresie raportowania i monitorowania na żywo systemów VoIP opartych na asterisku.