/[pxelator]/lib/PXElator/wol.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/PXElator/wol.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 482 - (hide annotations)
Sat Jan 23 18:31:14 2010 UTC (14 years, 3 months ago) by dpavlin
File size: 855 byte(s)
use store::audit proxy all over the place

1 dpavlin 295 package wol;
2    
3     use warnings;
4     use strict;
5    
6     use IO::Socket::INET;
7 dpavlin 296 use Regexp::Common qw/net/;
8 dpavlin 482 use store;
9 dpavlin 295
10 dpavlin 296 use client;
11 dpavlin 297 use server;
12 dpavlin 296
13 dpavlin 295 sub power_on {
14 dpavlin 296 my $target = shift;
15 dpavlin 295
16 dpavlin 297 my ( $port, $mac ) = ( 9 );
17 dpavlin 295
18 dpavlin 296 if ( $target =~ m/$RE{net}{MAC}{-keep}/ ) {
19     $mac = $1;
20     } elsif ( $target =~ m/$RE{net}{IPv4}{-keep}/ ) {
21     $mac = client::mac_from_ip $1;
22     } else {
23     die "$target isn't IP or MAC";
24     }
25    
26 dpavlin 297 warn "# power_on $mac";
27 dpavlin 296
28 dpavlin 295 my $sock = IO::Socket::INET->new( Proto=>'udp' );
29 dpavlin 297 my $ip_addr = inet_aton($server::bcast);
30 dpavlin 295 my $sock_addr = sockaddr_in($port, $ip_addr);
31    
32 dpavlin 366 my $mac_payload = $mac;
33     $mac_payload =~ s{:}{}g;
34 dpavlin 295
35 dpavlin 366 my $packet = pack('C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac_payload x 16);
36    
37 dpavlin 295 setsockopt($sock, SOL_SOCKET, SO_BROADCAST, 1);
38     send($sock, $packet, 0, $sock_addr);
39     close ($sock);
40 dpavlin 366
41 dpavlin 482 store::audit( $target, { ip => $target, mac => $mac } );
42 dpavlin 295 }
43    
44     1;

  ViewVC Help
Powered by ViewVC 1.1.26