network: add canonical_ip function

Net::IP doesn't seem to have a function for it and normalizing to the full
quad-form is less then ideal if we inted to output IPv6 addresses returned by
that function at some point.

Instead, use NetAddr::IP, which is already used in pve-network.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
This commit is contained in:
Fabian Ebner 2021-05-10 14:18:15 +02:00 committed by Thomas Lamprecht
parent b0e3bcc186
commit 8286ef53bb

View File

@ -10,6 +10,7 @@ use PVE::Tools qw(run_command lock_file);
use File::Basename; use File::Basename;
use IO::Socket::IP; use IO::Socket::IP;
use Net::IP; use Net::IP;
use NetAddr::IP qw(:lower);
use POSIX qw(ECONNREFUSED); use POSIX qw(ECONNREFUSED);
use Socket qw(NI_NUMERICHOST NI_NUMERICSERV); use Socket qw(NI_NUMERICHOST NI_NUMERICSERV);
@ -655,4 +656,13 @@ sub lock_network {
return $res; return $res;
} }
# the canonical form of the given IP, i.e. dotted quad for IPv4 and RFC 5952 for IPv6
sub canonical_ip {
my ($ip) = @_;
my $ip_obj = NetAddr::IP->new($ip) or die "invalid IP string '$ip'\n";
return $ip_obj->canon();
}
1; 1;