--- lib/PXElator/wol.pm 2009/08/26 10:21:44 295 +++ lib/PXElator/wol.pm 2009/08/26 11:42:33 296 @@ -4,16 +4,29 @@ 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;