in Telephony

provisioning a new SPA-941 IP phone with Asterisk

I recently returned my fancy-pants Cisco 7960G IP phone to Devlin, and in its place I purchased a Linksys (formerly Sipura) SPA-941. I’d spoken with my friend & colleague Dan Fraser over at One Stop Media who are using these handsets quite successfully in conjunction with an Asterisk PBX system, so I decided to pick one up. Dan specifically recommended against the SPA-841, saying the voice quality was poor, and although he said the Grandstream sets (such as the GXP-2000) have decent sound quality, they are really ugly, and I have to agree. I wanted a decent-looking set that I could also autoprovision using TFTP and evangelize to people on the road about VoIP.

The phone came with a decent instruction sheet on how to provision the phone manually; basically one can just plug it into any DHCP-enabled network, and then use the phone’s softkeys to find the IP address, and fire that up in your web browser. One can then set all the required parameters manually such as the SIP proxy, etc. However, I decided to try and provision the phone using a TFTP server, i.e. using the tftp-server-name option in ISC DHCPD to tell the phone where to get its configuration.

The SPA-941 supports a multi-level configuration hierarchy just like the Cisco 7960 did. That is, the phone will request a global spa941.cfg from the TFTP server, and this file is meant to indicate the specific .cfg that the phone will use to retrieve its other configuration parameters. My spa941.cfg has the following:

  <Profile_Rule ua="na">/spa$MA.cfg
 <Resync_Periodic ua="na">5

This indicates to the firmware that the profile specific to this handset is to be found in the file /spa$MA.cfg, where $MA is the MAC address of the handset. The spa$MA.cfg for each handset specifies the rest of the parameters, such as SIP proxy, admin password for the handset, and so on, and it is also XML-based. Normally one is supposed to create this file using a Windows-based tool from Linksys, but one can also hack it together from some of the information provided by other users.

I’m slowly sorting through the myriad of configuration options available in Sipura’s XML. A few items still baffle me:

  1. Where does one find a list of all the variables interpreted by the firmware (such as $MA), what do they represent, and what values are they set to?
  2. The <Time_Zone> sets the local time zone of the phone, but how about daylight savings? I see a <Daylight_Saving_Time_Rule> option but I have no idea how to use it.

The only complaint I have thus far about the configuration file format is that the XML isn’t particularly well-designed. It reminds me a lot of the sports data we used to buy from The Sports Network at, where the data was all very flat, and new information would simply result in a new tag at the root level. This doesn’t lead to hierarchical information storage within the XML; I liken it to spreadsheet.

Other than that, the SPA-941 was very easy to provision, even in a simulated mass-deployment scenario, and the handset is quite good. Thanks to Nabeel over at for processing and shipping out my order so quickly.

Write a Comment


  1. I am out in the Caribbean and was happy to come across your post and to find someone who had managed to successfully provision the Linksys SPA941 with Asterisk.

    I am now setting up Asterisk for the first time with a couple of SPA941s and a 4-port Digium card (3fxo and 1fxs ports). I have one line so far plugged into the Digium for testing. I can log into the Asterisk system and access all the files etc.

    I was able to configure the Linksys phones using the Sipura web interface OK (set time/date/display names etc), but they both show they are not registered, so I get no dial tones. Is there a step that I'm missing…maybe on the trunks side? Or have I set up the SIP extensions incorrectly. I'd be happy to email any screen shots necessary to help me resoolve this.

    Thanks in advance.