Koozali.org: home of the SME Server

Polycom IP320 Phones

Offline compsos

  • *
  • 472
  • +0/-0
Polycom IP320 Phones
« on: August 02, 2008, 10:47:04 AM »
Hi
For anyone else who may have these phones. We found that the provisioning system built in trashes the configuration files and therefore the phones on restarting. The Polycoms are looking for the files in a different format.
Any other experiences comments greatly appreciated.

So far this is working for us.
  • yum --enablerepo=smecontribs install smeserver-tftp-server
  • Download the firmware files from Polycom for your phone
  • cd /tftpboot
  • Expand the firmware in the /tftpboot directory
  • pico sip.cfg "enter your local settings and save as a XXX.cfg
  • mkdir -p overrides contacts logs
  • touch logs/macaddress-boot.log "macaddress = for each phone to be connected"
  • touch logs/macaddress-app.log
  • touch logs/macaddress-appflash.log
  • touch contacts/macaddress-directory.xml
  • pico 00000000.cfg "just change settings for system not a particular ext"
  • note: Change the name of the sip.cfg file to XXX.cfg to avoid an over write as this file is way different to the Sail generated file
  • cp 00000000.cfg overrides/macaddress-phone.cfg "for each ext"
  • cp phone1.cfg phoneExt.cfg "for each ext"
  • pico phoneExt.cfg "Edit for each ext"
  • Start the phone and set the ServerMenu to TrivalFTP
  • Set the ServerAddr to xxx.xxx.xxx.xxx
  • Exit from Menu and Save and Reboot Phone

The result of tail -f /var/log/messages should look like this as the phone restarts
Quote
Aug  2 17:09:31 server dhcpd: DHCPDISCOVER from 00:04:f2:17:94:05 via eth0
Aug  2 17:09:31 server dhcpd: DHCPOFFER on 192.168.0.x to 00:04:f2:17:94:05 via eth0
Aug  2 17:09:36 server dhcpd: DHCPREQUEST for 192.168.0.x (192.168.0.1) from 00:04:f2:17:94:05 via eth0
Aug  2 17:09:36 server dhcpd: DHCPACK on 192.168.0.x to 00:04:f2:17:94:05 via eth0
Aug  2 17:09:38 server in.tftpd[7920]: RRQ from 192.168.0.x filename 2345-12200-002.bootrom.ld
Aug  2 17:09:38 server in.tftpd[7921]: RRQ from 192.168.0.x filename 0004f2179405.cfg
Aug  2 17:09:38 server in.tftpd[7922]: RRQ from 192.168.0.x filename 2345-12200-002.sip.ld
Aug  2 17:09:38 server in.tftpd[7923]: RRQ from 192.168.0.x filename phone5001.cfg
Aug  2 17:09:38 server in.tftpd[7924]: RRQ from 192.168.0.x filename XXX.cfg
Aug  2 17:09:40 server in.tftpd[7925]: RRQ from 192.168.0.x filename overrides/0004f2179405-phone.cfg
Aug  2 17:09:40 server in.tftpd[7926]: RRQ from 192.168.0.x filename contacts/0004f2179405-directory.xml
Aug  2 17:09:44 server in.tftpd[7931]: RRQ from 192.168.0.x filename SoundPointIPWelcome.wav
Aug  2 17:09:44 server in.tftpd[7939]: WRQ from 192.168.0.x filename log/0004f2179405-app.log


