summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2010-12-06 15:08:09 -0800
committerStephen Hemminger <stephen.hemminger@vyatta.com>2010-12-06 15:08:09 -0800
commit846c9163d5c79122abb3a3c9278fcb814615e7c6 (patch)
tree417abee0f2f1757eac081734b3c506b34dd8b337 /lib
parent4815e3b87abe4c61feb766240d7816879c33a103 (diff)
downloadvyatta-cfg-846c9163d5c79122abb3a3c9278fcb814615e7c6.tar.gz
vyatta-cfg-846c9163d5c79122abb3a3c9278fcb814615e7c6.zip
Add is_local_address to Misc.pm
Commonly needed routine to check if IP address is local.
Diffstat (limited to 'lib')
-rwxr-xr-xlib/Vyatta/Misc.pm17
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/Vyatta/Misc.pm b/lib/Vyatta/Misc.pm
index 3e109f2..949c6a2 100755
--- a/lib/Vyatta/Misc.pm
+++ b/lib/Vyatta/Misc.pm
@@ -26,7 +26,8 @@ require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(getInterfaces getIP getNetAddIP get_sysfs_value
is_address_enabled is_dhcp_enabled get_ipaddr_intf_hash
- isIpAddress is_ip_v4_or_v6 interface_description);
+ isIpAddress is_ip_v4_or_v6 interface_description
+ is_local_addres);
our @EXPORT_OK = qw(generate_dhclient_intf_files
getInterfacesIPadresses
getPortRuleString);
@@ -34,7 +35,7 @@ our @EXPORT_OK = qw(generate_dhclient_intf_files
use Vyatta::Config;
use Vyatta::Interface;
use NetAddr::IP;
-
+use Socket;
#
# returns a hash of ipaddrs => interface
#
@@ -125,6 +126,18 @@ sub getInterfaces {
return @interfaces;
}
+# Test if IP address is local to the system.
+# Implemented by doing bind since by default
+# Linux will only allow binding to local addresses
+sub is_local_address {
+ my $addr = shift;
+
+ socket( my $sock, PF_INET, SOCK_STREAM, 0)
+ or die "socket failed\n";
+
+ return bind($sock, sockaddr_in(0, inet_aton($addr)));
+}
+
# get list of IPv4 and IPv6 addresses
# if name is defined then get the addresses on that interface
# if type is defined then restrict to that type (inet, inet6)