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" );
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;