Cisco 79XX Series VoIP Phones
Around the Hackspace we use the once ubiquitous Cisco 79XX series of VoIP phones.
This page is a work in progress, documenting provisioning caveats as we find them
XML Directories
The Cisco 79XX series support directories formatted in XML, downloaded over HTTP. These can be static, or generated dynamically.
The documentation on getting the directories working is scattered all over the internet, with lots of unanswered forum posts, wrong information, or huge PDFs. I will document some brief notes here so I remember in future.
Phone Configuration
In the SEPXXXXXXXXXXXX.cnf.xml provisioning file, the directoryURL should be directed to a menu rather than straight to a directory:
<directoryURL>http://172.31.24.47/cisco/directory-menu.xml</directoryURL>
Webserver Configuration
The webserver must return the content type as text/xml or it will fail:
Content-Type: text/xml
Various documentation also states the following headers are required, although they don't seem mandatory:
Connection: close Expires: -1
XML File Contents
directory-menu.xml should look something like this, consisting of a CiscoIPPhoneMenu with menu options to directories. Note, Title and Prompt are optional.
<CiscoIPPhoneMenu> <Title>Directories</Title> <Prompt>Directories<Prompt/> <MenuItem> <Name>LHS Directory</Name> <URL>http://167.98.98.227:8080/cisco/lhs-directory.xml</URL> </MenuItem> </CiscoIPPhoneMenu>
lhs-directory.xml should look like this, with a maximum of 32 directory entries :
<CiscoIPPhoneDirectory> <Title>LHS Directory</Title> <Prompt>Available Extensions</Prompt> <DirectoryEntry> <Telephone>152</Telephone> <Name>Echo Test</Name> </DirectoryEntry> <DirectoryEntry> <Telephone>155</Telephone> <Name>Hello World</Name> </DirectoryEntry> </CiscoIPPhoneDirectory>
Usage
Once configured, you should be able to press the "Directories" button and see an option for "LHS Directory". Select it, and you will see the available extensions.
Provisioning
The Cisco 79XX handsets pull their firmware and configuration files from a TFTP server. The TFTP server can be specified using DHCP option 150, or hard coded via the front of the phone.
Provisioning Files
Cisco 7942/7970
XMLDefault.cnf.xml
If a phone cannot find its MAC specific configuration file, it will load defaults from XMLDefault.cnf.xml
We primarily use this file to force phones onto specific firmware versions
<Default> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> <mgcpPorts> <listen>2427</listen> <keepAlive>2428</keepAlive> </mgcpPorts> </ports> <processNodeName></processNodeName> </callManager> </member> </members> </callManagerGroup> <loadInformation7 model="IP Phone 7960">P003-8-12-00</loadInformation7> <loadInformation30007 model="CP-7912"></loadInformation30007> <loadInformation115 model="CP-7941G">SIP41.9-4-2-1S</loadInformation115> <loadInformation434 model="Cisco 7942">SIP42.9-4-2SR3-1S</loadInformation434> <loadInformation309 model="Cisco 7941G-GE">SIP41.9-4-2-1S</loadInformation309> <loadInformation435 model="Cisco 7945"></loadInformation435> <loadInformation30018 model="CP-7961">SIP41.9-4-2-1S</loadInformation30018> <loadInformation308 model="Cisco 7961G-GE">SIP41.9-4-2-1S</loadInformation308> <loadInformation404 model="Cisco 7962"></loadInformation404> <loadInformation436 model="Cisco 7965"></loadInformation436> <loadInformation6 model="CP-7970">SIP70.9-4-2-1S</loadInformation6> <loadInformation30006 model="CP-7970">SIP70.9-4-2-1S</loadInformation30006> <loadInformation119 model="Cisco 7971">SIP70.9-4-2-1S</loadInformation119> <loadInformation437 model="Cisco 7975">SIP70.9-4-2-1S</loadInformation437> <loadInformation302 model="Cisco 7985">cmterm_7985.4-1-4-0</loadInformation302> <authenticationURL></authenticationURL> <directoryURL></directoryURL> <idleURL></idleURL> <informationURL></informationURL> <messagesURL></messagesURL> <servicesURL></servicesURL> </Default>
SEPXXXXXXXXXXXX.cnf.xml
The phone will try and download its specific configuration. Replace XXXXXXXXXXXX with the MAC address of the phone, all capitals, no special symbols.
Our file looks like this. Note line 2 is configure to auto answer on speakerphone:
<device> <deviceProtocol>SIP</deviceProtocol> <sshUserId>admin</sshUserId> <sshPassword>[PASSORD]</sshPassword> <devicePool> <dateTimeSetting> <dateTemplate>D-M-Y</dateTemplate> <timeZone>GMT Standard/Daylight Time</timeZone> <ntps> <ntp> <name>pool.ntp.org</name> <ntpMode>Unicast</ntpMode> </ntp> </ntps> </dateTimeSetting> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> <sipPort>5060</sipPort> <securedSipPort>5061</securedSipPort> <sshPort>22</sshPort> </ports> <processNodeName>10.0.20.20</processNodeName> </callManager> </member> </members> </callManagerGroup> </devicePool> <sipProfile> <sipProxies> <registerWithProxy>true</registerWithProxy> </sipProxies> <enableVad>false</enableVad> <preferredCodec>g711</preferredCodec> <natEnabled></natEnabled> <phoneLabel>1F-Kitchen</phoneLabel> <sipLines> <line button="1"> <featureID>9</featureID> <featureLabel>6111</featureLabel> <proxy>USECALLMANAGER</proxy> <port>5060</port> <name>6111</name> <displayName>1F-Kitchen</displayName> <authName>6111</authName> <authPassword>[PASSWORD]</authPassword> <messagesNumber>6111</messagesNumber> </line> <line button="2"> <featureID>9</featureID> <featureLabel>6111</featureLabel> <proxy>USECALLMANAGER</proxy> <port>5060</port> <name>61110</name> <displayName>1F-Kitchen</displayName> <authName>61110</authName> <authPassword>[PASSWORD]</authPassword> <messagesNumber>6111</messagesNumber> <autoAnswer> <autoAnswerEnabled>3</autoAnswerEnabled> <autoAnswerMode>Auto Answer with Speakerphone</autoAnswerMode> </autoAnswer> </line> </sipLines> <dialTemplate>dialplan.xml</dialTemplate> </sipProfile> <commonProfile> <phonePassword></phonePassword> </commonProfile> <loadInformation></loadInformation> <vendorConfig> <g722CodecSupport>2</g722CodecSupport> <headsetWidebandUIControl>0</headsetWidebandUIControl> <handsetWidebandUIControl>0</handsetWidebandUIControl> <headsetWidebandEnable>1</headsetWidebandEnable> <handsetWidebandEnable>1</handsetWidebandEnable> <webAccess>0</webAccess> <sshAccess>0</sshAccess> <sshPort>22</sshPort> <loginAccess>1</loginAccess> <displayOnTime>08:00</displayOnTime> <displayOnDuration>16:30</displayOnDuration> <displayIdleTimeout>01:00</displayIdleTimeout> </vendorConfig> <versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp> <directoryURL>http://172.31.24.47/cisco/directory-menu.xml</directoryURL> <servicesURL></servicesURL> </device>
Cisco 7941G
This model seems to prefer a different syntax, updates to follow.
Firmware Images
When upgrading from the SCCP firmware, upgrading the SIP firmware, or recovering after a factory reset, the phones request various files documented below.
The *.tlv files appear optional.
Cisco 7941G
term41.default.loads jar41sip.9-4-2TH1-1.sbn cnu41.9-4-2TH1-1.sbn apps41.9-4-2TH1-1.sbn dsp41.9-4-2TH1-1.sbn cvm41sip.9-4-2TH1-1.sbn CTLSEP00215503D3EF.tlv ITLSEP00215503D3EF.tlv ITLFile.tlv SEP00215503D3EF.cnf.xml
Cisco 7942
CTLSEP3CCE73ACD229.tlv ITLSEP3CCE73ACD229.tlv ITLFile.tlv SEP3CCE73ACD229.cnf.xml XMLDefault.cnf.xml SIP42.9-4-2SR3-1S.loads jar42sip.9-4-2ES26.sbn cnu42.9-4-2ES26.sbn apps42.9-4-2ES26.sbn dsp42.9-4-2ES26.sbn
Cisco 7970
CTLSEP00070E5706BE.tlv ITLSEP00070E5706BE.tlv ITLFile.tlv SEP00070E5706BE.cnf.xml XMLDefault.cnf.xml SIP70.9-4-2-1S.loads jar70sip.9-4-2TH1-1.sbn cnu70.9-4-2TH1-1.sbn apps70.9-4-2TH1-1.sbn dsp70.9-4-2TH1-1.sbn cvm70sip.9-4-2TH1-1.sbn
Caveats
NAT
The phones send SIP requests from one port and expect to receive the response on another. This fundamentally breaks NAT, and as far as I can tell there is no work around.
Fortunately, our PBX is on-site so this isn't an issue for us.