Working with Interface Configuration Files

In this chapter, we’re going to build an Asterisk configuration on the platform we have just installed. For the first few sections on FXO and FXS channels, we’ll assume that you have a Digium TDM11B kit (which comes with one FXO and one FXS interface). This will allow you to connect to an analog circuit (FXO) and to an analog telephone (FXS). Note that this hardware interface isn’t necessary; if you want to build an IP-only configuration, you can skip to the section on configuring SIP.

The configuration we do in this chapter won’t be particularly useful on its own, but it will be a kernel to build on. We’re going to touch on the following files:


Here, we’ll do low-level configuration for the hardware interface. We’ll set up one FXO channel and one FXS channel. This configures the driver for the Linux kernel.


In this file, we’ll configure Asterisk’s interface to the hardware. This file contains a slightly higher-level configuration of the hardware in the Asterisk user-level process.


The dialplans we create will be extremely primitive, but they will prove that the system is working.


This is where we’ll configure the SIP protocol.


This is where we’ll configure incoming and outgoing IAX channels.

In the following sections, you will be editing several configuration files. You’ll have to reload these files for your changes to take effect. After you edit the zaptel.conf file, you will need to reload the configuration for the hardware with /sbin/ztcfg -vv (you may omit the -vv if you don’t need verbose output). Changes made in zapata.conf will require a module reload from the Asterisk console; however, changing signaling methods requires a restart. You will need to perform an iax2 reload and a sip reload after editing the iax.conf and sip.conf files, respectively.

In order to test the new devices we have defined, we must have a dialplan through which we can make connections. Even though we have not discussed the Asterisk dialplan (that’s coming up in the next chapter), we want you to create a basic extensions.conf file so that we can test our work in this chapter.

Make a backup copy of the sample extensions.conf (try the bash command mv extensions.conf extensions.conf.sample), and then create a blank extensions.conf file (using the bash command touch extensions.conf), and insert the following lines:






include => internal


In the [general] section, we have set autofallthrough=yes, which tells Asterisk to continue when an extension runs out of things to do. If you set this to no, then Asterisk will sit and wait for input after all priorities have executed. This is most prevalent if the Background() application is the last application executed in an extension. If set to yes (which is now the default in 1.4), Asterisk will drop the call after Background() finishes executing (at the end of the prompt(s) supplied to it). In order to force Asterisk to wait for input after the Background() application finishes playing the voice prompts supplied to it, we use the WaitExten() application.

Do not be afraid if what we’ve just written doesn’t make a whole lot of sense, as we haven’t explored the dialplan, applications, priorities, or extensions yet (that is coming up in the next chapter). So for now, just set autofallthrough=yes. It is safest to use the autofallthrough=yes command as we don’t want Asterisk hanging around waiting for input unless we explicitly tell it to do so.

There is nothing else for now, but we’ll be using this file as we go through this chapter to build a test dialplan so we can ensure that all of our devices are working. Also, be sure to run the dialplan reload command from the Asterisk CLI to update to the latest changes. Verify your changes by running the CLI command dialplan show:

*CLI> dialplan show
[ Context 'phones' created by 'pbx_config' ]
  Include =>        'internal'                                    [pbx_config]

[ Context 'internal' created by 'pbx_config' ]

[ Context 'incoming_calls' created by 'pbx_config' ]

[ Context 'default' created by 'pbx_config' ]

[ Context 'parkedcalls' created by 'res_features' ]
  '700' =>          1. Park((null))                               [res_features]

-= 1 extension (1 priority) in 5 contexts. =-


You will see the parkedcalls context because it is an internal context to Asterisk, specified in the features.conf file.