Asterisk, Sangoma A101 y OpenR2.

Instalaremos Asterisk, DAHDI, OpenR2 y WANPIPE para configurar un enlace telefónico E1 de TELMEX en México, sera la tercera guía rápida que hago cada una con distintas tarjetas, Digium y OpenVox.
El sistema operativo que utilizaremos sera Linux Red Hat Enterprise Linux 5.6 para arquitectura de 64 bits, el equipo donde desarrollaremos las pruebas es un HP Proliant ML150, una tarjeta Sangoma A101 1-port T1/E1/J1 y conectores para los coaxiales para la conversión a RJ45. Instalaremos el sistema y utilizaremos únicamente paquetes que vienen junto con los discos de instalación, no usaremos yum para instalar ni actualizar paquetes principalmente para verificar los paquetes que son necesarios para compilar asterisk, dahdi y wanpipe (puedes utilizar CentOS por aquello de la licencia de RedHat).

No cubriremos la instalación de Red Hat hay demasiada información en la red para consultar solo hacemos mención que se instala sin entorno gráfico y demás aplicaciones no necesarias para un servidor de las características mencionadas. Los paquetes los tomaremos y los instalaremos usando la imagen ISO de RHEL montándolo en un directorio para instalarlos mediante RPM, ya que tenemos instalado todo el sistema operativo y conectado adecuadamente a una red con acceso a Internet procederemos a lo siguiente:

Crearemos un directorio denominado IPBX dentro de /usr/src que sera nuestro directorio de instalación, dentro de el crearemos otro directorio denominado Disco donde montaremos la ISO de instalación de Red Hat, para acceder a los paquetes.

[root@asterisksangoma ~]# mkdir /usr/src/IPBX
[root@asterisksangoma ~]# cd /usr/src/IPBX/
[root@asterisksangoma IPBX]# mkdir Disco
[root@asterisksangoma IPBX]# mount -t iso9660 -o loop rhel-server-5.6-x86_64-dvd.iso Disco/
[root@asterisksangoma IPBX]# cd Disco/Server/

Estos son los paquetes que tuve que instalar para la compilación de wanpipe, dahdi, asterisk y openr2, hay dependencias entre ellos por lo tanto es necesario instalarlos todos, con yum o createrepo es mas automático sin embargo no son muchos paquetes y de esta manera uno se da cuenta de los necesarios.

[root@asterisksangoma Server]# rpm -ivh kernel-devel-2.6.18-238.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh ncurses-devel-5.5-24.20060715.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh ncurses-5.5-24.20060715.x86_64.rpm *
[root@asterisksangoma Server]# rpm -ivh kernel-headers-2.6.18-238.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh glibc-headers-2.5-58.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh glibc-devel-2.5-58.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh gcc-4.1.2-50.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh flex-2.5.4a-41.fc6.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh patch-2.5.4-31.el5.x86_64.rpm *
[root@asterisksangoma Server]# rpm -ivh libtermcap-devel-2.0.8-46.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh bison-2.3-2.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh imake-1.0.2-3.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh autoconf-2.59-12.noarch.rpm
[root@asterisksangoma Server]# rpm -ivh automake-1.9.6-2.3.el5.noarch.rpm
[root@asterisksangoma Server]# rpm -ivh libtool-1.5.22-7.el5_4.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh libstdc++-devel-4.1.2-50.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh gcc-c++-4.1.2-50.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh slang-devel-2.0.6-4.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh newt-devel-0.52.2-15.el5.x86_64.rpm 
[root@asterisksangoma Server]# rpm -ivh zlib-devel-1.2.3-3.x86_64.rpm 
[root@asterisksangoma Server]# rpm -ivh libxml2-devel-2.6.26-2.1.2.8.el5_5.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh e2fsprogs-devel-1.39-23.el5_5.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh keyutils-libs-devel-1.2-1.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh libsepol-devel-1.15.2-3.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh libselinux-devel-1.33.4-5.7.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh krb5-devel-1.6.1-55.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh openssl-devel-0.9.8e-12.el5_5.7.x86_64.rpm

En el directorio de IPBX descargaremos las ultimas versiones de cada una de las aplicaciones que vamos a utilizar, para este caso usaremos Wanpipe 3.5.20, Asterisk 1.8.4, DAHDI linux 2.4.1.2, DAHDI tools 2.4.1 y OpenR2 1.3.1.

[root@asterisksangoma IPBX]# wget ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-3.5.20.tgz
[root@asterisksangoma IPBX]# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/dahdi-linux-2.4.1.2.tar.gz
[root@asterisksangoma IPBX]# wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.4.1.tar.gz
[root@asterisksangoma IPBX]# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.4.tar.gz
[root@asterisksangoma IPBX]# wget http://openr2.googlecode.com/files/openr2-1.3.1.tar.gz

Antes que nada debemos conectar al equipo la tarjeta y verificar que se reconocida por Linux, mediante lspci verificamos que adecuadamente el sistema operativo la reconoció y nos muestra donde esta conectada físicamente.
La tarjeta en cuestión:
A102
Puerto PCI del equipo.

[root@asterisksangoma ~]# lspci | grep Net
07:00.0 Network controller: Sangoma Technologies Corp. A200/Remora FXO/FXS Analog AFT card
07:01.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5703X Gigabit Ethernet (rev 02)

Procedemos con la instalación de los módulos de DAHDI y posteriormente la instalación de Wanpipe ya que vamos a utilizar DAHDI especificamos al script de instalación el parámetro dahdi.

[root@asterisksangoma IPBX]# tar xfz dahdi-linux-2.4.1.2.tar.gz
[root@asterisksangoma IPBX]# cd dahdi-linux-2.4.1.2
[root@asterisksangoma dahdi-linux-2.4.1.2]# make
[root@asterisksangoma dahdi-linux-2.4.1.2]# make install
[root@asterisksangoma dahdi-linux-2.4.1.2]# cd ..

[root@asterisksangoma IPBX]# tar xfz wanpipe-3.5.20.tgz
[root@asterisksangoma IPBX]# cd wanpipe-3.5.20


El script de instalación verificara los componentes necesarios como son paquetes, librerías del kernel utilizado y el directorio de DAHDI a utilizar.

[root@asterisksangoma wanpipe-3.5.20]# ./Setup dahdi

	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

WANPIPE INSTALLATION FOR DAHDI

You are about to install WANPIPE TDM Voice drivers
for Asterisk/Dahdi framework.

You will be prompted for path to DAHDI source.

Wanpipe drivers will compile into dahdi WITHOUT any
dahdi patching or need to recompile dahdi modules.

You must have Linux Kernel Headers along with
full development tools (i.e. GNU C compiler and utilities)
installed in order to be able to install this product.

If you have previoulsy installed WANPIPE, this release
will overrite/upgrade full release without the need to
uninstall first!

IMPORTANT:
It is always recommended to say YES to all options
prompted during the install!

Please visit: http://wiki.sangoma.com for more info.

Would you like to install WANPIPE now? [y] (y/n) y

	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

Fixing file permissions...

Verifying files and fixing permissions ...Done
Checking for C developement tools ...(gcc) OK
Checking for C++ developement tools ...OK
Checking for Make utility ...OK
Checking for ncurses library ... OK
Checking for Perl developement tools ...OK
Checking for AWK ...OK
Checking for FLEX ...OK
Checking for Patch ...OK
Checking for libtermcap-devel...OK
Checking for bison...OK
Checking for libtool...OK


	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------


Installing WANPIPE Device Drivers: Linux KERNEL

To integrate WANPIPE Multi-Protocol Voice & WAN Router 
modules into the Linux kernel, the kernel has to be 
updated with latest wanpipe sources.  Install will only
modify existing wanpipe source that is already in the
Kernel. 

IMPORTANT:
It is always recommended to say YES to all options 
prompted during the install!


	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------


Please specify absolute path name of your linux headers/source directory

Press Enter for Default: /lib/modules/2.6.18-238.el5/build

#>Setting linux directory to /lib/modules/2.6.18-238.el5/build



Upgrading WANPIPE kernel documentation ...Done.


Installing WANPIPE include headers ...Done.

WANPIPE device drivers upgraded successfully!


	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

WANPIPE KERNEL DRIVER COMPILATION
	
The next step in WANPIPE installation involves compiling 
WANPIPE kernel modules.  

This script will compile and install WANPIPE modules
into the currently running linux kernel.

