reportboot.in 1.69 KB
Newer Older
1 2
#!/usr/bin/perl -w
#
3
# Copyright (c) 2014-2016 University of Utah and the Flux Group.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# 
# {{{EMULAB-LICENSE
# 
# This file is part of the Emulab network testbed software.
# 
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
# 
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
# License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
# 
# }}}
#
use English;
25
use Socket;
26 27 28 29 30 31 32 33 34

#
# This script is invoked on a dhcpd "commit" event.
#
# Intended to trigger Emulab node boot related activities.
#

sub usage()
{
35
    print "Usage: $0 IP MAC boot-type\n";
36
    print("boot-type is one of OS, PXE, UBOOT.\n");
37 38 39
 
    exit(1);
}
40
sub fatal($);
41 42 43 44

#
# Configure variables
#
45
my $SOCKETFILE    = "/var/run/reportboot.sock";
46 47 48 49 50 51

#
# Turn off line buffering on output
#
$| = 1;

52
if ($UID != 0) {
53
    fatal("Must be root to run this script");
54 55 56 57
}
if (@ARGV != 3) {
    usage();
}
58
my ($ip,$mac,$which) = @ARGV;
59

60 61
if (! -e $SOCKETFILE) {
    fatal("$SOCKETFILE does not exist!");
62
}
63 64 65 66 67 68
socket(SOCK, PF_UNIX, SOCK_STREAM, 0)
    or fatal("Could not create socket");
connect(SOCK, sockaddr_un($SOCKETFILE))
    or fatal("Could not connect socket");
print SOCK "$ip,$mac,$which\n";
close(SOCK);
69 70
exit(0);

71
sub fatal($)
72
{
73 74 75 76
    my ($msg) = @_;
    
    die("*** $0:\n".
	"    $msg\n");
77
}