From: Thomas Lamprecht Date: Fri, 28 Oct 2016 09:53:24 +0000 (+0200) Subject: add get_local_ip_from_cidr X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=commitdiff_plain;h=beb9820ffb8fe3154573c88d3066be6ab4d5c0a3 add get_local_ip_from_cidr The get_local_ip_from_cidr method can be used to determine addresses configured on interfaces from the callers node which are located in the subnet. The subnet can be passed in CIDR notation. Signed-off-by: Thomas Lamprecht --- diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm index 3a0d778..1c03770 100644 --- a/src/PVE/Network.pm +++ b/src/PVE/Network.pm @@ -555,6 +555,27 @@ sub is_ip_in_cidr { return $cidr_obj->overlaps($ip_obj) == $Net::IP::IP_B_IN_A_OVERLAP; } + +sub get_local_ip_from_cidr { + my ($cidr) = @_; + + my $cmd = ['/sbin/ip', 'address', 'show', 'to', $cidr, 'up']; + + my $IPs = []; + + my $code = sub { + my $line = shift; + + if ($line =~ m!^\s*inet(?:6)?\s+($PVE::Tools::IPRE)/\d+!) { + push @$IPs, $1; + } + }; + + PVE::Tools::run_command($cmd, outfunc => $code); + + return $IPs; +} + sub lock_network { my ($code, @param) = @_; my $res = lock_file('/var/lock/pve-network.lck', 10, $code, @param);