For greater customization you will be prompted to
select which Protocol/Drivers you would like to
build into the WANPIPE kernel modules.

Wanpipe for Asterisk/Dahdi/Zaptel
	Default for Asterisk/Dahdi/Zaptel
Wanpipe for Wan Routing/API 
	Default for Wan/IP Routing and Data API
Wanpipe for Asterisk SMG/SS7
	Default for Asterisk SS7
Wanpipe for TDM API
	Default for FreeSwitch and Voice API 	

Custom Compilation:
------------------
  Customise WANPIPE driver compilation to add only the
  protocols that you need.  This way one can reduce
  the size of the WANPIPE kernel drivers.

Refer to http://wiki.sangoma.com for more info


	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

	
	Please Select Compilation Mode

1. WAN Protocols Support 
       Protocols: Frame Relay, CHDLC, PPP, ATM, X25, ADSL, TDM API
       Default for: Wan Routing, Data & Voice API devel.

2. TDM Voice (Dahdi/Zaptel) Support 
       Protocols: TDMV (Dahid/Zaptel), TDM API on AFT adatpers.
       Default for: Asterisk & CallWeaver

3. TDM Voice (Dahid/Zaptel) + WAN Protocol Support

4. SMG (SS7) (Default for Asterisk SMG/SS7 install)

5. SMG (SS7) + TDM Voice (Dahdi/Zaptel)
       Default for: Asterisk SS7 + PRI

6. SMG (BRI) (Default for Asterisk SMG/BRI install)

7. SMG (BRI) + TDM Voice (Dahdi/Zaptel)
       Default for: Asterisk BRI + PRI + Analog

8. SMG (PRI) (Default for Asterisk SMG/PRI install)

9. SMG (PRI) + TDM Voice (Dahdi/Zaptel)
       Default for: Asterisk SMG/PRI + Analog

10. TDM API  
       Protocols: TDM API on AFT adapters:
       Default for: FreeSwitch, Yate, Sunrise
                    Custom voice development 

11. Custom Compilation Mode
       Specify protocols to be added into the WANPIPE
       kernel drivers.

Please select (1-11) [Default: 1]: 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------


Looking for zaptel/dahdi directory in /usr/src ...
-------------------------------------------
1 : /usr/src/IPBX/dahdi-linux-2.4.1.2 
------------------------------------------ 
------------------------------------------ 
m : Enter zaptel path manually

(ctrl-c to Exit)
Please select working zaptel directory [1-1][m]: 1

Enabling the TDM Voice Asterisk Support
                                                      
Dahdi HW HDLC Support Detected: Enabling DCHAN Feature
Native Dahdi HW HDLC Support Detected - No patch required
Dahdi source unmodified
                        
Checking for UDEV Zaptel compatibility...     Dahdi installed, no need to add UDEV rules
Enabling the AFT TE1 Support

Checking for SMP support ...Enabled.

Checking current processor type ...x86_64

Wan Update Flags:  -DAF_WANPIPE_2612_FORCE_UPDATE -DWANPIPE_MOD_266_FORCE_UPDATE


--------------------------------------------------
CFLAGS: gcc -Wp,-MD,.wanpipe.o.d -nostdinc -iwithprefix include -D__LINUX__ -Dlinux -D__KERNEL__ -I/usr/include/wanpipe -I/lib/modules/2.6.18-238.el5/build/include  -DMODULE   -DAF_WANPIPE_2612_FORCE_UPDATE -DWANPIPE_MOD_266_FORCE_UPDATE   -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Wstrict-prototypes -Wundef -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -fwrapv -Os  -mtune=generic -m64 -mno-red-zone -mcmodel=kernel -pipe -fno-reorder-blocks -Wno-sign-compare -fno-asynchronous-unwind-tables -funit-at-a-time -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fomit-frame-pointer -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h  
--------------------------------------------------

Checking for REGPARM kernel option ...Disabled.

Compiling General WANPIPE Driver for 2.6.X Kernel .....Done.


WAN HWEC module enabled and compiled!
Linking Wanpipe Driver and protocols ...Done.

Updating Kernel Modules ...Done.

Compilation Successful.

	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

WANPIPE META CONFIGURATION

There are two configuration files associated with WANPIPE.  

1) /usr/src/IPBX/wanpipe-3.5.20/wanrouter.rc: 
	- defines locations of important files such as lock
	  and configuration files as well as start/stop 
	  order of multiple WANPIPE devices.
2) /usr/src/IPBX/wanpipe-3.5.20/wanpipe1.conf:
	- main configuration file for each WANPIPE device.
	- defines interfaces, hardware and protocol information.
	- this file can be created using the 'wancfg' GUI
	  utility or manually based on sample files located
	  in /etc/wanpipe/samples.
	  
Please read the WanpipeInstallation.(pdf/txt) manual for further
information.


	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

WANPIPE UTILITIES SETUP

WANPIPE utilities are used to:
	1) create configuration files: for Zaptel and Asterisk
		/usr/sbin/wancfg_zaptel	#Zaptel and Asterisk
		/usr/sbin/wancfg_dahdi	#Dahdi and Asterisk
		/usr/sbin/wancfg_smg	#BRI/SS7, Zaptel and Asterisk
		/usr/sbin/wancfg_tdmapi	#TDM API
	2) create WANPIPE WAN/IP configuration files.
		(/usr/sbin/wancfg)
	3) start,stop,restart individual/all devices and interfaces.
		(/usr/sbin/wanrouter)
	4) debug line, protocol and driver problems.
		(/usr/sbin/wanpipemon)
	5) aid in WANPIPE API development
		(/etc/wanpipe/api)

Refer to the WanpipeInstallation.(pdf/txt) for more information.


Compiling WANPIPE Utilities ...Done.


Compiling WANPIPE WanCfg Utility ...Done.


Compiling WANPIPE LibSangoma API library ...Done.


Compiling WANPIPE LibStelephony API library ...Done.


Compiling WANPIPE API Development Utilities ...Done.

Compiling WANPIPE HWEC Utilities ...Done.


	WANPIPE Environment Setup Complete !!!

Installing WANPIPE Files ... !
Installing  WANPIPE Utilities in /usr/sbin
Installing wanrouter.rc in /etc/wanpipe
Installing wanpipe libraries in /etc/wanpipe
Installing firmware in /etc/wanpipe/firmware
Installing documentation in /usr/share/doc/wanpipe
Installing sample api code in /etc/wanpipe/api
Installing AFT Firmware update utility in /etc/wanpipe/util
Installing driver headers in /etc/wanpipe/api/include/linux
Installing Hardware Echo Cancel Utilites

	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------

WANPIPE INSTALLATON: COMPLETE
	
WANPIPE installation is now complete. WANPIPE kernel drivers 
and configuration/debug utilities have been compiled and installed.

	1) Proceed to configure the WANPIPE drivers:
		Asterisk/Zaptel  : /usr/sbin/wancfg_zaptel
		Asterisk/Dahdi   : /usr/sbin/wancfg_dahdi
		TDM API          : /usr/sbin/wancfg_tdmapi
		SMG SS7/BRI/PRI  : /usr/sbin/wancfg_smg
		WAN Routing/API  : /usr/sbin/wancfg
	2) Use the /usr/sbin/wanrouter startup script to start and stop
	   the router. (eg: wanrouter start)
	3) To uninstall WANPIPE package run ./Setup remove
		
Please read http://wiki.sangoma.com for further instructions.


Wanpipe / Zaptel Configuration
==============================

wancfg_zaptel configurator can create all wanpipe config files
for ZAPTEL including /etc/zaptel.conf file.
Optionally: the configurator can also create Asterisk zapata.conf
-----------------------------------------------------
Would you like to configure wanpipe devices for DAHDI? (y/n) n
Wanpipe Installation Complete
-----------------------------
Please proceed to configure wanpipe user /usr/sbin/wancfg_dahdi

Hasta aquí termina la instalación le dimos la opción de que no configurara de momento los dispositivos esto lo haremos después con otro script del programa instalado aparte de que al final editaremos manualmente nuestro archivo de configuración.
Con el comando wanrouter recién instalado verificamos que nuestra tarjeta sea reconocida efectivamente por wanpipe.

[root@asterisksangoma wanpipe-3.5.20]# wanrouter hwprobe

