Cisco 79XX Series VoIP Phones

From London Hackspace Wiki

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

The venerable Cisco 7970


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.