Configuration of T1/E1 signaling in Asterisk (chan_dahdi and libpri)

Configuration of T1/E1 signaling in Asterisk (chan_dahdi and libpri)

In this article, we will compile the chan_dahdi module and add T1/E1 support in Asterisk 16 on CentOS 7. As the difference between T1 and E1 is mainly where it is used (T1 – US, Canada, Japan; E1 – Europe and others countries), for the sake of simplicity, I will use the notation E1 in this post.

The following material will assume that you already have Asterisk installed. If not, you can see that post

We will also assume that you have the appropriate permissions to perform the action as root. If not, add before the command "sudo" e.g. "sudo yum -y install pciutils"

Table of Contents

1) What is an E1 link?

The E1 link usually works on a twisted pair cable. The throughput is 2048 kb/s, the link works in full duplex mode. The transmission time of a single data portion (so-called frame) on the E1 link is divided into 32 time slots marked TS0 – TS31. The transmission of a single frame takes 125 μs (8000 transmissions per second). During this time, 8 bits of information are sent in each slot, hence the throughput of a single channel (8000/s x 8 bit = 64 kb/s) and the entire link (32 x 64 kb/s = 2048 kb/s).

In simple terms: a single E1 link allows us 30 simultaneous connections (two channels are used for HDLC frame tests). In the era of analog telephony, it was a high standard that many companies still use today.

2) Hardware and cabling

For testing we will use:

  • Digium TE210P/TE212P controller
  • ethernet cable
  • Yeastar TE100 gate –
  • Dahdi and Pri drivers (links later in the post)

It is worth remembering that the E1 / Pri / Pra / signaling, whatever you want to call it, requires a specially cross-over cable, in accordance with the table below or documentation available, e.g. on the website of the tested gate.

3) Installation of dahdi-linux and dahdi-tools packages

You can use the following command to verify that the installed card is correctly detected:


If you see an error like "lspci: command not found", it is worth installing the pciutils package with the command:

					yum -y install pciutils

In our case, the controller was found: “Communication controller: Digium, Inc. Wildcard TE210P/TE212P dual-span T1/E1/J1 card 3.3V (rev 02)”

Next, we will download the source files that we will use to complicate the chan_dahdi module.

					cd /usr/src/
tar -zxvf dahdi-linux-current.tar.gz
tar -zxvf dahdi-tools-current.tar.gz

We will start with dahdi-linux.

					cd dahdi-linux-*

If you see an error like "You do not appear to have the sources for the 3.10.0-1160.76.1.el7.x86_64 kernel installed" then you need to install the linux kernel headers.

					yum -y install kernel-devel kernel-headers

After installation, run make again.


Then we will install the dahdi-linux package to the end.

					make install

In the next step, install the second of the downloaded packages, i.e. dahdi-tools.

					cd /usr/src/dahdi-tools-*

If ./ generates the error "Generating the configure script ... error: possibly undefined macro: AC_PROG_LIBTOOL" means that you need to install the libtool package and run the ./ command again

					yum -y install libtool

In turn, the ./configure command may display "configure: error: cannot find install-sh,, or shtool in auxdir "."/auxdir". In this case, additionally execute the following commands and run ./configure again

automake --add-missing

After successfully executing ./ and ./configure, we can proceed to compile the package.

					make all
make install
make install-config

If everything went without errors, we can now use a whole set of commands, such as: 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 and dahdi_waitfor_span.

However we, as intended, will starting by automatically generate the configuration, only for our card.

					dahdi_genconf modules

Before we start the configuration, check which user the Asterisk service is running on. In our case, this is the user and group ‘asterisk’.

If you want to know how to change the user, check out this post.

Then adjust the contents of the /etc/udev/rules.d/dahdi.rules file to our actual settings. Otherwise we will see an error “Unable to open master device '/dev/dahdi/ctl'

4) Compilation of the module

Our configuration is ready. Now it’s time to compile the main module, which at this stage most likely does not exist in the Asterisk modules directory.

If you don’t have the source files, you can download them from the website: and then unzip as is shown in this post.

Just recompile Asterisk and our module will be created.

					cd /usr/src/asterisk-*
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
make menuselect
make install

If we have ‘autoload’ set to ‘yes’ in /etc/asterisk/modules.conf, we don’t need to do anything else.

If you enter the modules manually, you should add: load =>

We want to make sure that all drivers and cards have been loaded correctly, so it’s best to restart the server at this point.