-------------------------------
| Wanpipe Hardware Probe Info |
-------------------------------
1 . AFT-A101-SH : SLOT=0 : BUS=7 : IRQ=7 : CPU=A : PORT=1 : HWEC=32 : V=37

Card Cnt: A101-2=1 

Vemos que satisfactoriamente esta reconocida por la aplicación, aquí en este punto especial introduzco el siguiente error que se presento en diversos intentos de instalación con otros kernel o sin la tarjeta E1 en el puerto PCI del equipo en cuestión.

FATAL: Error inserting wanpipe (/lib/modules/2.6.18-238.el5/kernel/drivers/net/wan/wanpipe.ko): Unknown symbol in module, or unknown parameter (see dmesg)
Would you like to generate /etc/asterisk/zapata.conf

Iniciamos el script de configuración tomando los pasos de un white paper denominado “Running MFC/R2 with Sangoma Wanpipe® using OpenR2 (libopenr2)“, para generar el archivo de configuración de wanpipe.

[root@asterisksangoma wanpipe-3.5.20]# wancfg_dahdi 

########################################################################
#    		           Sangoma Wanpipe                             #
#        Dahdi/Zaptel/SMG/TDMAPI/BOOT Configuration Script             #
#                             v2.39                                  #
#                     Sangoma Technologies Inc.                        #
#                        Copyright(c) 2009.                            #
########################################################################

Would you like to generate /etc/asterisk/chan_dahdi.conf
 1. YES
 2. NO
[1-2]:1

---------------------------------------------
Configuring T1/E1 cards [A101/A102/A104/A108]
---------------------------------------------
A101 detected on slot:0 bus:7

-----------------------------------------------------------
Configuring port 1 on A101 slot:0 bus:7.
-----------------------------------------------------------

Select media type for AFT-A101 on port 1 [slot:0 bus:7 span:1]
 1. T1
 2. E1
 3. Unused
 4. Exit
[1-4]:2

Configuring port 1 on 101 as E1, line coding:HDB3, framing:CRC4 
 1. YES - Keep these settings
 2. NO  - Configure line coding and framing
[1-2, ENTER='YES']:1

Select clock for AFT-A101 on port 1 [slot:0 bus:7 span:1]
 1. NORMAL
 2. MASTER
[1-2]:1

Select signalling type for AFT-A101 on port 1 [slot:0 bus:7 span:1]
 1. Zaptel/Dahdi - PRI CPE
 2. Zaptel/Dahdi - PRI NET
 3. Zaptel/Dahdi - E & M
 4. Zaptel/Dahdi - E & M Wink
 5. Zaptel/Dahdi - FXS - Loop Start
 6. Zaptel/Dahdi - FXS - Ground Start
 7. Zaptel/Dahdi - FXS - Kewl Start
 8. Zaptel/Dahdi - FX0 - Loop Start
 9. Zaptel/Dahdi - FX0 - Ground Start
 10. Zaptel/Dahdi - FX0 - Kewl Start
 11. Sangoma SMG/sangoma_prid- PRI CPE
 12. Sangoma SMG/sangoma_prid- PRI NET
[1-12]:5


Would you like to enable hardware DTMF detection?
 1. YES
 2. NO
[1-2, ENTER='YES']:1

Would you like to enable hardware fax detection?
 1. YES
 2. NO
[1-2, ENTER='NO']:1

Configuring port 1 on AFT-A101 as a full E1
 1. YES - Use all channels
 2. NO  - Configure for fractional
[1-2, ENTER='YES']:1

Select dialplan context for AFT-A101 on port 1
 1. from-pstn
 2. from-internal
 3. Custom
[1-3]:1


Port 1 on AFT-A101 configuration complete...
Press any key to continue: 

T1/E1 card configuration complete.
Press any key to continue: 

------------------------------------
Configuring analog cards [A200/A400/B600/B700/B800]
------------------------------------

------------------------------------
Configuring USB devices [U100]
------------------------------------

###################################################################
#                             SUMMARY                             #
###################################################################

  1 T1/E1 port(s) detected, 1 configured
  0 ISDN BRI port(s) detected, 0 configured
  0 analog card(s) detected, 0 configured
  0 usb device(s) detected, 0 configured

Configurator will create the following files:
	1. Wanpipe config files in /etc/wanpipe
	2. Dahdi config file /etc/dahdi/system.conf
	3. Chan-Dahdi config file /etc/asterisk/chan_dahdi.conf


Your original configuration files will be saved to:
	1. /etc/dahdi/system.conf.bak 
	2. /etc/asterisk/chan_dahdi.conf.bak 


Your configuration has been saved in /etc/wanpipe/debug-2011-05-15.tgz.
When requesting support, email this file to techdesk@sangoma.com


###################################################################

Configuration Complete! Please select following:
 1. YES - Continue
 2. NO - Exit
[1-2]:

Dahdi and Wanpipe configuration complete: choose action
 1. Save cfg: Restart Asterisk & Wanpipe now
 2. Save cfg: Restart Asterisk & Wanpipe when convenient
 3. Save cfg: Stop Asterisk & Wanpipe now
 4. Save cfg: Stop Asterisk & Wanpipe when convenient
 5. Save cfg: Save cfg only (Not Recommanded!!!)
 6. Do not save cfg: Exit
[1-6]:5


Removing old configuration files...

Copying new Wanpipe configuration files...

Copying new Dahdi configuration file (/etc/dahdi/system.conf)...
cp: cannot create regular file `/etc/dahdi/system.conf': No such file or directory
Error executing command:
cp -f /etc/wanpipe/wancfg_zaptel/tmp_cfg/zaptel.conf /etc/dahdi/system.conf

Would you like to continue?
 1. No - exit
 2. YES
[1-2, ENTER='No']:2


Copying new Chan-Dahdi configuration files (/etc/asterisk/chan_dahdi.conf)...
cp: cannot create regular file `/etc/asterisk/chan_dahdi.conf': No such file or directory
Error executing command:
cp -f /etc/wanpipe/wancfg_zaptel/tmp_cfg/zapata.conf /etc/asterisk/chan_dahdi.conf

Would you like to continue?
 1. No - exit
 2. YES
[1-2, ENTER='No']:2

Saving files only
Current boot level is 3

Wanrouter boot scripts configuration...

Removing existing wanrouter boot scripts...OK
Would you like wanrouter to start on system boot?
 1. YES
 2. NO
[1-2]:1

Verifying Dahdi boot scripts...
Verifying Dahdi boot scripts...Not installed
Verifying Dahdi shutdown scripts...Not installed
Enabling wanrouter boot scripts ...(level:8)
Enabling wanrouter shutdown scripts ...(level:91)
Remvoing old smg_ctrl boot.....OK
Remvoing old smg_ctrl_safe boot.....OK

Posteriormente realizaremos unos cambios en el archivo de configuración, vamos a verificar que wanrouter nos muestre el dispositivo.

[root@asterisksangoma wanpipe-3.5.20]# wanrouter start

Starting up device: wanpipe1
--> Loading ec image OCT6116-64S.ima...
Configuring interfaces: w1g1 
done.

[root@asterisksangoma wanpipe-3.5.20]# wanrouter list

Devices currently active:
	wanpipe1

[root@asterisksangoma wanpipe-3.5.20]# wanrouter status

Devices currently active:
	wanpipe1


Wanpipe Config:

Device name | Protocol Map | Adapter  | IRQ | Slot/IO | If's | CLK | Baud rate |
wanpipe1    | N/A          | A101/1D/A102/2D/4/4D/8| 169 | 0       | 1    | N/A | 0         |

Wanrouter Status:

Device name | Protocol | Station | Status        |
wanpipe1    | AFT TE1  | N/A     | Disconnected  |

Instalamos las herramientas de DAHDI para usar dahdi_tool.

[root@asterisksangoma wanpipe-3.5.20]# cd ..
[root@asterisksangoma IPBX]# tar xfz dahdi-tools-2.4.1.tar.gz 
[root@asterisksangoma IPBX]# cd dahdi-tools-2.4.1
[root@asterisksangoma dahdi-tools-2.4.1]# ./configure
[root@asterisksangoma dahdi-tools-2.4.1]# make
[root@asterisksangoma dahdi-tools-2.4.1]# make install
[root@asterisksangoma dahdi-tools-2.4.1]# make config
[root@asterisksangoma dahdi-tools-2.4.1]# cd ..

Compilamos e instalamos OpenR2 según las indicaciones del manual colocado en la pagina del autor.