The Provisioning Window for each Extension
Code: [Select]
["$mac.cfg"
<?xml version="1.0" standalone="yes"?>
<!-- Default Master SIP Configuration File-->
<!-- Edit and rename this file to <Ethernet-address>.cfg for each phone.-->
<!-- $RCSfile: 000000000000.cfg,v $  $Revision: 1.14.22.4 $ -->
<APPLICATION APP_FILE_PATH="sip.ld" CONFIG_FILES="phone5000.cfg, XXX.cfg" MISC_FILES="" LOG_FILE_DIRECTORY="/log" OVERRIDES_DIRECTORY="/overrides"
 CONTACTS_DIRECTORY="/contacts" LICENSE_DIRECTORY="">
<APPLICATION_SPIP300 APP_FILE_PATH_SPIP300="sip_212.ld" CONFIG_FILES_SPIP300="phone1_212.cfg, sip_212.cfg"/>
<APPLICATION_SPIP500 APP_FILE_PATH_SPIP500="sip_212.ld" CONFIG_FILES_SPIP500="phone1_212.cfg, sip_212.cfg"/>
</APPLICATION>
]
["$mac-phone.cfg"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Example Per-phone Configuration File -->
<!-- $RCSfile: phone1.cfg,v $  $Revision: 1.83.2.2 $ -->
<phone5000>
   <reg reg.1.displayName="Name" reg.1.address="5000" reg.1.label="Name" reg.1.type="private" reg.1.lcs="" reg.1.csta="" reg.1.thirdPartyName="" reg.1.auth.userId="" reg.1.auth.password="" reg.1.auth.optimizedInFailover="" reg.1.server.1.address="DomainName" reg.1.server.1.port="" reg.1.server.1.transport="DNSnaptr" reg.1.server.2.transport="DNSnaptr" reg.1.server.1.expires="" reg.1.server.1.expires.overlap="" reg.1.server.1.register="" reg.1.server.1.retryTimeOut="" reg.1.server.1.retryMaxCount="" reg.1.server.1.expires.lineSeize="" reg.1.server.1.lcs="" reg.1.outboundProxy.address="" reg.1.outboundProxy.port="" reg.1.outboundProxy.transport="" reg.1.acd-login-logout="0" reg.1.acd-agent-available="0" reg.1.proxyRequire="" reg.1.ringType="2" reg.1.lineKeys="" reg.1.callsPerLineKey="" reg.1.serverFeatureControl.dnd="" reg.1.serverFeatureControl.cf="" reg.2.displayName="" reg.2.address="" reg.2.label="" reg.2.type="private" reg.2.lcs="" reg.2.csta="" reg.2.thirdPartyName="" reg.2.auth.userId="" reg.2.auth.password="" reg.2.auth.optimizedInFailover="" reg.2.server.1.address="" reg.2.server.1.port="" reg.2.server.1.transport="DNSnaptr" reg.2.server.2.transport="DNSnaptr" reg.2.server.1.expires="" reg.2.server.1.expires.overlap="" reg.2.server.1.register="" reg.2.server.1.retryTimeOut="" reg.2.server.1.retryMaxCount="" reg.2.server.1.expires.lineSeize="" reg.2.outboundProxy.address="" reg.2.outboundProxy.port="" reg.2.outboundProxy.transport="" reg.2.acd-login-logout="0" reg.2.acd-agent-available="0" reg.2.proxyRequire="" reg.2.ringType="2" reg.2.lineKeys="" reg.2.callsPerLineKey="" reg.2.serverFeatureControl.dnd="" reg.2.serverFeatureControl.cf="" reg.3.displayName="" reg.3.address="" reg.3.label="" reg.3.type="private" reg.3.lcs="" reg.3.csta="" reg.3.thirdPartyName="" reg.3.auth.userId="" reg.3.auth.password="" reg.3.auth.optimizedInFailover="" reg.3.server.1.address="" reg.3.server.1.port="" reg.3.server.1.transport="DNSnaptr" reg.3.server.2.transport="DNSnaptr" reg.3.server.1.expires="" reg.3.server.1.expires.overlap="" reg.3.server.1.register="" reg.3.server.1.retryTimeOut="" reg.3.server.1.retryMaxCount="" reg.3.server.1.expires.lineSeize="" reg.3.outboundProxy.address="" reg.3.outboundProxy.port="" reg.3.outboundProxy.transport="" reg.3.acd-login-logout="0" reg.3.acd-agent-available="0" reg.3.proxyRequire="" reg.3.ringType="2" reg.3.lineKeys="" reg.3.callsPerLineKey="" reg.3.serverFeatureControl.dnd="" reg.3.serverFeatureControl.cf="" reg.4.displayName="" reg.4.address="" reg.4.label="" reg.4.type="private" reg.4.lcs="" reg.4.csta="" reg.4.thirdPartyName="" reg.4.auth.userId="" reg.4.auth.password="" reg.4.auth.optimizedInFailover="" reg.4.server.1.address="" reg.4.server.1.port="" reg.4.server.1.transport="DNSnaptr" reg.4.server.2.transport="DNSnaptr" reg.4.server.1.expires="" reg.4.server.1.expires.overlap="" reg.4.server.1.register="" reg.4.server.1.retryTimeOut="" reg.4.server.1.retryMaxCount="" reg.4.server.1.expires.lineSeize="" reg.4.outboundProxy.address="" reg.4.outboundProxy.port="" reg.4.outboundProxy.transport="" reg.4.acd-login-logout="0" reg.4.acd-agent-available="0" reg.4.proxyRequire="" reg.4.ringType="2" reg.4.lineKeys="" reg.4.callsPerLineKey="" reg.4.serverFeatureControl.dnd="" reg.4.serverFeatureControl.cf="" reg.5.displayName="" reg.5.address="" reg.5.label="" reg.5.type="private" reg.5.lcs="" reg.5.csta="" reg.5.thirdPartyName="" reg.5.auth.userId="" reg.5.auth.password="" reg.5.auth.optimizedInFailover="" reg.5.server.1.address="" reg.5.server.1.port="" reg.5.server.1.transport="DNSnaptr" reg.5.server.2.transport="DNSnaptr" reg.5.server.1.expires="" reg.5.server.1.expires.overlap="" reg.5.server.1.register="" reg.5.server.1.retryTimeOut="" reg.5.server.1.retryMaxCount="" reg.5.server.1.expires.lineSeize="" reg.5.outboundProxy.address="" reg.5.outboundProxy.port="" reg.5.outboundProxy.transport="" reg.5.acd-login-logout="0" reg.5.acd-agent-available="0" reg.5.proxyRequire="" reg.5.ringType="2" reg.5.lineKeys="" reg.5.callsPerLineKey="" reg.5.serverFeatureControl.dnd="" reg.5.serverFeatureControl.cf="" reg.6.displayName="" reg.6.address="" reg.6.label="" reg.6.type="private" reg.6.lcs="" reg.6.csta="" reg.6.thirdPartyName="" reg.6.auth.userId="" reg.6.auth.password="" reg.6.auth.optimizedInFailover="" reg.6.server.1.address="" reg.6.server.1.port="" reg.6.server.1.transport="DNSnaptr" reg.6.server.2.transport="DNSnaptr" reg.6.server.1.expires="" reg.6.server.1.expires.overlap="" reg.6.server.1.register="" reg.6.server.1.retryTimeOut="" reg.6.server.1.retryMaxCount="" reg.6.server.1.expires.lineSeize="" reg.6.outboundProxy.address="" reg.6.outboundProxy.port="" reg.6.outboundProxy.transport="" reg.6.acd-login-logout="0" reg.6.acd-agent-available="0" reg.6.proxyRequire="" reg.6.ringType="2" reg.6.lineKeys="" reg.6.callsPerLineKey="" reg.6.serverFeatureControl.dnd="" reg.6.serverFeatureControl.cf=""/>
   <call>
      <donotdisturb call.donotdisturb.perReg="0"/>
      <autoOffHook call.autoOffHook.1.enabled="0" call.autoOffHook.1.contact="" call.autoOffHook.2.enabled="0" call.autoOffHook.2.contact="" call.autoOffHook.3.enabled="0" call.autoOffHook.3.contact="" call.autoOffHook.4.enabled="0" call.autoOffHook.4.contact="" call.autoOffHook.5.enabled="0" call.autoOffHook.5.contact="" call.autoOffHook.6.enabled="0" call.autoOffHook.6.contact=""/>
      <missedCallTracking call.missedCallTracking.1.enabled="1" call.missedCallTracking.2.enabled="1" call.missedCallTracking.3.enabled="1" call.missedCallTracking.4.enabled="1" call.missedCallTracking.5.enabled="1" call.missedCallTracking.6.enabled="1"/>
      <serverMissedCall call.serverMissedCall.1.enabled="0" call.serverMissedCall.2.enabled="0" call.serverMissedCall.3.enabled="0" call.serverMissedCall.4.enabled="0" call.serverMissedCall.5.enabled="0" call.serverMissedCall.6.enabled="0"/>
      <callWaiting call.callWaiting.ring="beep"/>
   </call>
   <divert divert.1.contact="" divert.1.autoOnSpecificCaller="1" divert.1.sharedDisabled="1" divert.2.contact="" divert.2.autoOnSpecificCaller="1" divert.2.sharedDisabled="1" divert.3.contact="" divert.3.autoOnSpecificCaller="1" divert.3.sharedDisabled="1" divert.4.contact="" divert.4.autoOnSpecificCaller="1" divert.4.sharedDisabled="1" divert.5.contact="" divert.5.autoOnSpecificCaller="1" divert.5.sharedDisabled="1" divert.6.contact="" divert.6.autoOnSpecificCaller="1" divert.6.sharedDisabled="1">
      <fwd divert.fwd.1.enabled="1" divert.fwd.2.enabled="1" divert.fwd.3.enabled="1" divert.fwd.4.enabled="1" divert.fwd.5.enabled="1" divert.fwd.6.enabled="1"/>
      <busy divert.busy.1.enabled="1" divert.busy.1.contact="" divert.busy.2.enabled="1" divert.busy.2.contact="" divert.busy.3.enabled="1" divert.busy.3.contact="" divert.busy.4.enabled="1" divert.busy.4.contact="" divert.busy.5.enabled="1" divert.busy.5.contact="" divert.busy.6.enabled="1" divert.busy.6.contact=""/>
      <noanswer divert.noanswer.1.enabled="1" divert.noanswer.1.timeout="60" divert.noanswer.1.contact="" divert.noanswer.2.enabled="1" divert.noanswer.2.timeout="60" divert.noanswer.2.contact="" divert.noanswer.3.enabled="1" divert.noanswer.3.timeout="60" divert.noanswer.3.contact="" divert.noanswer.4.enabled="1" divert.noanswer.4.timeout="60" divert.noanswer.4.contact="" divert.noanswer.5.enabled="1" divert.noanswer.5.timeout="60" divert.noanswer.5.contact="" divert.noanswer.6.enabled="1" divert.noanswer.6.timeout="60" divert.noanswer.6.contact=""/>
      <dnd divert.dnd.1.enabled="0" divert.dnd.1.contact="" divert.dnd.2.enabled="0" divert.dnd.2.contact="" divert.dnd.3.enabled="0" divert.dnd.3.contact="" divert.dnd.4.enabled="0" divert.dnd.4.contact="" divert.dnd.5.enabled="0" divert.dnd.5.contact="" divert.dnd.6.enabled="0" divert.dnd.6.contact=""/>
   </divert>
   <dialplan dialplan.1.impossibleMatchHandling="0" dialplan.1.removeEndOfDial="1" dialplan.1.applyToUserSend="1" dialplan.1.applyToUserDial="1" dialplan.1.applyToCallListDial="0" dialplan.1.applyToDirectoryDial="0" dialplan.2.impossibleMatchHandling="0" dialplan.2.removeEndOfDial="1" dialplan.2.applyToUserSend="1" dialplan.2.applyToUserDial="1" dialplan.2.applyToCallListDial="0" dialplan.2.applyToDirectoryDial="0" dialplan.3.impossibleMatchHandling="0" dialplan.3.removeEndOfDial="1" dialplan.3.applyToUserSend="1" dialplan.3.applyToUserDial="1" dialplan.3.applyToCallListDial="0" dialplan.3.applyToDirectoryDial="0" dialplan.4.impossibleMatchHandling="0" dialplan.4.removeEndOfDial="1" dialplan.4.applyToUserSend="1" dialplan.4.applyToUserDial="1" dialplan.4.applyToCallListDial="0" dialplan.4.applyToDirectoryDial="0" dialplan.5.impossibleMatchHandling="0" dialplan.5.removeEndOfDial="1" dialplan.5.applyToUserSend="1" dialplan.5.applyToUserDial="1" dialplan.5.applyToCallListDial="0" dialplan.5.applyToDirectoryDial="0" dialplan.6.impossibleMatchHandling="0" dialplan.6.removeEndOfDial="1" dialplan.6.applyToUserSend="1" dialplan.6.applyToUserDial="1" dialplan.6.applyToCallListDial="0" dialplan.6.applyToDirectoryDial="0">
      <digitmap dialplan.1.digitmap="" dialplan.1.digitmap.timeOut="" dialplan.2.digitmap="" dialplan.2.digitmap.timeOut="" dialplan.3.digitmap="" dialplan.3.digitmap.timeOut="" dialplan.4.digitmap="" dialplan.4.digitmap.timeOut="" dialplan.5.digitmap="" dialplan.5.digitmap.timeOut="" dialplan.6.digitmap="" dialplan.6.digitmap.timeOut=""/>
      <routing>
         <server dialplan.1.routing.server.1.address="" dialplan.1.routing.server.1.port="" dialplan.2.routing.server.1.address="" dialplan.2.routing.server.1.port="" dialplan.3.routing.server.1.address="" dialplan.3.routing.server.1.port="" dialplan.4.routing.server.1.address="" dialplan.4.routing.server.1.port="" dialplan.5.routing.server.1.address="" dialplan.5.routing.server.1.port="" dialplan.6.routing.server.1.address="" dialplan.6.routing.server.1.port=""/>
         <emergency dialplan.1.routing.emergency.1.value="" dialplan.1.routing.emergency.1.server.1="" dialplan.2.routing.emergency.1.value="" dialplan.2.routing.emergency.1.server.1="" dialplan.3.routing.emergency.1.value="" dialplan.3.routing.emergency.1.server.1="" dialplan.4.routing.emergency.1.value="" dialplan.4.routing.emergency.1.server.1="" dialplan.5.routing.emergency.1.value="" dialplan.5.routing.emergency.1.server.1="" dialplan.6.routing.emergency.1.value="" dialplan.6.routing.emergency.1.server.1=""/>
      </routing>
   </dialplan>
   <msg msg.bypassInstantMessage="0">
      <mwi msg.mwi.1.subscribe="" msg.mwi.1.callBackMode="registration" msg.mwi.1.callBack="" msg.mwi.2.subscribe="" msg.mwi.2.callBackMode="registration" msg.mwi.2.callBack="" msg.mwi.3.subscribe="" msg.mwi.3.callBackMode="registration" msg.mwi.3.callBack="" msg.mwi.4.subscribe="" msg.mwi.4.callBackMode="registration" msg.mwi.4.callBack="" msg.mwi.5.subscribe="" msg.mwi.5.callBackMode="registration" msg.mwi.5.callBack="" msg.mwi.6.subscribe="" msg.mwi.6.callBackMode="registration" msg.mwi.6.callBack=""/>
   </msg>
   <nat nat.ip="" nat.signalPort="" nat.mediaPortStart="" nat.keepalive.interval=""/>
   <attendant attendant.uri="" attendant.reg=""/>
   <roaming_buddies roaming_buddies.reg=""/>
   <roaming_privacy roaming_privacy.reg=""/>
</phone5000>
]
« Last Edit: August 03, 2008, 09:25:24 AM by compsos »
Regards

