Szukaj

Konfiguracja sygnalizacji T1/E1 w Asterisku (chan_dahdi oraz libpri)

Konfiguracja sygnalizacji T1/E1 w Asterisku (chan_dahdi oraz libpri)

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

Na potrzeby testów użyjemy:

  • kontrolera Digium TE210P/TE212P
  • kabla ethernet
  • bramy Yeastar TE100 –
  • sterowników Dahdi oraz Pri (linki w dalszej części posta)

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.

https://help.yeastar.com/en/s-series/topic/pri_crossover_cable.html

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
				
			
Po instalacji należy ponownie wykonać 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 ...
configure.ac:82: error: possibly undefined macro: AC_PROG_LIBTOOL"
to znaczy, że trzeba doinstalować pakiet libtool i ponownie wykonać polecenie ./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.

Share this post

Masz pytania lub potrzebujesz oferty?

Skontaktuj się z naszym doradcą.

Popularne wpisy

Powiązane posty

Projekt wystartował!

Monitorowanie i raportowanie Twojego serwera VoIP