[root@asterisksangoma IPBX]# tar xvfz openr2-1.3.1.tar.gz 
[root@asterisksangoma IPBX]# cd openr2-1.3.1
[root@asterisksangoma openr2-1.3.1]# ./configure --prefix=/usr
[root@asterisksangoma openr2-1.3.1]# make
[root@asterisksangoma openr2-1.3.1]# make install

Por ultimo compilamos e instalamos Asterisk.

[root@asterisksangoma IPBX]# tar xfz asterisk-1.8.4.tar.gz 
[root@asterisksangoma IPBX]# cd asterisk-1.8.4
[root@asterisksangoma IPBX]# ./configure
[root@asterisksangoma IPBX]# make
[root@asterisksangoma IPBX]# make install
[root@asterisksangoma IPBX]# make samples

Verificamos que el soporte de OpenR2 este correctamente instalado en Asterisk.

[root@asterisksangoma asterisk-1.8.4]# ldd channels/chan_dahdi.so | grep openr2
	libopenr2.so.3 => /usr/lib64/libopenr2.so.3 (0x00002ab1f4dbe000)

Configuraremos DAHDI con los siguientes parámetros específicos para el E1 de TELMEX, son treinta canales posibles de comunicación con el canal 16 para señalización.

[root@asterisksangoma IPBX]# vi /etc/dahdi/system.conf 
span=1,1,0,cas,hdb3
cas=1-15:1101
dchan=16
cas=17-31:1101

loadzone=us
defaultzone=us

Cargamos la configuración.

[root@asterisksangoma IPBX]# dahdi_cfg -vv
DAHDI Tools Version - 2.4.1

DAHDI Version: 2.4.1.2
Echo Canceller(s): 
Configuration
======================

SPAN 1: CAS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)

Channel map:

Channel 01: CAS / User (Default) (Echo Canceler: none) (Slaves: 01)
Channel 02: CAS / User (Default) (Echo Canceler: none) (Slaves: 02)
Channel 03: CAS / User (Default) (Echo Canceler: none) (Slaves: 03)
Channel 04: CAS / User (Default) (Echo Canceler: none) (Slaves: 04)
Channel 05: CAS / User (Default) (Echo Canceler: none) (Slaves: 05)
Channel 06: CAS / User (Default) (Echo Canceler: none) (Slaves: 06)
Channel 07: CAS / User (Default) (Echo Canceler: none) (Slaves: 07)
Channel 08: CAS / User (Default) (Echo Canceler: none) (Slaves: 08)
Channel 09: CAS / User (Default) (Echo Canceler: none) (Slaves: 09)
Channel 10: CAS / User (Default) (Echo Canceler: none) (Slaves: 10)
Channel 11: CAS / User (Default) (Echo Canceler: none) (Slaves: 11)
Channel 12: CAS / User (Default) (Echo Canceler: none) (Slaves: 12)
Channel 13: CAS / User (Default) (Echo Canceler: none) (Slaves: 13)
Channel 14: CAS / User (Default) (Echo Canceler: none) (Slaves: 14)
Channel 15: CAS / User (Default) (Echo Canceler: none) (Slaves: 15)
Channel 16: D-channel (Default) (Echo Canceler: none) (Slaves: 16)
Channel 17: CAS / User (Default) (Echo Canceler: none) (Slaves: 17)
Channel 18: CAS / User (Default) (Echo Canceler: none) (Slaves: 18)
Channel 19: CAS / User (Default) (Echo Canceler: none) (Slaves: 19)
Channel 20: CAS / User (Default) (Echo Canceler: none) (Slaves: 20)
Channel 21: CAS / User (Default) (Echo Canceler: none) (Slaves: 21)
Channel 22: CAS / User (Default) (Echo Canceler: none) (Slaves: 22)
Channel 23: CAS / User (Default) (Echo Canceler: none) (Slaves: 23)
Channel 24: CAS / User (Default) (Echo Canceler: none) (Slaves: 24)
Channel 25: CAS / User (Default) (Echo Canceler: none) (Slaves: 25)
Channel 26: CAS / User (Default) (Echo Canceler: none) (Slaves: 26)
Channel 27: CAS / User (Default) (Echo Canceler: none) (Slaves: 27)
Channel 28: CAS / User (Default) (Echo Canceler: none) (Slaves: 28)
Channel 29: CAS / User (Default) (Echo Canceler: none) (Slaves: 29)
Channel 30: CAS / User (Default) (Echo Canceler: none) (Slaves: 30)
Channel 31: CAS / User (Default) (Echo Canceler: none) (Slaves: 31)

31 channels to configure.

Setting echocan for channel 1 to none
Setting echocan for channel 2 to none
Setting echocan for channel 3 to none
Setting echocan for channel 4 to none
Setting echocan for channel 5 to none
Setting echocan for channel 6 to none
Setting echocan for channel 7 to none
Setting echocan for channel 8 to none
Setting echocan for channel 9 to none
Setting echocan for channel 10 to none
Setting echocan for channel 11 to none
Setting echocan for channel 12 to none
Setting echocan for channel 13 to none
Setting echocan for channel 14 to none
Setting echocan for channel 15 to none
Setting echocan for channel 16 to none
Setting echocan for channel 17 to none
Setting echocan for channel 18 to none
Setting echocan for channel 19 to none
Setting echocan for channel 20 to none
Setting echocan for channel 21 to none
Setting echocan for channel 22 to none
Setting echocan for channel 23 to none
Setting echocan for channel 24 to none
Setting echocan for channel 25 to none
Setting echocan for channel 26 to none
Setting echocan for channel 27 to none
Setting echocan for channel 28 to none
Setting echocan for channel 29 to none
Setting echocan for channel 30 to none
Setting echocan for channel 31 to none

Configuramos los parámetros con respecto a MFCR2, los DNIS, el contexto y los canales a utilizar, en este caso de los canales uno al veintiuno (el 16 se usa señalización) debido a que mi E1 tiene veinte lineas disponibles.

[root@asterisksangoma ~]# cat /etc/asterisk/chan_dahdi.conf 
[channels] 
signalling=mfcr2 
mfcr2_variant=mx 
mfcr2_get_ani_first=no 
mfcr2_max_ani=10 
mfcr2_max_dnis=4 
mfcr2_category=national_subscriber 
mfcr2_mfback_timeout=-1 
mfcr2_metering_pulse_timeout=-1 
; this is for debugging purposes 
mfcr2_logdir=log 
mfcr2_logging=all 
; end debugging configuration 
context=from-pstn 
group=1 
restrictcid=yes 
hidecallerid=yes 
channel => 1-15 
channel => 17-21 

Con esto ya tenemos configurada la parte de Asterisk y DAHDI para solo recibir la señal del E1, vamos a terminar de configurar Wanpipe. Conectar el E1 no basta para que nuestra tarjeta inmediatamente empiece a trabajar, en dado caso wanpipemon nos ayudara a identificar las posibles alarmas existente para lograr poner en verde el led indicador del estado de nuestra tarjeta.
Aquí cito una pagina de la wiki de sangoma donde nos muestran la descripción de cada una de estas alarmas. Aquí wanpipemon muestra las alarmas cuando no tenemos conexión alguna en la tarjeta, nota la alarma de open circuit, loss of framing y loss of frame signal.

[root@asterisksangoma IPBX]# wanpipemon -i w1g1 -c Ta

***** w1g1: E1 Rx Alarms (Framer) *****

ALOS:	OFF	| LOS:	ON
RED:	ON	| AIS:	OFF
LOF:	ON	| RAI:	OFF

***** w1g1: E1 Rx Alarms (LIU) *****

Short Circuit:	OFF
Open Circuit:	ON
Loss of Signal:	ON

***** w1g1: E1 Tx Alarms *****

AIS:	OFF	| YEL:	ON


***** w1g1: E1 Performance Monitoring Counters *****

Line Code Violation	: 0
Far End Block Errors	: 0
CRC4 Errors		: 0
FAS Errors		: 0


Rx Level	: < -44db

Aquí un ejemplo de la tarjeta conectada con un loop en los coaxiales, esto con el fin de comparar ciertas alarmas que van desde una mala señal enviada por el otro lado de nuestro enlace así como cables invertidos en la conexión, la alarma es la de loss of framing.

[root@asterisksangoma IPBX]# wanpipemon -i w1g1 -c Ta

