+ return $new;
+}
+
+sub all_ips {
+ sort { ip::to_int($a) cmp ip::to_int($b) }
+ map {
+ my $ip = $_;
+ $ip =~ s{^.+/ip/}{};
+ autocreate_params( $ip );
+ $ip;
+ } glob("$server::conf/ip/*")
+}
+
+sub remove {
+ my $ip = shift;
+ if ( my $mac = mac_from_ip $ip ) {
+ unlink "$server::conf/mac/$mac";
+ }
+ rmtree "$server::conf/ip/$ip";
+}
+
+sub arp_mac_dev {
+ my $arp = {
+ map {
+ my @c = split(/\s+/,$_);
+ if ( $#c == 5 ) {
+ client::save_ip_mac( $c[0], $c[3] );
+ ( uc $c[3] => $c[5] )
+ } else {
+ }
+ } read_file('/proc/net/arp')
+ };
+
+ warn "# arp ",dump( $arp );
+ return $arp;
+}
+
+sub rebuild_mac_links {
+ warn "# rebuild mac links";
+ foreach my $ip ( all_ips ) {
+ my $mac = ip_path $ip, 'mac';
+ if ( -e $mac ) {
+ $mac = read_file $mac;
+ chomp $mac;
+ save_ip_mac( $ip, $mac );
+ warn "## $ip $mac\n";
+ }
+ }
+}
+
+sub autocreate_params {
+ my $ip = shift;
+ my $mac = mac_from_ip $ip;
+ if ( $mac =~ m{^AC:DE:48:00:00} && ! defined conf( $ip, 'kvm' ) ) {
+ conf( $ip, 'kvm', default => kvm::nr_from_mac( $mac ) );
+ warn "# create kvm for $ip";
+ }