RE: [Asterisk-Users] Polycom Reboot Script - Please wiki-size me

2004-01-23 Thread mattf
It's been added to the wiki:

http://www.voip-info.org/tiki-index.php?page=Polycom+reboot+hardphone+script

MATT---

-Original Message-
From: John Baker [mailto:[EMAIL PROTECTED]
Sent: Friday, January 23, 2004 12:38 AM
To: [EMAIL PROTECTED]
Subject: [Asterisk-Users] Polycom Reboot Script - Please wiki-size me


With my thanks to Brian West and his offering in the thread,

Subject: Re: [Asterisk-Users] Remote reload Cisco 7960

I offer PolyReboot.pl, a perl script for rebooting Polycom IP Phones

PolyReboot.pl takes an IP address as a single argument and reboots the
phone.

You must have a cfg file in the Polycom style, i.e., 00ab00cd00ef.cfg - all
lower case.  Further,
you need to use ftp for your remote cfg loading, because with ftp
synchronization, the phones
check the ctimes of the cfg files against what's in their cache when
receiving a check-sync in
order to determine if rebooting is necessary.

I tested this script.  It works on my Polycoms.  I have the latest bootrom
and the
SIP 1.1.0 software version.

I'm not much of a perl person, and all of this code is heavily borrowed,
(Thanks again, Brian), so
someone else can prettify it as they see fit.

#!/usr/bin/perl
#
# PolyReboot.pl
#
# Reboots a Polycom 500 or 600 phone
#
use Net::Ping;
use Socket;

$polycompath = '/home/poly/';# Where you keep your config files
$arp = '/sbin/arp';  # Location of arp command
$sipserver   = '192.168.XXX.XXX';  # IP of asterisk server

$phone = shift;

checkphone($phone);
touch( arp2config($phone) );

reboot_sip_phone( $phone, $sipserver, Reboot );

sub checkphone {  # Checks for existence of phone, makes sure
# it's in arp table
$activephone = shift;

# ARP table needs our phone
print Checking ARP table.\n;
$p = Net::Ping-new(icmp);
if ( $p-ping( $activephone, 2 ) ) {
print $activephone is ;
print reachable.\n;
}
else { die Polycom at , $activephone,  is not reachable!; }
sleep(1);
$p-close();

}

sub arp2config {# Gets mac address from arp table, converts
# to a polycom config filename, makes sure
# the config file exists
$arpip = shift;
open( ARP, $arp -an| ) || die Couldn't open arp table: $!\n;
print checking for polycom config name..., \n;
while (ARP) {
chomp;
$addr = $_;
$ip   = $_;
$addr =~ s/.*
([\d\w]+:[\d\w]+:[\d\w]+:[\d\w]+:[\d\w]+:[\d\w]+).*/$1/;
$addr =~ s/://g;
$addr = lc($addr) . '.cfg';
$ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).*/$1/;
if ( $ip eq $arpip ) {
last;
}
}
 $polycomconfig = $polycompath . $addr;

unless ( -e $polycomconfig ) {
print sorry, polycom config file , $polycomconfig,
   is not found.\n\n;
exit;
}

return $polycomconfig;
}

}

$polycomconfig = $polycompath . $addr;

unless ( -e $polycomconfig ) {
print sorry, polycom config file , $polycomconfig,
   is not found.\n\n;
exit;
}

return $polycomconfig;
}