***** w1g1: E1 Rx Alarms (Framer) *****

ALOS:	OFF	| LOS:	OFF
RED:	ON	| AIS:	OFF
LOF:	ON	| RAI:	OFF

***** w1g1: E1 Rx Alarms (LIU) *****

Short Circuit:	OFF
Open Circuit:	OFF
Loss of Signal:	OFF

***** w1g1: E1 Tx Alarms *****

AIS:	OFF	| YEL:	ON


***** w1g1: E1 Performance Monitoring Counters *****

Line Code Violation	: 725
Far End Block Errors	: 0
CRC4 Errors		: 0
FAS Errors		: 0


Rx Level	: > -2.5db

En los logs del sistema se pueden presentar mensajes similares a los siguientes haciendo referencia al reloj, en mi caso fue por que el Rx y Tx de los coaxiales estaban invertidos en el balun, sin embargo en la FAQ de Sangoma hay mas causas posibles, también nota que aparecen otras alarmas diferentes en especial la de short circuit que nos indica que los cables están cruzados, y la de remote alarm indication.

[root@asterisksangoma ~]# wanpipemon -i w1g1 -c Ta 

***** w1g1: E1 Rx Alarms (Framer) ***** 

ALOS:	OFF	| LOS:	OFF 
RED:	ON	| AIS:	OFF 
LOF:	ON	| RAI:	ON 

***** w1g1: E1 Rx Alarms (LIU) ***** 

Short Circuit:	ON 
Open Circuit:	OFF 
Loss of Signal:	OFF 

***** w1g1: E1 Tx Alarms ***** 

AIS:	OFF	| YEL:	ON 


***** w1g1: E1 Performance Monitoring Counters ***** 

Line Code Violation	: 826634 
Far End Block Errors	: 0 
CRC4 Errors		: 0 
FAS Errors		: 2166 


Rx Level	: -40db to -44db 
[root@asterisksangoma ~]# tail -f /var/log/messages 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 

En los casos anteriores el comando dahdi_tool nos mostrara la alarma en la tarjeta y mientras exista Asterisk no podra usarla.


La alarma RED se quitara hasta que logremos configurar adecuadamente la tarjeta y nos deje de mostrar las demás alarmas, anteriormente configuramos con el script, necesitamos cambiar en el archivo wanpipe1.conf dentro del directorio /etc/wanpipe, el tipo de framing a NCRC4 en vez de CRC4 y confirmar la configuración del reloj se encuentre en modo normal.

FE_FRAME	= NCRC4 
TE_CLOCK 	= NORMAL

Conectamos el E1 a la tarjeta y comprobamos las alarmas en ella.

[root@asterisksangoma ~]# wanpipemon -i w1g1 -c Ta 

***** w1g1: E1 Rx Alarms (Framer) ***** 

ALOS:	OFF	| LOS:	OFF 
RED:	OFF	| AIS:	OFF 
LOF:	OFF	| RAI:	OFF 

***** w1g1: E1 Rx Alarms (LIU) ***** 

Short Circuit:	OFF 
Open Circuit:	OFF 
Loss of Signal:	OFF 

***** w1g1: E1 Tx Alarms ***** 

AIS:	OFF	| YEL:	OFF 


***** w1g1: E1 Performance Monitoring Counters ***** 

Line Code Violation	: 2620 
Far End Block Errors	: 0 
CRC4 Errors		: 0 
FAS Errors		: 1507 


Rx Level	: > -2.5db 




Satisfactoriamente no hay ninguna alarma, nuestra tarjeta se pone en verde y esta lista para recibir llamadas, confirmamos con dahdi_tool.


Entramos a la consola de Asterisk y verificamos que los canales estén listos.

asterisksangoma*CLI> mfcr2 show channels 
Chan Variant Max ANI Max DNIS ANI First Immediate Accept Tx CAS   Rx CAS  
   1 MX      10      4        No        No               IDLE     IDLE    
   2 MX      10      4        No        No               IDLE     IDLE    
   3 MX      10      4        No        No               IDLE     IDLE    
   4 MX      10      4        No        No               IDLE     IDLE    
   5 MX      10      4        No        No               IDLE     IDLE    
   6 MX      10      4        No        No               IDLE     IDLE    
   7 MX      10      4        No        No               IDLE     IDLE    
   8 MX      10      4        No        No               IDLE     IDLE    
   9 MX      10      4        No        No               IDLE     IDLE    
  10 MX      10      4        No        No               IDLE     IDLE    
  11 MX      10      4        No        No               IDLE     IDLE    
  12 MX      10      4        No        No               IDLE     IDLE    
  13 MX      10      4        No        No               IDLE     IDLE    
  14 MX      10      4        No        No               IDLE     IDLE    
  15 MX      10      4        No        No               IDLE     IDLE    
  17 MX      10      4        No        No               IDLE     IDLE    
  18 MX      10      4        No        No               IDLE     IDLE    
  19 MX      10      4        No        No               IDLE     IDLE    
  20 MX      10      4        No        No               IDLE     IDLE    
  21 MX      10      4        No        No               IDLE     IDLE    
asterisksangoma*CLI> 

DAHDI también se muestra configurado adecuadamente.

asterisksangoma*CLI> dahdi show channels 
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
 pseudo            default                    default                         In Service 
      1            from-pstn                  default                         In Service 
      2            from-pstn                  default                         In Service 
      3            from-pstn                  default                         In Service 
      4            from-pstn                  default                         In Service 
      5            from-pstn                  default                         In Service 
      6            from-pstn                  default                         In Service 
      7            from-pstn                  default                         In Service 
      8            from-pstn                  default                         In Service 
      9            from-pstn                  default                         In Service 
     10            from-pstn                  default                         In Service 
     11            from-pstn                  default                         In Service 
     12            from-pstn                  default                         In Service 
     13            from-pstn                  default                         In Service 
     14            from-pstn                  default                         In Service 
     15            from-pstn                  default                         In Service 
     17            from-pstn                  default                         In Service 
     18            from-pstn                  default                         In Service 
     19            from-pstn                  default                         In Service 
     20            from-pstn                  default                         In Service 
     21            from-pstn                  default                         In Service 
asterisksangoma*CLI> 

Si tenemos la tarjeta con alarma los canales se nos mostraran de la siguiente manera:

asterisksangoma*CLI> dahdi show channels 
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
 pseudo            default                    default                         In Service 
      1            from-pstn                  default               R         In Service 
      2            from-pstn                  default               R         In Service 
      3            from-pstn                  default               R         In Service 
      4            from-pstn                  default               R         In Service 
      5            from-pstn                  default               R         In Service 
      6            from-pstn                  default               R         In Service 
      7            from-pstn                  default               R         In Service 
      8            from-pstn                  default               R         In Service 
      9            from-pstn                  default               R         In Service 
     10            from-pstn                  default               R         In Service 
     11            from-pstn                  default               R         In Service 
     12            from-pstn                  default               R         In Service 
     13            from-pstn                  default               R         In Service 
     14            from-pstn                  default               R         In Service 
     15            from-pstn                  default               R         In Service 
     17            from-pstn                  default               R         In Service 
     18            from-pstn                  default               R         In Service 
     19            from-pstn                  default               R         In Service 
     20            from-pstn                  default               R         In Service 
     21            from-pstn                  default               R         In Service 

asterisksangoma*CLI> mfcr2 show channels 
Chan Variant Max ANI Max DNIS ANI First Immediate Accept Tx CAS   Rx CAS  
   1 MX      10      4        No        No               IDLE     BLOCK   
   2 MX      10      4        No        No               IDLE     BLOCK   
   3 MX      10      4        No        No               IDLE     BLOCK   
   4 MX      10      4        No        No               IDLE     BLOCK   
   5 MX      10      4        No        No               IDLE     BLOCK   
   6 MX      10      4        No        No               IDLE     BLOCK   
   7 MX      10      4        No        No               IDLE     BLOCK   
   8 MX      10      4        No        No               IDLE     BLOCK   
   9 MX      10      4        No        No               IDLE     BLOCK   
  10 MX      10      4        No        No               IDLE     BLOCK   
  11 MX      10      4        No        No               IDLE     BLOCK   
  12 MX      10      4        No        No               IDLE     BLOCK   
  13 MX      10      4        No        No               IDLE     BLOCK   
  14 MX      10      4        No        No               IDLE     BLOCK   
  15 MX      10      4        No        No               IDLE     BLOCK   
  17 MX      10      4        No        No               IDLE     BLOCK   
  18 MX      10      4        No        No               IDLE     BLOCK   
  19 MX      10      4        No        No               IDLE     BLOCK   
  20 MX      10      4        No        No               IDLE     BLOCK   
  21 MX      10      4        No        No               IDLE     BLOCK   
