diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-12-06 15:08:09 -0800 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-12-06 15:08:09 -0800 |
commit | 846c9163d5c79122abb3a3c9278fcb814615e7c6 (patch) | |
tree | 417abee0f2f1757eac081734b3c506b34dd8b337 /lib | |
parent | 4815e3b87abe4c61feb766240d7816879c33a103 (diff) | |
download | vyatta-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-x | lib/Vyatta/Misc.pm | 17 |
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) |