sub touch {# We need to touch the config file or the phone
   # won't reboot - it depends on time synchronization
print touching config file , $polycomconfig, \n;
my $now = time;
local (*TMP);
foreach my $file (@_) {
utime( $now, $now, $file )
  || open( TMP, $file )
  || die ($0: Couldn't touch file: $!\n);
}
}

sub reboot_sip_phone {# Send the phone a check-sync to reboot it
$phone_ip = shift;

$local_ip = shift;
$sip_to   = shift;
$sip_from = 0;
$tm   = time();
$call_id  = $tm . msgto$sip_to;
$httptime = `date -R`;
$MESG = NOTIFY sip:[EMAIL PROTECTED]:5060 SIP/2.0
Via: SIP/2.0/UDP $local_ip
From: sip:[EMAIL PROTECTED]
To: sip:[EMAIL PROTECTED]
Event: check-sync
Date: $httptime
Call-ID: [EMAIL PROTECTED]
CSeq: 1300 NOTIFY
Contact: sip:[EMAIL PROTECTED]
Content-Length: 0

;

$proto = getprotobyname('udp');
socket( SOCKET, PF_INET, SOCK_DGRAM, $proto );
$iaddr = inet_aton($phone_ip);
$paddr = sockaddr_in( 5060, $iaddr );
bind( SOCKET, $paddr );
$port = 5060;

$hisiaddr = inet_aton($phone_ip);
$hispaddr = sockaddr_in( $port, $hisiaddr );

if ( send( SOCKET, $MESG, 0, $hispaddr ) ) {
print reboot of phone , $phone_ip,  was successful, \n;
}
else { print reboot of phone , $phone_ip,  failed, \n; }
}
exit;

Enjoy,

John

___
Asterisk-Users mailing list
[EMAIL PROTECTED]
http://lists.digium.com/mailman/listinfo/asterisk-users
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users
___
Asterisk-Users mailing list
[EMAIL PROTECTED]
http://lists.digium.com/mailman/listinfo/asterisk-users
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


Re: [Asterisk-Users] Polycom Reboot Script - Please wiki-size me

2004-01-22 Thread John Baker
Oops, the cut and paste got the better of me.

This one might be a little better...

#!/usr/bin/perl
#
# PolyReboot.pl
#
# Reboots a Polycom 500 or 600 phone
#
use Net::Ping;
use Socket;

$polycompath = '/home/poly/';# Where you keep your config files
$arp = '/sbin/arp';  # Location of arp command
$sipserver   = '192.168.XXX.XXX';  # IP of asterisk server

$phone = shift;

checkphone($phone);
touch( arp2config($phone) );

reboot_sip_phone( $phone, $sipserver, Reboot );

sub checkphone {  # Checks for existence of phone, makes sure
 # it's in arp table
 $activephone = shift;

 # ARP table needs our phone
 print Checking ARP table.\n;
 $p = Net::Ping-new(icmp);
 if ( $p-ping( $activephone, 2 ) ) {
 print $activephone is ;
 print reachable.\n;
 }
 else { die Polycom at , $activephone,  is not reachable!; }
 sleep(1);
 $p-close();

 }

 sub arp2config {# Gets mac address from arp table, converts
 # to a polycom config filename, makes sure
 # the config file exists
 $arpip = shift;
 open( ARP, $arp -an| ) || die Couldn't open arp table: $!\n;
 print checking for polycom config name..., \n;
 while (ARP) {
 chomp;
 $addr = $_;
 $ip   = $_;
 $addr =~ s/.*
([\d\w]+:[\d\w]+:[\d\w]+:[\d\w]+:[\d\w]+:[\d\w]+).*/$1/;
 $addr =~ s/://g;
 $addr = lc($addr) . '.cfg';
 $ip =~ s/.*?(\d+\.\d+\.\d+\.\d+).*/$1/;
 if ( $ip eq $arpip ) {
 last;
 }
 }
  $polycomconfig = $polycompath . $addr;

 unless ( -e $polycomconfig ) {
 print sorry, polycom config file , $polycomconfig,
is not found.\n\n;
 exit;
 }

 return $polycomconfig;
 }


 sub touch {# We need to touch the config file or the phone
# won't reboot - it depends on time synchronization
 print touching config file , $polycomconfig, \n;
 my $now = time;
 local (*TMP);
 foreach my $file (@_) {
 utime( $now, $now, $file )
   || open( TMP, $file )
   || die ($0: Couldn't touch file: $!\n);
 }
 }

 sub reboot_sip_phone {# Send the phone a check-sync to reboot it
 $phone_ip = shift;

 $local_ip = shift;
 $sip_to   = shift;
 $sip_from = 0;
 $tm   = time();
 $call_id  = $tm . msgto$sip_to;
 $httptime = `date -R`;
 $MESG = NOTIFY sip:[EMAIL PROTECTED]:5060 SIP/2.0
 Via: SIP/2.0/UDP $local_ip
 From: sip:[EMAIL PROTECTED]
 To: sip:[EMAIL PROTECTED]
 Event: check-sync
 Date: $httptime
 Call-ID: [EMAIL PROTECTED]
 CSeq: 1300 NOTIFY
 Contact: sip:[EMAIL PROTECTED]
 Content-Length: 0

 ;

 $proto = getprotobyname('udp');
 socket( SOCKET, PF_INET, SOCK_DGRAM, $proto );
 $iaddr = inet_aton($phone_ip);
 $paddr = sockaddr_in( 5060, $iaddr );
 bind( SOCKET, $paddr );
 $port = 5060;

 $hisiaddr = inet_aton($phone_ip);
 $hispaddr = sockaddr_in( $port, $hisiaddr );

 if ( send( SOCKET, $MESG, 0, $hispaddr ) ) {
 print reboot of phone , $phone_ip,  was successful, \n;
 }
 else { print reboot of phone , $phone_ip,  failed, \n; }
 }
 exit;

- Original Message - 
From: John Baker [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Thursday, January 22, 2004 11:38 PM
Subject: [Asterisk-Users] Polycom Reboot Script - Please wiki-size me


 With my thanks to Brian West and his offering in the thread,

 Subject: Re: [Asterisk-Users] Remote reload Cisco 7960

 I offer PolyReboot.pl, a perl script for rebooting Polycom IP Phones

 PolyReboot.pl takes an IP address as a single argument and reboots the
 phone.

 You must have a cfg file in the Polycom style, i.e., 00ab00cd00ef.cfg -
all
 lower case.  Further,
 you need to use ftp for your remote cfg loading, because with ftp
 synchronization, the phones
 check the ctimes of the cfg files against what's in their cache when
 receiving a check-sync in
 order to determine if rebooting is necessary.

 I tested this script.  It works on my Polycoms.  I have the latest bootrom
 and the
 SIP 1.1.0 software version.

 I'm not much of a perl person, and all of this code is heavily borrowed,
 (Thanks again, Brian), so
 someone else can prettify it as they see fit.

 #!/usr/bin/perl
 #
 # PolyReboot.pl
 #
 # Reboots a Polycom 500 or 600 phone
 #
 use Net::Ping;
 use Socket;

 $polycompath = '/home/poly/';# Where you keep your config files
 $arp = '/sbin/arp';  # Location of arp command
 $sipserver   = '192.168.XXX.XXX';  # IP of asterisk server

 $phone = shift;

 checkphone($phone);
 touch( arp2config($phone) );

 reboot_sip_phone( $phone, $sipserver, Reboot );

 sub checkphone {  # Checks for existence of phone, makes sure
 # it's in arp table
 $activephone = shift;

 # ARP table needs our phone
 print Checking ARP table.\n;
 $p = Net::Ping-new(icmp);