Telephone system:Cisco phone deployment
Revision as of 16:09, 10 March 2013 by Xopr (talk | contribs) (moved Cisco phone deployment to Telephone system:Cisco phone deployment: moved page to telephone namespace)
Most settings are taken from Xopr's Asus WL500g running OpenWRT kamikaze RC6 with pivot-rooted USB drive and OpenVPN tunnel. (there's not enough room to host the firmware's on the flash ;)
Contents
todo
- copy the settings from the ACKspace setup
- try and see if the firmware loading works (I.E. load sip from sccp and vice versa)
- figure out the loading order of images and config files
stuff to know
- tested with a lot of factory default resets because firmware and/or configs seem to cache unpredictable
- not clear how to enable logging on atftpd for OpenWRT, either as --no-daemon or writing to log files
- atftpd on OpenWRT sometimes seemed to crash (testing sccp), resulting in the following behaviour:
- for sip: 'Requesting Configuration' (seems to boot with cached settings)
- for sccp: 'Configuring CM List' (seems to boot with cached settings)
- for factory default: 'Phone Unprovisioned' / UNPROVISIONED
- couldn't manage to factory reset the 7905 and 7910
DHCP
dnsmasq
small part in /etc/dnsmasq.conf
dhcp-option=66,LOCAL_TFTPD_IP dhcp-option=150,LOCAL_TFTPD_IP
Note: when setting the TFT server using command line parameters, don't use extra (escaped) quotes: small part in /etc/init.d/S50dnsmasq (uncomment the args to enable the config file mentioned above
args="-K -F $START,$END,$NETMASK,${lease:-12h} --dhcp-option=66,${ipaddr} --dhcp-option=150,${ipaddr}"
TFTP
atftpd
cat /etc/init.d/S55atftpd #!/bin/sh /usr/sbin/atftpd --daemon --port 69 --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100
contents of /tftpboot
dialplan.xml OS79XX.TXT P00308000600.bin P00308000600.loads P00308000600.sb2 P00308000600.sbn P00405000700.bin P00405000700.sbn P0S3-06-3-00.bin P0S3-8-12-00.loads P0S3-06-3-00.sbn P0S3-8-12-00.sb2 RINGLIST.DAT S00105000300.sbn SIPDefault.cnf SEP<mac_of_sccp_phone_w_ext>.cnf.xml SIP<mac_of_sip_phone>.cnf XMLDefault.cnf.xml
File contents
dialplan.xml
<DIALTEMPLATE> <TEMPLATE MATCH="\*..#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="\**#" Timeout="3" User="Phone"/> <TEMPLATE MATCH="\*...#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="\**#" Timeout="3" User="Phone"/> <TEMPLATE MATCH="\*..#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="\*#..#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="\*#...#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="#..#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="#...#" Timeout="0" User="Phone"/> <TEMPLATE MATCH="00*" Timeout="6" User="Phone"/> <TEMPLATE MATCH="0........." Timeout="1" User="Phone"/> <TEMPLATE MATCH="10.." Timeout="0" User="Phone"/> <TEMPLATE MATCH="12.." Timeout="0" User="Phone"/> <TEMPLATE MATCH="13.." Timeout="0" User="Phone"/> <TEMPLATE MATCH="131.........." Timeout="1" User="Phone"/> <TEMPLATE MATCH="#31#.........." Timeout="1" User="Phone"/> <TEMPLATE MATCH="\*31\*.........." Timeout="1" User="Phone"/> <TEMPLATE MATCH="132.........." Timeout="1" User="Phone"/> <TEMPLATE MATCH="\*10.." Timeout="0" User="Phone"/> <TEMPLATE MATCH="\*19.." Timeout="0" User="Phone"/> <TEMPLATE MATCH="19.." Timeout="0" User="Phone"/> <TEMPLATE MATCH="2222" Timeout="0" User="Phone"/> <TEMPLATE MATCH="4444" Timeout="0" User="Phone"/> <TEMPLATE MATCH="112" Timeout="0" User="Phone"/> <TEMPLATE MATCH="911" Timeout="0" User="Phone"/> <TEMPLATE MATCH="999" Timeout="0" User="Phone"/> <TEMPLATE MATCH="*" Timeout="4" User="Phone"/> </DIALTEMPLATE>
OS79XX.TXT
P0S3-06-3-00
RINGLIST.DAT
CTU CTU24raw.raw Chicken chicken2.raw New York newyork.raw Star Wars starwars.raw Old Style ringer1.pcm Synth Low ringer2.pcm
SIPDefault.cnf
# Image Version #image_version: "P0S3-8-12-00" # Proxy Server proxy1_address: "FREESWITCH_IP" # Proxy Server Port (default - 5060) proxy1_port:"5060" # Emergency Proxy info proxy_emergency: "FREESWITCH_IP" proxy_emergency_port: "5060" # Backup Proxy info proxy_backup: "FREESWITCH_IP" proxy_backup_port: "5060" # Outbound Proxy info outbound_proxy: "FREESWITCH_IP" outbound_proxy_port: "5060" # NAT/Firewall Traversal nat_enable: "1" # Only enable when using the OpenVPN tunnel; remote office nat_address: "10.0.50.13" # TODO: try and remove it from either this or the specific config voip_control_port: "5061" start_media_port: "16384" end_media_port: "32766" nat_received_processing: "0" # Proxy Registration (0-disable (default), 1-enable) proxy_register: "1" # Phone Registration Expiration [1-3932100 sec] (Default - 3600) timer_register_expires: "100" # below 120 seconds for maintaining UDP 'connection' state in Linux # Codec for media stream (g711ulaw (default), g711alaw, g729) preferred_codec: "none" # TOS bits in media stream [0-5] (Default - 5) tos_media: "5" # Enable VAD (0-disable (default), 1-enable) enable_vad: "0" # Allow for the bridge on a 3way call to join remaining parties upon hangup cnf_join_enable: "1" ; 0-Disabled, 1-Enabled (default) # Allow Transfer to be completed while target phone is still ringing semi_attended_transfer: "1" ; 0-Disabled, 1-Enabled (default) # Telnet Level (enable or disable the ability to telnet into this phone telnet_level: "2" ; 0-Disabled (default), 1-Enabled, 2-Privileged # Inband DTMF Settings (0-disable, 1-enable (default)) dtmf_inband: "1" # Out of band DTMF Settings (none-disable, avt-avt enable (default), avt_always - always avt ) dtmf_outofband: "avt" ~np~# DTMF dB Level Settings (1-6dB down, 2-3db down, 3-nominal (default), 4-3db up, 5-6dB up) dtmf_db_level: "3" # SIP Timers timer_t1: "500" ; Default 500 msec timer_t2: "4000" ; Default 4 sec sip_retx: "10" ; Default 11 sip_invite_retx: "6" ; Default 7 timer_invite_expires: "180" ; Default 180 sec # Setting for Message speeddial to mail box (*97) messages_uri: "1233" # TFTP Phone Specific Configuration File Directory tftp_cfg_dir: "./" # Time Server sntp_mode: "unicast" sntp_server: "time.nist.gov" # IP address here alternatively time_zone: "CET" dst_offset: "1" dst_start_month: "April" dst_start_day: "" dst_start_day_of_week: "Sun" dst_start_week_of_month: "1" dst_start_time: "02" dst_stop_month: "Oct" dst_stop_day: "" dst_stop_day_of_week: "Sunday" dst_stop_week_of_month: "8" dst_stop_time: "2" dst_auto_adjust: "1" # Do Not Disturb Control (0-off, 1-on, 2-off with no user control, 3-on with no user control) dnd_control: "0" ; Default 0 (Do Not Disturb feature is off) # Caller ID Blocking (0-disabled, 1-enabled, 2-disabled no user control, 3-enabled no user control) callerid_blocking: "0" ; Default 0 (Disable sending all calls as anonymous) # Anonymous Call Blocking (0-disbaled, 1-enabled, 2-disabled no user control, 3-enabled no user control) anonymous_call_block: "0" ; Default 0 (Disable blocking of anonymous calls) # Call Waiting (0-disabled, 1-enabled, 2-disabled with no user control, 3-enabled with no user control) call_waiting: "1" ; Default 1 (Call Waiting enabled) # DTMF AVT Payload (Dynamic payload range for AVT tones - 96-127) dtmf_avt_payload: "101" ; Default 100 # XML file that specifies the dialplan desired dial_template: "dialplan" # Network Media Type (auto, full100, full10, half100, half10) network_media_type: "auto" #Autocompletion During Dial (0-off, 1-on [default]) autocomplete: "0" #Time Format (0-12hr, 1-24hr [default]) time_format_24hr: "0" # URL for external Phone Services services_url: "http://FREESWITCH_IP/provisioning/services.php" # IP address here alternatively # URL for external Directory location directory_url: "http://FREESWITCH_IP/provisioning/directory.php" # IP address here alternatively # URL for branding logo logo_url: "http://FREESWITCH_IP/provisioning/ACKspace.bmp" # IP address here alternatively # Remote Party ID remote_party_id: 1 ; 0-Disabled (default), 1-Enabled
SEP<mac_of_sccp_phone_w_ext>.cnf.xml
<device> <devicePool> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> </ports> <processNodeName>LOCAL_FREESWITCH_IP</processNodeName> </callManager> </member> </members> </callManagerGroup> </devicePool> <versionStamp>{Jan 01 2002 00:00:00}</versionStamp> <loadInformation>P00308000600</loadInformation> <addOnModules> <addOnModule idx="1"> <loadInformation>S00105000300</loadInformation> </addOnModule> </addOnModules> <userLocale> <name>English_United_States</name> <langCode>en</langCode> </userLocale> <networkLocale>United_States</networkLocale> <idleTimeout>0</idleTimeout> <authenticationURL></authenticationURL> <directoryURL></directoryURL> <idleURL></idleURL> <informationURL></informationURL> <messagesURL></messagesURL> <proxyServerURL></proxyServerURL> <servicesURL></servicesURL> </device>
SIP<mac_of_sip_phone>.cnf
# SIP Configuration Generic File # Image Version image_version: P0S3-8-12-00 phone_label: "BLACK_BAR_NAME" # Line 1 appearance line1_displayname: "CALLER_ID_NAME" line1_shortname:"BUTTON_NAME" line1_name: EXTENSION_NUMBER line1_authname: "EXTENSION_NUMBER" line1_password: "EXTENSION_PASSWORD" # Line 2 appearance line2_displayname: "INTERCOM_ID_NAME" line2_shortname: "BUTTON_INTERCOM_NAME" line2_name: INTERCOM_NAME_NUMBER line2_authname: "INTERCOM_NAME_NUMBER" line2_password: "INTERCOM_PASSWORD" # Line 3 appearance line3_displayname: "" line3_shortname: "" line3_name: UNPROVISIONED line3_authname: "UNPROVISIONED" line3_password: "UNPROVISIONED" # Line 4 appearance line4_displayname: "" line4_shortname: "" line4_name: UNPROVISIONED line4_authname: "UNPROVISIONED" line4_password: "UNPROVISIONED" # Line 5 appearance line5_displayname: "" line5_shortname: "" line5_name: UNPROVISIONED line5_authname: "UNPROVISIONED" line5_password: "UNPROVISIONED" # Line 6 appearance line6_displayname: "" line6_shortname: "" line6_name: UNPROVISIONED line6_authname: "UNPROVISIONED" line6_password: "UNPROVISIONED" # Phone Prompt (The prompt that will be displayed on console and telnet) phone_prompt: "SIP Phone" ; Limited to 15 characters (Default - SIP Phone) # Phone Password (Password to be used for console or telnet login) phone_password: "PHONE_PASSWORD" ; Limited to 31 characters (Default - cisco) # User classifcation used when Registering [ none(default), phone, ip ] user_info: none # NAT/Firewall Traversal nat_enable: "1" # Only enable when using the OpenVPN tunnel; remote office nat_address: "10.0.50.13" # TODO: try and remove it from either this or the generic config timer_register_expires: "111"
XMLDefault.cnf.xml
<Default> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> </ports> <processNodeName>FREESWITCH_IP</processNodeName> </callManager> </member> </members> <loadInformation6 model="IP Phone 7910">P00308000600</loadInformation6> <loadInformation124 model="Addon 7914">S00105000300</loadInformation124> <loadInformation8 model="IP Phone 7940">P00308000600</loadInformation8> </callManagerGroup> </Default>
extra info
auto_answer.pl
#!/usr/bin/perl
#Set auto_answer on cisco 79xx phone via telnet. #Hack around the inability of the sip software to set via a config file. #Public domain, no warranty at all. (http://www.comtek.co.uk) use Net::Telnet(); use List::Util qw(reduce); use constant PROMPT => "SIP Phone"; use constant PASSWORD => "cisco"; @to_set=(); @to_unset=(); if((@ARGV<3)||(!(@ARGV%2))) { print "Syntax: set_auto_answer <ip> <list>\n\twhere <list> is a list of " ." one or more '<line num> <0|1>'\n" ."\nEg: set_auto_answer 1.1.1.1 1 0 2 1\n"; exit 1; } $target_ip=shift; do { my ($line, $setting)=(shift, shift); if($setting) { push(@to_set, $line); } else { push(@to_unset, $line); } }while(@ARGV); #For logs, use "" or *STDOUT $t=new Net::Telnet(Timeout => 1, Output_log => *STDOUT, Input_log => "", Dump_log => ""); $t->open($target_ip); $t->waitfor('/Password :.*$/'); $t->print(PASSWORD); $t->waitfor('/'.PROMPT.'>.*$/'); @tmp=$t->cmd("show config"); @tmp=grep(/^auto_answer : /, @tmp); die("Bad auto_answer") if(scalar(@tmp)!=1); @tmp[0]=~/([0-9]+)/; $auto_answer=$1; @to_set=grep { !(1<<($_-1) & $auto_answer) } @to_set; @to_unset=grep {1<<($_-1) & $auto_answer} @to_unset; exit 0 if( !@to_unset && !@to_set ); print "Enabling auto-answer for line(s): ".(reduce {$a.", ".$b} @to_set)."\n" if(@to_set); print "Disabling auto-answer for line(s): ".(reduce {$a.", ".$b} @to_unset)."\n" if(@to_unset); $t->print("test open"); sub wait_then_press { foreach my $key (@_) { $t->waitfor('/'.PROMPT.'>.*$/'); $t->print("test ".$key); } } sub toggle_line { my($line)=@_; wait_then_press("offhook", "onhook", "key set", "key 6", "key 8", "key ".$line, "key soft1", "key soft2", "key soft2", "key set"); } foreach my $line (@to_unset, @to_set) { print "Toggling line: $line\n"; toggle_line($line); } $t->waitfor('/'.PROMPT.'>.*$/'); $t->print("test close"); $t->waitfor('/'.PROMPT.'>.*$/'); $t->print("exit"); print "Success.\n";