nodeip.in 1.93 KB
Newer Older
1
#!/usr/bin/perl -w
2

Leigh Stoller's avatar
Leigh Stoller committed
3
#
4
# Copyright (c) 2000-2017 University of Utah and the Flux Group.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 
# {{{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/>.
# 
# }}}
Leigh Stoller's avatar
Leigh Stoller committed
24 25
#

26 27 28 29 30 31 32 33 34 35 36 37 38
#
# nodeip - Given a node, interface, or MAC address, print the interface
# information for that interface. If a node is given, all interfaces for
# that node are printed.
#

#
# Configure variables
#
use lib '@prefix@/lib';
use libdb;

if ($#ARGV < 0) {
Russ Fish's avatar
Russ Fish committed
39 40
	print "Usage: nodeip <node|mac|if> <node|mac|if> <...>\n";
	print "<node> is in the form pcxxx\n";
41
	print "<mac> is in the form xx:xx:xx:xx:xx:xx or xxxxxxxxxxxx\n";
42
	print "<if> is in the form <node[:iface]>\n";
43 44
	exit(1);
}
45 46 47

my @list = "";
my $n=0;
48 49 50 51 52

foreach my $mac ( @ARGV ) { 
	if ( $mac =~ /^(sh\d+)(-\d)?(:\d)?$/ ) {
		my $node = $1. (defined $2 ? $2 : "-" );
		$list[$n] .= "(node_id like '$node%')";
53
	} elsif ( $mac =~ /^([a-zA-Z]+\d+):([-\w]*)$/ ) {
54 55
		my $node=$1;
		my $if=$2;
56
		$list[$n] .= "(node_id='$node' and iface='$if')";
57 58 59 60 61 62 63 64 65 66
	} elsif ( $mac =~ /^([a-zA-Z]+\d+)$/ ) {
		my $node=$1;
		$list[$n] .= "(node_id='$node')";
	} else {
		$mac =~ s/^(\d):/0$1:/;
		$mac =~ s/:(\d):/:0$1:/g;
		$mac =~ s/://g;
		$list[$n] ="MAC='\L$mac'";
	}
	$n++;
67 68 69 70
}

my $cond = join(" or ",@list);

71
my $result = DBQueryFatal("select * from interfaces where $cond");
72

73
print $result->as_string();