#!/usr/bin/perl

use Sys::Syslog;

use constant ScriptName => "vzarpset";
use constant SysLogFacility => "local4";
use constant SysLogPriority => "info";

@arplist=`arp -vn|egrep "\\\*[[:space:]]*\\\*[[:space:]]*MP"|awk '{print(\$1);}'`;
@velist=`vzlist| awk '{print(\$4);}'|egrep '^[0-9.]*\$'`;

my %arphash;
my %vehash;
my %arpadd;
my %arprm;

foreach $ip (@arplist ) {
	$arphash{$ip} = 1
}

foreach $ip (@velist) {
	$vehash{$ip} = 1;
	if (! $arphash{$ip}) {$arpadd{$ip} = 1}
}

foreach $ip (@arplist) {
	if (! $vehash{$ip}) {$arprm{$ip} = 1}
}

@arpadd = keys %arpadd;
@arprm = keys %arprm;

foreach $ip (@arpadd) {
	chomp($ip);
	openlog(ScriptName . "[$$]", "ndelay", SysLogFacility);
	syslog(SysLogPriority, "arp -s " . $ip . " 0:0:0:0:0:0 -i ether0 pub");
	closelog;
	system "arp -s " . $ip . " 0:0:0:0:0:0 -i ether0 pub";
}

foreach $ip (@arprm) {
	chomp($ip);
	openlog(ScriptName . "[$$]", "ndelay", SysLogFacility);
	syslog(SysLogPriority, "arp -d " . $ip . " -i ether0");
	closelog;
	system "arp -d " . $ip . " -i ether0";
}