Gordon............

Offline SARK devs

  • *****
  • 2,806
  • +1/-0
    • http://sarkpbx.com
Re: Polycom IP320 Phones
« Reply #1 on: August 12, 2008, 11:57:54 PM »
Hi,

If you send us copies of your provisioning data we'll retrofit it into the next SARK release.

Send to admin@selintra.com

thanks

S

Offline bbialy

  • ****
  • 105
  • +0/-0
Re: Polycom IP320 Phones
« Reply #2 on: August 24, 2008, 09:39:46 PM »
i've another idea
i added two sections in Polycom X01 provisionig description

Polycom IP X01     Polycom Range of IP phones     SIP

Code: [Select]
["$mac-app.log"
This file will be overwitten after each COMMIT
]
[$mac-boot.log
This file will be also overwitten after each COMMIT
]
Remeber just add not replace!!!!!!!!!!

It only creates files such as 000000000000-app.log and 000000000000-boot.log

after creation of each extension just copy it to Log file as compsos write above

bbialy
« Last Edit: August 24, 2008, 09:41:55 PM by bbialy »
Reading with understanding is the hardest thing IN THE WORLD

Offline SARK devs

  • *****
  • 2,806
  • +1/-0
    • http://sarkpbx.com
Re: Polycom IP320 Phones
« Reply #3 on: August 24, 2008, 10:53:21 PM »
HI guys,

