xcat-core/xCAT-server-2.0/lib/xcat/plugins/switch.pm
jbjohnso 3b2b02b3e1 Improve performance of discovery process
-Pull UDP queue in to remove duplicates
-Query all caches before slow refresh activities
-Decrease timeout on nodediscover notification
-Switch now only bothers refreshing a cache older than 20 seconds


git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@249 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
2008-01-11 20:55:28 +00:00

54 lines
1.1 KiB
Perl

# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
package xCAT_plugin::switch;
use IO::Socket;
use Data::Dumper;
use xCAT::MacMap;
use Sys::Syslog;
use Storable;
my $macmap;
sub handled_commands {
$macmap = xCAT::MacMap->new();
return {
findme => 'switch',
};
}
sub process_request {
my $req = shift;
my $cb = shift;
my $doreq = shift;
my $ip = $req->{'!xcat_clientip'};
my $mac = '';
my $arptable = `/sbin/arp -n`;
my @arpents = split /\n/,$arptable;
foreach (@arpents) {
if (m/^($ip)\s+\S+\s+(\S+)\s/) {
$mac=$2;
last;
}
}
unless ($mac) {
return;
}
my $node = $macmap->find_mac($mac,$req->{cacheonly}->[0]);
if ($node) {
my $mactab = xCAT::Table->new('mac',-create=>1);
$mactab->setNodeAttribs($node,{mac=>$mac});
$mactab->close();
my %request = (
command => ['makedhcp'],
node => [$node]
);
$doreq->(\%request);
$req->{command}=['discovered'];
$req->{noderange} = [$node];
$doreq->($req);
%{$req}=();#Clear req structure, it's done..
undef $mactab;
} else {
#Shouldn't complain, might be blade, but how to log total failures?
}
}
1;