Recently I purchased a cheap Cisco 7911 phone off of Ebay. Now, we all know that Cisco doesn’t care about end users, and relies on product quality through their channel partners. If you didn’t buy it from a partner, then tough luck.
In this case, Ebay isn’t a partner, so I had to rely on a friend to download the latest SIP compliant firmware for the 7911 for me. The phone, as I had it, was configured to use Cisco’s SCCP ‘Skinny’ protocol, and talk to a CallManager server. I had other plans. A friend downloaded cmterm-7911_7906-sip.8-4-2.cop for me, which I promptly renamed to cmterm-7911_7906-sip.8-4-2.tar.gz. This allowed it to be ungzipped and untarred into a working directory called 7911.
Now, I already have a working tftp server on my network. I use it for all sorts of netbooting magic. For that reason, I’m not going to cover how to set up tftp, as that’s covered a million times over elsewhere on the internet.
The main task here, is to get the 7911 to load the term06.default.loads file from the tftp server. It would be nice if the 7911 would listen to the filename parameter that can be passed from DHCP, but sadly it seems to only be interested in term06.default.loads at the base of the tftp directory. I tried everything, from matching the hardware substring in dhcpd.conf, to symlinking the mac address to the right file. Ultimately, to keep everything tidy, I put the 7911 directory into my tftp boot directory, and ran the following command.
root@senior:/srv/tftp# for i in 7911/*; do ln -s $i . ; done
This runs through the contents of the 7911 directory, and symlinks them to the base tftp directory. Now, reset the phone with the following procedure.
With the phone turned off, press and hold # while inserting power, either via PoE or mains adaptor. In a second or so, the line buttons start flashing amber. Release # and dial 123456789*0# and then wait. Now is a good time to be running tail -f /var/log/syslog on your tftp server. All being well, you will see logs similar to that below. If this doesn’t work, or nothing appears on the phone display, wait 5 minutes and then try the procedure again, but use 3491672850*# instead.
Dec 29 19:49:16 senior atftpd: Serving term06.default.loads to 172.24.32.28:49152
Dec 29 19:49:17 senior atftpd: Serving jar11sip.8-4-1-23.sbn to 172.24.32.28:49153
Dec 29 19:49:20 senior atftpd: Serving cnu11.8-4-1-23.sbn to 172.24.32.28:49154
Dec 29 19:49:24 senior atftpd: Serving apps11.8-4-1-23.sbn to 172.24.32.28:49155
Dec 29 19:49:44 senior atftpd: Serving dsp11.8-4-1-23.sbn to 172.24.32.28:49156
Dec 29 19:49:47 senior atftpd: Serving cvm11sip.8-4-1-23.sbn to 172.24.32.28:49157
Once it has finished the last file, give the phone a couple of minutes to install and reboot. After a successful reboot, it should be display a Cisco screen with the words ‘Unprovisioned’ at the bottom left. If you continue to watch syslog, you will see that it requests XMLDefault.cnf.xml, CTLSEP001E4AF3D34A.tlv and SEP001E4AF3D34A.cnf.xml on a regular basis. These files handle the provisioning of the phone, from defaults to individual per-phone settings. Further information on the contents of such a file can be found over here. Once you’ve written the required file, save it into the working directory and symlink it to the tftproot as before.
You can then either wait for the phone to download the new file, or reboot the phone. Every time the phone boots, it will request term06.default.loads, as that informs it about the available firmware versions. If there are no changes, it will boot as normal.