How about I do you all a how-to on exactly how the extensible provisioning works and then you should be able to build your own Polycom support.  You can then bounce it back to us and we'll load it into the database for the next release.

Good idea?

Jeff   

Offline bbialy

  • ****
  • 105
  • +0/-0
Re: Polycom IP320 Phones
« Reply #4 on: August 25, 2008, 02:10:08 AM »
Let's TRY
Maciej
Reading with understanding is the hardest thing IN THE WORLD

Offline SARK devs

  • *****
  • 2,806
  • +1/-0
    • http://sarkpbx.com
Re: Polycom IP320 Phones
« Reply #5 on: August 25, 2008, 08:00:12 PM »

http://www.aelintra.com/docs/cgi-bin/view/Main/DocChapter255

I think that the entity you have all been missing/confused about is the Descriptor.  Not surprising when you figure that we've never really documented it until now :).

Anyhow, using these guidelines you should be able to automate your Polycom provisioning. If you have any problems with this then post back here and we'll do our best to help.

First one to do Polycoms this way gets a couple of our unbelievably cool (patented design) SARK mousemats.  These are not the usual cheap foam rubber items but high quality non-slip plastic with ace graphics and a complete guide to all of the SARK feature codes. They really are too kool for skool and just the thing for your desktop.  :)

Best

Jeff