asterisksangoma*CLI> 

Configuramos rápidamente un extensión SIP 1000 con el contexto from-pstn para que pueda recibir las llamadas, marcamos y vemos como la llamada entra con el primer DNI y se dirige a la extensión 1000.

asterisksangoma*CLI> 
New MFC/R2 call detected on chan 11. 
MFC/R2 call offered on chan 11. ANI = , DNIS = 5900, Category = National Priority Subscriber 
MFC/R2 call has been accepted on backward channel 11 
    -- Executing [5900@from-pstn:1] Dial("DAHDI/11-1", "SIP/1000") in new stack 
  == Using SIP RTP CoS mark 5 
    -- Called 1000 
    -- SIP/1000-00000001 is ringing 
    -- SIP/1000-00000001 answered DAHDI/11-1 
  == Spawn extension (from-pstn, 5900, 1) exited non-zero on 'DAHDI/11-1' 
    -- Hungup 'DAHDI/11-1' 
MFC/R2 call end on channel 11 

Sobre esa misma extensión realizamos una llamada de salida.

asterisksangoma*CLI> 
  == Using SIP RTP CoS mark 5 
    -- Executing [46028079@pruebas:1] Dial("SIP/1000-00000007", "DAHDI/g1/46028079") in new stack 
    -- Called g1/46028079 
MFC/R2 call has been accepted on forward channel 1 
    -- DAHDI/1-1 is ringing 
    -- DAHDI/1-1 is making progress passing it to SIP/1000-00000007 
MFC/R2 call has been answered on channel 1 
    -- DAHDI/1-1 answered SIP/1000-00000007 
Chan 1 - Far end disconnected. Reason: Normal Clearing 
MFC/R2 call disconnected on channel 1 
    -- Hungup 'DAHDI/1-1' 
  == Spawn extension (pruebas, 46028079, 1) exited non-zero on 'SIP/1000-00000007'


El teléfono es un MITEL 5312, diseñados específicamente para el protocolo MINET sin embargo tiene soporte para SIP, solo es cuestión de que inicie con el protocolo, y lo podremos registrar con cualquier proxy SIP mediante su pagina web de configuración.

Utilizamos dos tipos de conectores de coaxial a RJ45 que se muestran a continuación:


Este conector lo utiliza el conmutador MITEL de donde tome el E1.


Y aquí el conector de la marca AC and E, 408809069 K162.

De momento es todo configuraciones mas especificas quedan fuera de esta guía, quedan puntos pendientes como instalar una tarjeta Digium junto con la Sangoma, la instalación de Wanpipe en Debian que esperamos abordar en otro momento. Saludos dejo las paginas de donde se tomo la información.

Referencias:
http://code.google.com/p/openr2/downloads/list
http://wiki.sangoma.com/wanpipemon-T1-E1-line-alarms-0
http://www.fonality.com/trixbox/forums/vendor-forums-certified/sangoma/sangoma-a101d-alarm-redon-lofon
http://wiki.sangoma.com/konrads-cheat-sheet
http://wiki.sangoma.com/mfcr2
http://wiki.sangoma.com/wanpipe-linux-asterisk-debugging#pri_span_debugging
http://wiki.sangoma.com/wanpipe-linux-asterisk-appendix
http://libopenr2.org
http://code.google.com/p/openr2/downloads/list
http://edocs.mitel.com/UG/EN/5312-5324_SIP7.2_UG_GA.pdf
http://sangoma.com/assets/docs/misc/MFCR2_and_Sangoma_English.pdf

Ancho de banda y codecs.

Me llego una pagina de servicios en la nube, el famoso cloud computing, probando las posibilidades que ofrece instale un par de servidores linux para verificar unas ideas que traigo, y en eso se me ocurrió verificar el ancho de banda que ofrecen estos servicios y hacer una observación gráfica de diferentes codecs de audio existentes en Asterisk y en un teléfono IP Aastra que cayo en mis manos.

Después de la instalación de Debian GNU/Linux y Asterisk, creamos un sencillo dialplan con el fin de crear un contador usando los dígitos existentes en el paquete de sonidos.

[default]
exten => 200,1,Goto(test,s,1) 

[test] 
exten => s,1,Answer() 
exten => s,n,Set(COUNT=${DB(test/count)}) 
exten => s,n,GotoIf($[${ISNULL(${COUNT})}]?:continue) 
exten => s,n,Set(DB(test/count)=1) 
exten => s,n,Goto(1) 
exten => s,n(continue),NoOp() 
exten => s,n,SayNumber(${COUNT}) 
exten => s,n,Set(COUNT=$[${COUNT} + 1]) 
exten => s,n,Set(DB(test/count)=${COUNT}) 
exten => s,n,Goto(1) 

Aquí vemos la ejecución donde apreciamos que el contador ya se encuentra en el número 1760, para este caso la ejecución es en GSM sin embargo cada llamada fue realizada con el codec correspondiente y para evitar conversión de un codec a otro (transcoding) se instalaron los paquetes de sonidos de cada uno de ellos.

