quinta-feira, 3 de maio de 2018

Asterisk, DAHDI e TDMoE


Há alguns anos, eu li na wiki do voip-info.org, informações sobre essa coisa bacana chamada TDMoE. TDMoE é TDM sobre Ethernet. Este driver DAHDI, é muito bacana (dahdi_dynamic_eth), fornece qualquer sinalização DAHDI via Ethernet. Então, se você precisa ter sinalização PRI entre dois servidores Asterisk na mesma rede este é o caminho. Não procure mais! Em vez de comprar cartões T1 / E1 caros, para poder falar em PRI, você pode simplesmente usar suas placas de rede, isto mesmo duas placas de rede!. O TDMoE usa sua placa de interface de rede para falar com a outra interface de rede do seu Asterisk. Para fazer isso, as duas máquinas precisam conhecer uma a outra pelos endereços MAC. Por quê? Porque o TDMoE usa seu próprio tipo de ethernet. Pacotes entre os servers passam pela ethernet via ethernet tipo 0xd00d. Dentro do quadro ethernet, encontra-se um pacote dahdi_dynamic, que por sua vez tem o packet/frame do seu padrão de sinalização escolhido.

Mas cuidado. Você deve ter hardware compatível com DAHDI em pelo menos um dos servidores Asterisk. Isso é devido ao timing, para que você possa usar o timing do cartão, para cronometrar o TDMoE. Os pacotes TDM precisam ser enviados a cada 1 ms a uma taxa muito estável. Um computador normal sem hardware extra não consegue obter 100% dos requisitos de temporização corretos dos protocolos de sinalização DAHDI por conta própria. O módulo do kernel dahdi_dummy (antigo ztdummy) pode dar a você um sinal próximo a ~99,4% (meus resultados, testando com dahdi_test -v) do que deveria ser o timing.

Nos meus resultados de testes, o TDMoE funciona bem com o dahdi_dummy, mas não tenho certeza se isso é estável com o timing. Então é melhor ter algum hardware DAHDI em algum lugar.

Antes de começarmos, preciso dizer que, de maneira alguma, acho que sou especialista em DAHDI ou TDMoE, ou que tudo que escrevo aqui está correto. Eu não me responsabilizo pelo que você faz com as informações deste post, ou a exatidão das informações aqui. Se você ver algo que está completamente errado, por favor me informe, e eu irei atualizar com a sua devida referencia este :)

Então, de repente, cheguei ao ponto em que algo como TDMoE seria muito bom de ter, e funcionou como um encanto. Mas nos 'tutoriais', quase todos usam a sinalização 'em'. Então eu pensei que poderia escrever um pouco do que você precisa fazer, e o que eu fiz para obter sinalização PRI para trabalhar através de ethernet com dahdi_dummy como fonte de tempo. Então, para configurar isso, você primeiro precisa compilar e instalar o libpri, dahdi-kernel e dahdi-tools em ambas as máquinas. E então recompile o Asterisk, para que eles obtenham suporte para DAHDI e PRI.

Depois que fiz isso, no meu server com o dahdi_dummy carregado, editei /etc/dahdi/system.conf e adicionei o seguinte:

dynamic=eth,eth1/00:00:01:00:00:00/0,31,0
echocanceller=mg2,1-15,17-31
bchan=1-15,17-31
dchan=16
alaw=1-15,17-31

Onde 00: 00: 01: 00: 00: 00 é substituído pelo endereço MAC do outro servidor, e eth1 reflete a interface de rede que eu gostaria de usar para isso. Então, em /etc/asterisk/chan_dahdi.conf, adicionei o seguinte:


[channels]
context=default
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
facilityenable=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
relaxdtmf=yes
immediate=no
 
switchtype=euroisdn
context=inbound
group=0
echocancel=yes
signalling=pri_net

Aqui você vê que eu configurei o tipo de sinalização para 'pri_net', o que significa que este será o lado da rede da sinalização pri ou Master. Vamos chamar isso de servidor pri_net. Então eu configurei tudo rodando o modprobing dahdi, modprobing dahdi_dummy, e executando dahdi_cfg -vvv.

Se tudo funcionou bem, você também deve ser capaz de fazer dahdi_test -v, e ver a precisão para estar perto de 100%. Agora você pode configurar o outro servidor. Em /etc/dahdi/system.conf neste servidor que é o Slaver, eu tinha a mesma configuração que o servidor pri_net (Master), mas aqui você coloca o endereço MAC do servidor pri_net (Master). Então o que acontece é que eles apontam um para o outro.

dynamic=eth,eth0/00:00:01:00:00:01/0,31,1
echocanceller=mg2,1-15,17-31
bchan=1-15,17-31
dchan=16
alaw=1-15,17-31

Lembre-se de alterar o endereço MAC.
Então, em /etc/asterisk/chan_dahdi.conf neste servidor, eu tive:

[channels]
context=default
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
facilityenable=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
relaxdtmf=yes
immediate=no
 
switchtype=euroisdn
context=inbound
group=0
echocancel=yes
signalling=pri_cpe
channel =>1-15,17-31

Agora aqui eu defino sinalização para ser pri_cpe (Slaver), que significa o lado do cliente da linha PRI. Agora tudo o que você precisa fazer é modprobe dahdi, executar dahdi_cfg -vv e esperar pelo melhor e claro executar o Asterisk. Se você digitar dahdi show status no *CLI> do Asterisk, você deve ver um “OK” na seção Alarms, no seu span. Se você vir RED, eles não se vêem. Ou se é amarelo, eu acho que você tem link, mas o timing não está correto. Veja eu acho!

Se você tiver problemas com o timing, você pode verificar com tcpdump -i eth0 ether proto 0xd00d, e você deve ver um buckload de pacotes fluindo pol Também tente usar a ferramenta dahdi_test em ambas as máquinas para comparar o timing. a máquina pri_cpe (Slaver) obterá o timing da ethernet, então pode ser um pouco ruim, se a sua rede não for perfeita. Para evitar isto, ao compilar o Asterisk tenha certeza de desabilitar todos os timing, assim seu asterisk passa a usar exclusivamente o timing do DAHDI.

Agora posso fazer chamadas com DAHDI/g0/number com callerid etc. :) Espero que você também possa! 

Angelo de Barros Delphini

Autor & Editor

Professor Convidado CT Novatec.

Gerente de TIC/P&D na Delphini systems

Desenvolvedor Digium™ The Asterisk® Communications Framework Sênior.

Digium™ Certificate: dCAA, dCAI, dCAI-TPT, dCSE-C, dCSP-C, dSSE

Linux User # 472499 - Ubuntu User # 22452 - ICQ User # 86119719

0 comentários:

Postar um comentário

Manual Categories