power_up by IP or MAC
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 26 Aug 2009 11:42:33 +0000 (11:42 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 26 Aug 2009 11:42:33 +0000 (11:42 +0000)
lib/PXElator/t/wol.t
lib/PXElator/wol.pm

index 6f1456d..aee6101 100755 (executable)
@@ -8,4 +8,6 @@ use Test::More tests => 2;
 
 use_ok 'wol';
 
-ok( wol::power_on( 'aa:bb:cc:dd:ee:ff' ), 'power_on' );
+my $target = $ENV{WOL} || '172.16.10.10';
+
+ok( wol::power_on( $target ), "power_on $target" );
index 0e7bcdd..dec893c 100644 (file)
@@ -4,16 +4,29 @@ use warnings;
 use strict;
 
 use IO::Socket::INET;
+use Regexp::Common qw/net/;
+
+use client;
 
 sub power_on {
-       my ($mac,$host,$port) = @_;
+       my $target = shift;
+
+       my ( $port, $mac, $ip ) = ( 9 );
+
+       if ( $target =~ m/$RE{net}{MAC}{-keep}/ ) {
+               $mac = $1;
+               $ip  = client::ip_from_mac $1;
+       } elsif ( $target =~ m/$RE{net}{IPv4}{-keep}/ ) {
+               $ip  = $1;
+               $mac = client::mac_from_ip $1;
+       } else {
+               die "$target isn't IP or MAC";
+       }
 
-       $mac  ||= 'FF:FF:FF:FF:FF:FF';
-       $host ||= '255.255.255.255';
-       $port ||= 9;    # discard
+       warn "# power_on $ip $mac";
 
        my $sock = IO::Socket::INET->new( Proto=>'udp' );
-       my $ip_addr = inet_aton($host);
+       my $ip_addr = inet_aton($ip);
        my $sock_addr = sockaddr_in($port, $ip_addr);
        $mac =~ s{:}{}g;