agua*CLI> 
  == Using SIP RTP CoS mark 5
    -- Executing [200@default:1] Goto("SIP/1000-00000013", "test,s,1") in new stack
    -- Goto (test,s,1)
    -- Executing [s@test:1] Answer("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:2] Set("SIP/1000-00000013", "COUNT=1759") in new stack
    -- Executing [s@test:3] GotoIf("SIP/1000-00000013", "0?:continue") in new stack
    -- Goto (test,s,6)
    -- Executing [s@test:6] NoOp("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:7] SayNumber("SIP/1000-00000013", "1759") in new stack
    --  Playing 'digits/1.gsm' (language 'en')
    --  Playing 'digits/thousand.gsm' (language 'en')
    --  Playing 'digits/7.gsm' (language 'en')
    --  Playing 'digits/hundred.gsm' (language 'en')
    --  Playing 'digits/50.gsm' (language 'en')
    --  Playing 'digits/9.gsm' (language 'en')
    -- Executing [s@test:8] Set("SIP/1000-00000013", "COUNT=1760") in new stack
    -- Executing [s@test:9] Set("SIP/1000-00000013", "DB(test/count)=1760") in new stack
    -- Executing [s@test:10] Goto("SIP/1000-00000013", "1") in new stack
    -- Goto (test,s,1)
    -- Executing [s@test:1] Answer("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:2] Set("SIP/1000-00000013", "COUNT=1760") in new stack
    -- Executing [s@test:3] GotoIf("SIP/1000-00000013", "0?:continue") in new stack
    -- Goto (test,s,6)
    -- Executing [s@test:6] NoOp("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:7] SayNumber("SIP/1000-00000013", "1760") in new stack
    --  Playing 'digits/1.gsm' (language 'en')
    --  Playing 'digits/thousand.gsm' (language 'en')
    --  Playing 'digits/7.gsm' (language 'en')
    --  Playing 'digits/hundred.gsm' (language 'en')
    --  Playing 'digits/60.gsm' (language 'en')

Cada imagen se obtuvo mediante el programa iftop (aptitude install iftop), para darnos una idea general del uso de ancho de banda de cada codec en un flujo constante de datos, las imágenes muestran una conexión mediante IAX2 y el ejemplo del dialplan esta en SIP sin embargo es igual para ambos caso de un modo general.

Codec ALAW

Codec ULAW

Codec GSM

Codec G722

Codec G729

El ejemplo del contador fue tomado del libro Asterisk: The Future of Telephony.

Creando maquinas virtuales con Red Hat.

Vamos a crear una máquina virtual con Red Hat, instalaremos como prueba una versión de AsteriskNow, subiremos la imagen ISO a nuestro servidor NFS para que sea visible desde nuestros Hypervisors, posteriormente desde nuestro manager realizaremos el procedimiento de asignación de recursos como son cuanta memoria RAM le asignaremos, cantidad de CPU, interfaces de red, espacio en disco y en que Hypervisor iniciara de manera predeterminada.

Hay dos formas de subir la imagen ISO a nuestro almacén NFS, una es mediante la herramienta ISO Uploader y la otra es colocar directamente la imagen en el servidor y posteriormente otorgarle los permisos necesarios para su ejecución.

Una vez que tenemos la imagen, ingresamos a la consola del manager para crear la máquina virtual.

Escogemos el protocolo Spice para manipular la máquina virtual, posteriormente se le activara como en todos los Linux el acceso por SSH para tener una conexión de manera remota.

Después de introducir los datos principales nos solicitara configurar interfaces de red y discos duros virtuales.

Especificamos el nombre de la interfaz, la red a la que se asignara y el tipo de controlador a usar en el dispositivo.

Especificamos el tamaño del disco duro, el storage en donde residirá este disco, el tipo de disco (sistema o datos), que tipo de disco duro sera así como el formato por ultimo especificamos si el sistema operativo iniciara desde este disco.

Realizado esto nos pregunta si requerimos agregar algún componente adicional.

El orden de arranque se coloca aquí, normalmente el primer dispositivo tiene que ser el disco duro, seguido de una unidad de CD con disco (imagen ISO) para poder iniciar la instalación de la imagen previamente colocada en nuestro almacén NFS.

Damos inicio a la carga de nuestra máquina virtual.

Cargando los componentes.

La instalación es igual a que si estuviéramos realizando la instalación en un equipo físico, el sistema operativo reconocera el disco duro asignado así como la interfaz de red.

Realizando las particiones del disco duro, en este caso dejamos las opciones por defecto.

Ajuste del huso horario.

Instalación del sistema con todos sus paquetes.

Finalización de la instalación y el obligatorio reinicio del sistema, en esta parte debemos extraer el CD de la máquina virtual mediante el menú contextual.

Sistema en linea.

Pagina de administración de AsteriskNow visible en la red local.

SAN EqualLogic

Hace pocos meses llego una SAN EqualLogic PS6000XV con 16 discos de 300 GB cada uno, el cual tiene como función principal interactuar con sistemas de virtualización como Red Hat Enterprise Virtualization y Citrix XenServer.

Estos equipos son increíbles dejando un lado el echo de que son muy complejos la interfaz para administrarlos es muy sencilla una vez que entiendes los conceptos de volúmenes, arreglos y la tecnología de iSCSI de manera general.

Aquí se muestra la SAN montada en el rack debajo de un servidor PowerEdge R610.

En su parte posterior se observan las controladoras del equipo con un total de ocho tarjetas de red, aunque realmente solo una es la controladora activa y la otra espera en caso de cualquier percance con la primera, cada controladora tiene conectados un par de sus cables de red (cat6) a un switch diferente considerando el factor de disponibilidad, también se aprecian las fuentes de poder conectadas cada una de ellas en circuitos independientes en caso de falla de corriente eléctrica en alguno de ellos.

La parte de la conectividad se compone de una par de switch PowerConnect 5424 que están dedicados al trafico iSCSI, como mencionamos anteriormente en la imagen anterior la mitad de las conexiones de la SAN se encuentran en un switch y la otra mitad en el otro, hacemos lo mismo para los servidores que accederán a los volúmenes creados posteriormente en la SAN mediante un bond de tarjetas de red, una interfaz se conecta a un switch y la otra de igual manera de esta manera aunque falle uno de los switch tendremos acceso a los recursos de la SAN.

Los cables azules conectan ambos switch (imaginemos el cascadeo tradicional entre estos dispositivos) en cada equipo se reservan cuatro puertos para realizar esta conexión. A cada puerto elegido se le modifican ciertos parámetros que los hacen diferentes a los otros principalmente la opción de Jumbo Frame y de que su función es solamente comunicarse con los puertos del otro switch.

Una visión general de la SAN en conjunto de los servidores que tienen la función de hypervisor con Xen y KVM.

La pantalla de administración de la SAN muestra una gráfica con la capacidad del grupo que se compone de: espacio libre, utilizado y el reservado para snapshots, así como una relación de los volúmenes existentes.

Trataremos de seguir escribiendo algo acerca de este equipo y otras experiencias con la virtualización.

Gnash en 64 bits.

Como sabemos el soporte de Adobe para flash en Linux 64 bits esta mas que muerto: http://labs.adobe.com/technologies/flashplayer10/64bit.html

Hoy en día una pagina que no requiera el plugin de flash para desplegar su contenido es algo difícil de ver cotidianamente.
Gnash es un muy buen proyecto que si bien logra reproducir mucho del contenido flash de cualquier pagina web, la pagina mas famosa que requiere este plugin estaba negada para el.

Sin embargo parece ser que los chicos de Arch Linux, se han puesto las pilas y nos han regalado una actualización con la cual ya es posible visualizar desde youtube cualquier vídeo, para muestra la siguiente imagen.

http://www.gnu.org/software/gnash/
http://www.archlinux.org/

Protocolo SPICE para escritorios virtuales en Linux.

Aprovechando que seguimos en pruebas con RHEV, pasaremos a checar un punto especifico de esta solución que son los escritorios virtuales, segun nos quieren vender la idea de que con solo una PC ligerita en cuanto a recursos y un navegador web podemos tener acceso a ‘n’ escritorios remotos usando el protocolo Spice que a simple vista tiene cosas bastante interesentas en cuanto a desempeño, facilidad de uso al interactuar con el escritorio virtual y poco costo con respecto al uso de ancho de banda.

Si bien esta aplicación no tiene ningún problema para instalarse en IE mediante un ActiveX, la cosa cambia con respecto a Firefox en Linux.

Aquí existen dos caminos si contamos con una suscripción de RedHat obviamente tenemos acceso a actualizar nuestro sistema y todo el contenido que sigue a continuación en teoria (no cuento con una suscripción) se reduciría al siguiente comando: yum install spice-xpi

En CentOS existe el paquete sin embargo los paquetes de los cuales depende no, al menos no los encuentras en los repositorios predeterminados, pero con un tiempo de busqueda enrpm.pbone.net es facil hallarlos a todos.

El paquete en cuestión se llama spice-xpi, el cual depende de qspice-client y este a su vez depende de unos paquetes mas, como podemos ver en las dependencias faltantes que se muestran a continuación al tratar de instalar estos paquetes.

[root@localhost gabriel]# rpm -ivh spice-xpi-2.2-1.el5_5.i386.rpm
warning: spice-xpi-2.2-1.el5_5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        liblog4cpp.so.4 is needed by spice-xpi-2.2-1.el5_5.i386
        log4cpp is needed by spice-xpi-2.2-1.el5_5.i386
        qspice-client is needed by spice-xpi-2.2-1.el5_5.i386
[root@localhost gabriel]# rpm -ivh qspice-client-0.3.0-2.el5_5.i386.rpm
warning: qspice-client-0.3.0-2.el5_5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        libboost_program_options.so.2 is needed by qspice-client-0.3.0-2.el5_5.i386
        libboost_thread.so.2 is needed by qspice-client-0.3.0-2.el5_5.i386
        libcelt051.so.0 is needed by qspice-client-0.3.0-2.el5_5.i386
        liblog4cpp.so.4 is needed by qspice-client-0.3.0-2.el5_5.i386
        libqavcodec.so.51 is needed by qspice-client-0.3.0-2.el5_5.i386
        libqavutil.so.49 is needed by qspice-client-0.3.0-2.el5_5.i386
        libqcairo.so.2 is needed by qspice-client-0.3.0-2.el5_5.i386

Por lo tanto los paquetes necesarios son los siguientes:

boost-1.33.1-10.el5.i386.rpm
celt051-0.5.1.3-0.el5.i386.rpm
log4cpp-1.0-9.el5.i386.rpm
qcairo-1.8.7.1-3.el5.i386.rpm
qpixman-0.13.3-4.el5.i386.rpm
qspice-client-0.3.0-2.el5_5.i386.rpm
spice-xpi-2.2-1.el5_5.i386.rpm

Después de instalarlos volvemos a ejecutar nuestro paquete para agregar el plugin a Firefox.

[root@localhost gabriel]# rpm -ivh spice-xpi-2.2-1.el5_5.i386.rpm
warning: spice-xpi-2.2-1.el5_5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:spice-xpi              ########################################### [100%]

Verificamos que el plugin se haya instalado correctamente en Firefox.

Debemos desactivar SELinux o ponerlo en modo permisivo de lo contrario no dejara ejecutar Spice, obteniendo en mensaje como este:

Jul 19 16:47:40 localhost setroubleshoot: SELinux is preventing spicec
from loading /usr/lib/libqavcodec.so.51.71.0 which requires text relocation.
For complete SELinux messages. run sealert -l 1b920bdf-119e-46fb-b812-894ca58fc943

Volvemos a ejecutar nuestra aplicación para acceder con nuestro respectivo usuario.

De esta manera ya podremos visualizar y trabajar con nuestro escritorio virtual que en este caso es un Windows XP.

Esto funciona para distribuciones Linux basadas en RPMS (Red Hat 5.5, Fedora 12, CentOS 5.4), es asignatura pendiente instalar este plugin de Firefox para Debian o Arch, que son las distribuciones que actualmente uso de manera predeterminada.

Mas información:

http://www.redhat.com/about/news/prarchive/2009/spice-os.html
http://www.spice-space.org/
http://www.redhat.com/virtualization/rhev/desktop/

Gusano Kido y Wireshark

Los virus, gusanos y demás son un problema nefasto una vez que caemos en las garras de uno, es común encontrar tantas fallas como soluciones existentes para estos enemigos informáticos enfocados hacia el sistema operativo mas popular del mundo: Windows.

A pesar de que Windows es un sistema con muchas fallas y virtudes, debemos reconocer que la gran mayoría de las veces el que un equipo se vea afectado por problemas de virus es por falta de actualizaciones del propio sistema, antivirus desactualizado o ausencia del mismo y la mas posible de las causas; descuido del usuario.

Si un virus o gusano se mete en tu computadora personal puede ser una tragedia, ahora si un virus logra afectar a la red de una empresa esto se traduce muchas veces en una sola cosa: perdida de dinero.

Formas de prevención hay muchas pero si por alguna razón el problema ya lo tienes encima ya sea por que tus sistemas no estaban actualizados con los parches de Microsoft para evitar esta vulnerabilidad (MS08-067, MS08-068, MS09-001) o por algún descuido en el manejo de tu antivirus, lo único que queda es actuar rápido y con algo de paciencia.

En este caso que presento a continuación despues de verificar varios equipos en la red que se encontraban infectados, y para saber en concreto que maquinas estaban propagando el virus y para dar un ejemplo util de utilización de Wireshark nos pusimos a capturar todos los paquetes en un determinado equipo y a esperar que el antivirus reportara una posible infección para verificar desde que equipo se habia originado la misma, obviamente que al ser un gusano este se encuentra por toda la red y la infección pude venir de cualquier dirección IP, sin embargo esta puede ser una manera rápida de identificar ciertos equipos y neutralizarlos rápidamente.

La alimaña en concreto es un gusano llamado Net-Worm.Win32.Kido.ih que utiliza las direcciones IP de los equipos registrados en “Mis sitios de red” para seguir propagandose, en la imagen adjunta vemos exactamente como es infectado el equipo en cuestion pero afortunadamente nuestro antivirus detecta y elimina a tiempo el gusano. Un bocado interesante para este gusano puede ser por ejemplo un servidor Windows con Active Directory, ya que toda maquina en dominio o al ingresar a este automáticamente sera infectada.

Capturando los paquetes.

Obviamente no es buena forma estar esperando equipo por equipo a que se presente algún registro que nos permita actuar, si cuentas con un sistema de administración centralizada de un antivirus lo mejor es atacar desde ahi para lanzar actualizaciones y metodos de desinfección para todos tus equipos registrados, Kaspersky cuenta con una herramienta para tal situación llamada KK (Kido Killer) que es exactamente lo que necesitas para eliminar este gusano.

Información del gusano en cuestión desde Viruslist. Link.
Metodos para la desinfección de tus equipos ya sea de manera local o mediante la consola de administración desde el sitio de Kaspersky. Link.

A pesar de todo es fascinante la manera en que estos programas se replican por toda la red aunque nosotros al menos ya estamos controlando la invasión.

Probando Red Hat Enterprise Virtualization

Pues siguiendo con la virtualización aquí mostramos una pantalla del manager de Red Hat para su hypervisor, de su producto Red Hat Enterprise Virtualization.

El manager para el control de las maquinas virtuales.

Un maquina virtual con Windows 7.

Server 2003 en una maquina virtual.

Tiene algunos detalles pero sin duda es una buena alternativa (en la parte económica) contra otros productos como VMware o Citrix.

Virtualización con KVM

KVM es una solución para implementar virtualización completa con Linux sobre hardware x86.
Así que aprovechando los recursos con los que cuenta el área de sistemas haremos uso de un servidor ocioso.

El equipo donde realizaremos las pruebas necesarias es un PowerEdge T110 con la distribución Debian Lenny instalada a partir de su versión net-install, por lo cual contaremos con un sistema básico pero mas que suficiente para nuestro cometido. A medida que necesitemos paquetes los instalaremos según se requiera, cabe resaltar que el modulo KVM ya se encuentra incluido en nuestro kernel instalado con nuestra distribución.

Antes que nada debemos verificar que el procesador del equipo soporte la virtualización.

$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

http://www.linux-kvm.org/page/FAQ#How_can_I_tell_if_I_have_Intel_VT_or_AMD-V.3F

Si el comando anterior nos arroja algún resultado nuestro procesador es idóneo para la virtualización en caso contrario no podremos hacer uso de KVM.

instalamos los paquetes necesarios.

# aptitude install kvm kvm-source

En la medida que se configuran los paquetes de manera automática en debian, si recibimos las siguientes lineas es por que no habilitamos en el BIOS de nuestro equipo la opción de virtualización.

Setting up kvm (72+dfsg-5~lenny5) ...
FATAL: Error inserting kvm_intel (/lib/modules/2.6.26-2-686/kernel/arch/x86/kvm/kvm-intel.ko)
: Operation not supported
Module kvm_intel failed to load failed!
invoke-rc.d: initscript kvm, action "start" failed.

http://www.linux-kvm.org/page/FAQ#.22KVM:_disabled_by_BIOS.22_error

kvm disabled by bios

En el equipo con el que estoy realizando esto entramos a la configuración del BIOS, en el menú de “Processor Settings” encontraremos la opción llamada “Virtualization Technology” la cual deberemos habilitar para poder trabajar con la virtualización por hardware.

Instalamos qemu para crear nuestros discos virtuales (y muchas cosas mas).

# aptitude install qemu

Si pretendemos que nuestras maquinas virtuales sean a nivel de red como un dispositivo físico mas debemos instalar el siguiente paquete y configurar ciertos parámetros en nuestro sistema anfitrión para poner su red en modo “bridge”.

# aptitude install bridge-utils

Debemos realizar unos cambios en nuestro archivo de configuración de red para modificar las interfaces, el contenido de mi archivo “interfaces” (/etc/network/interfaces) es el siguiente:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.161
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.254
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

Reiniciamos los servicios de red.

# /etc/init.d/networking restart

Hecho esto al asignarle una dirección IP a nuestra maquina virtual esta sera como cualquier otro dispositivo en la red.

Realizaremos una instalación para ver que tal luce la nueva beta de Red Hat en su versión 6, la cual podemos descargar desde el siguiente enlace: ftp://ftp.redhat.com/pub/redhat/rhel/beta/6/i386/iso/RHEL6.0-20100414.0-AP-i386-DVD1.iso

Creamos un disco duro de unos 30 GB.

$ qemu-img create disk.RHEL -f qcow2 30G
Formatting 'disk.RHEL', fmt=qcow2, size=31457280 kB

Iniciamos la maquina virtual indicando que inicie desde cdrom a partir de una imagen ISO para instalar el sistema, asignamos 1256 MB de memoria RAM, le indicamos modelo y parámetros de tarjeta de red, teclado en español e iniciar un servicio VNC para visualizar la maquina virtual.

# kvm -hda disk.RHEL -cdrom ../RHEL6.0-20100414.0-AP-i386-DVD1.iso -boot d -m 1256 -k es -net nic,vlan=0,model=rtl8139 -net tap,vlan=0 -vnc :0

Terminada la instalación ahora iniciamos desde la imagen del disco duro.

# kvm -hda disk.RHEL -m 1256 -k es -net nic,vlan=0,model=rtl8139 -net tap,vlan=0 -vnc :0

Sistema RHEL instalado y navegando en Internet.

Un SUSE en plena instalación.