#!/usr/bin/perl

use Modern::Perl;
use POSIX qw(strftime);
use autodie;

my (%v6, %last);

while (sleep (3)) {
	%last = %v6;
	%v6 = ();
	open (my $ip, "-|", qw(ip -6 -o addr show));
	while (<$ip>) {
		my ($if, $addr, $rest) = $_ =~ /^(?:\d+:)\s+(\S+)\s+inet6\s+(\S+)\s+(.+)/;
		next if (! $if || ($addr !~ /^2/));
		my ($valid) = $rest =~ /valid_lft (\d+)sec/;
		$valid = " " . $valid if ($valid);
		$valid //= "";
		if (! $last{$addr}) {
			my $add = strftime ("%F %T", localtime);
			print STDERR $add, " added ", $addr, $valid, "\n";
		}
		delete $last{$addr};
		$v6{$addr} = $valid;
	}
	foreach my $addr (sort keys %last) {
		my $del = strftime ("%F %T", localtime);
		print STDERR $del, " removed ", $addr, $last{$addr}, "\n";
	}
}
