Notice: This guide is not very well written. And to be quite frank the Cisco SIP firmware is quite neurotic so it is only here for reference now. I can help a little bit but since writing this have moved to a CallManager and couldnt be happier with it. I highly recomend either you buy newer Cisco phones which are designed to work with Asterisk or you just buy anyother SIP phone and have a painless experence. the 7900's are not very good with SIP looking back on it.

This guide is going to be quite rough and it is purely for my own documentation as I have spent more time than is deemed safe on these Cisco phones but once you conquer one it becomes stupidly easy and they make very cheap and incredibly well built IP phones and at the moment my entire home VOIP system uses a varity of Cisco 7900 phones because their solid and stupidly simple to use just a pain to configure.

So lets start by saying this guide is for the 7970/79x1 series phones, these are the phones which use XML config files vs TXT (7940/7960) or even worse binary config files(7912, old 7960/7940 fw)

Tested on my 7911, 7941, 7970 & 7971 but should apply to all other XML config phones with SIP firmware.

This guide is going to focus on the server side mostly and a little bit of the phones config file but I will not be going over how to update these to SIP firmware pleanty of guides on this already.

Make extension in Asterisk/Freepbx

so lets get started first thing is obvuslly create a extension for the phone in Asterisk/Freepbx, THIS HAS TO BE A CHAN_SIP EXTENSION AND NOT CHAN_PJSIP

your secret must also only be 8 characters long as well so the auto generated one will not do.

Set the NAT Mode to never, leave the port at 5060 and qualify should be set to no. Cant hurt to also change SendRPID to "Send Remote-party-id" and enable Trust RPID so you get correct caller ID on transfers and outgoing calls.

I would also consider switching the transport to TCP only but this would require a change in the phone and asterisk config files and I found the default UDP works fine unless you plan to use the usecallmanager patch.

Thats your extension created, I did this in Freepbx so just read above I did it in the order the options appear in the settings.

Asterisk Server Settings

Now here is an important step that is easy to miss. You need to change the settings for the CHAN_SIP driver before the phones will register.

Again I am using Freepbx for simpliity. to get started go to the settings menu and click Asterisk SIP settings.

First make sure that the external address and local networks are set and that the ULAW codec is enable then save the settings.

Then open the CHAN_SIP settings from the menu on the right.

Set NAT to no, Reinvite to No, make sure the bind port is 5061 and disable SRV lookups.

Save that and you should be done on server side of things

Phone Config

so this is the part that is super annoying and mostly because one small mistake can make the entire config invalid.

So I am going to save you time by linking my config file that works. It is a minimal config designed to get the phone ringing as quick as possible.

This is a nice base config that works with CHAN_SIP on port 5061 just add the NTP IP, ASTERISK IP, and Extension number/Secret and upload it as SEPxxxxxxxxxxxx.cnf.xml (where x = phone mac address in all caps) reboot the phone and with any luck it will register and start working.

Other solutions

so if any of this is too much work then you might want to pay attention to my GitHub as I am working on a project codenamed CiscoSIPConfigServer which is as the name implys a nice GUI for making the XML config files and serving them with TFTP

Currently not operational but will leave it here as it should be done in a few months (very busy at moment)