7 use Regexp::Common qw/net/;
16 my ( $port, $mac ) = ( 9 );
18 if ( $target =~ m/$RE{net}{MAC}{-keep}/ ) {
20 } elsif ( $target =~ m/$RE{net}{IPv4}{-keep}/ ) {
21 $mac = client::mac_from_ip $1;
23 die "$target isn't IP or MAC";
26 warn "# power_on $mac";
28 my $sock = IO::Socket::INET->new( Proto=>'udp' );
29 my $ip_addr = inet_aton($server::bcast);
30 my $sock_addr = sockaddr_in($port, $ip_addr);
32 my $mac_payload = $mac;
33 $mac_payload =~ s{:}{}g;
35 my $packet = pack('C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac_payload x 16);
37 setsockopt($sock, SOL_SOCKET, SO_BROADCAST, 1);
38 send($sock, $packet, 0, $sock_addr);
41 CouchDB::audit( $target, { ip => $target, mac => $mac } );