At this stage, we already have the channel module, but we do not have the configuration, i.e. the chan_dahdi.conf file.

It is recommended to create separate chan_dahdi.conf (for software) and dahdi-channels.conf (for hardware) files. Although, of course, you can fit them into one file.

To generate at least part of the configuration, we will automatically execute the dahdi_genconf command.

					dahdi_genconf -v

If you run dahdi_cfg -v first, you will get a missing file error:
"line 0: Unable to open configuration file '/etc/dahdi/system.conf'".

Therefore, dahdi_genconf with the appropriate parameter should be executed first.

					dahdi_genconf system (for a single file /etc/dahdi/system.conf)
dahdi_genconf -v (for a set of configuration files)

It is worth reviewing the generated files and making the necessary corrections. For example in /etc/dahdi/system.conf you may want to change the zone from ‘us’ to ‘pl’

We can now run the following command without any problems:

					dahdi_cfg -vvvvv

From now on, the ports on the card should start blinking red.

We only have two things left.

First, we’re still missing the chan_dahdi.conf file. If you built the system according to our other posts, then you should have a samples directory from which you can copy this file.

					cd /etc/asterisk/samples
cp chan_dahdi.conf /etc/asterisk

If you don’t have this directory, you can download a single file directly from the asterisk repository.

					cd /etc/asterisk/
mv chan_dahdi.conf.sample chan_dahdi.conf

Modify the file according to your needs, and add the line #include dahdi-channels.conf at the end, which will load our automatically generated configuration file.

In our case, we are running the system as user/group ‘asterisk’, so we will also change the owner of newly created files.

					chown asterisk:asterisk chan_dahdi.conf
chown asterisk:asterisk dahdi-channels.conf

In the Asterisk console (asterisk -r) we will see our device.

					dahdi restart
dahdi show status

At this point we could finish our tutorial ….. if we were configuring a regular digital card.

However, this post describes more than an ISDN adapter. We are talking about port E1. So, unfortunately, the console throws us an error about unrecognized signaling.

"ERROR[2124]: chan_dahdi.c:18579 process_dahdi: Unknown signaling method 'pri_cpe' at line 14."

We also have Red Alarms indicating out of sync:

"chan_dahdi.c:7518 handle_alarms: Detected alarm on channel 1: Red Alarm
-- Reconfigured channel 1, ISDN PRI signaling"

In order for our card to start working in 100%, we need to go back a bit and add the libpri library to our Asterisk.

5) Adding libpri for E1 signaling support

So let’s download and compile the additional library.

					cd /usr/src
tar -zxvf libpri-current.tar.gz
cd libpri-*
make install

Let’s also recompile Asterisk.

					cd /usr/src/asterisk-*
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
make install

This time, the “dahdi restart” command in the Asterisk console will not throw us an error about unknown signaling.

6) Configuration tests

If you have a device with an E1/T1 port, you can simply clamp the cable according to the instructions mentioned at the beginning and the matter will be clear.

If the card has two ports, they should light up green when plugged in.

If you have a second server or some external gateway, then there should be no problem with synchronization.

If you do not have any of the above, you can perform an internal test using the previously downloaded dahdi-tools package. Due to the fact that the test requires port is not occupied by any service, we will additionally disable Asterisk.

Otherwise, we may get the error "DAHDI_SPECIFY ioctl failed: Device or resource busy"

During the test, you will see that port 1 on the card starts flashing green.

					# stopping Asterisk
systemctl stop asterisk

cd /usr/src/dahdi-tools-*

make patlooptest
# Enable digital loopback on span 1
dahdi_maint -s1 -l localhost
# Run a test on channel 1
# If it finishes without errors, you are looping through the data correctly

./patlooptest 1 -t 10
# Disable the local loop to resume proper operation of the card
dahdi_maint -s1 -l off

# restarting the Asterisk service
systemctl start asterisk

And that’s it for the installation and initial configuration of digital cards with support for the chan_dahdi channel and the libpri library.

Good luck!

If you would like to monitor everything that is happening on your PBX, try our proprietary VOIPERO software.

The system arleady has launched and now is completely FREE. Setup takes only a few minutes.


Read what our VOIPERO system can do in terms of live monitoring and reporting of VoIP systems based on Asterisk.

Share this post

Do you have questions or you need an offer?

Contact us!

Most popular

Related Posts

We Have Launched

Monitoring & Reporting of Your VoIP Server