summaryrefslogtreecommitdiff
path: root/lib/Vyatta/Misc.pm
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2009-04-27 14:14:52 -0700
committerStephen Hemminger <stephen.hemminger@vyatta.com>2009-04-27 14:14:52 -0700
commit134d48232a74473ed2d03920e44e400858e44bb1 (patch)
tree690738753e44ee4bf8ea8a416d68a9b12222e967 /lib/Vyatta/Misc.pm
parent5d201ef68e88c501fa98acef9c5e414415b74ffe (diff)
downloadvyatta-cfg-134d48232a74473ed2d03920e44e400858e44bb1.tar.gz
vyatta-cfg-134d48232a74473ed2d03920e44e400858e44bb1.zip
reindent code
Diffstat (limited to 'lib/Vyatta/Misc.pm')
-rwxr-xr-xlib/Vyatta/Misc.pm353
1 files changed, 183 insertions, 170 deletions
diff --git a/lib/Vyatta/Misc.pm b/lib/Vyatta/Misc.pm
index fc9cc39..2bad31d 100755
--- a/lib/Vyatta/Misc.pm
+++ b/lib/Vyatta/Misc.pm
@@ -8,12 +8,12 @@
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
-#
+#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
+#
# This code was originally developed by Vyatta, Inc.
# Portions created by Vyatta are Copyright (C) 2006, 2007, 2008 Vyatta, Inc.
# All Rights Reserved.
@@ -23,20 +23,21 @@ package Vyatta::Misc;
use strict;
require Exporter;
-our @ISA = qw(Exporter);
-our @EXPORT = qw(get_sysfs_value getInterfaces getNetAddIP isIpAddress is_ip_v4_or_v6 is_dhcp_enabled is_address_enabled);
-our @EXPORT_OK = qw(get_sysfs_value getNetAddIP isIpAddress is_ip_v4_or_v6
- getInterfacesIPadresses getPortRuleString);
+our @ISA = qw(Exporter);
+our @EXPORT =
+ qw(get_sysfs_value getInterfaces getNetAddIP isIpAddress is_ip_v4_or_v6 is_dhcp_enabled is_address_enabled);
+our @EXPORT_OK = qw(get_sysfs_value getNetAddIP isIpAddress is_ip_v4_or_v6
+ getInterfacesIPadresses getPortRuleString);
use Vyatta::Config;
use Vyatta::Interface;
use NetAddr::IP;
sub get_sysfs_value {
- my ($intf, $name) = @_;
+ my ( $intf, $name ) = @_;
- open (my $statf, '<', "/sys/class/net/$intf/$name")
- or die "Can't open statistics file /sys/class/net/$intf/$name";
+ open( my $statf, '<', "/sys/class/net/$intf/$name" )
+ or die "Can't open statistics file /sys/class/net/$intf/$name";
my $value = <$statf>;
chomp $value if defined $value;
@@ -46,18 +47,19 @@ sub get_sysfs_value {
# check if interface is configured to get an IP address using dhcp
sub is_dhcp_enabled {
- my ($name, $outside_cli) = @_;
+ my ( $name, $outside_cli ) = @_;
my $intf = new Vyatta::Interface($name);
return unless $intf;
my $config = new Vyatta::Config;
- $config->{_active_dir_base} = "/opt/vyatta/config/active/"
- if ($outside_cli);
+ $config->{_active_dir_base} = "/opt/vyatta/config/active/"
+ if ($outside_cli);
- $config->setLevel($intf->path());
- foreach my $addr ($config->returnOrigValues('address')) {
- return 1 if ($addr && $addr eq "dhcp");
+ $config->setLevel( $intf->path() );
+ foreach my $addr ( $config->returnOrigValues('address') ) {
+ return 1 if ( $addr && $addr eq "dhcp" );
}
+
# return undef
}
@@ -68,29 +70,30 @@ sub is_address_enabled {
$intf or return;
my $config = new Vyatta::Config;
- $config->setLevel($intf->path());
- foreach my $addr ($config->returnOrigValues('address')) {
- return 1 if ($addr && $addr ne 'dhcp');
+ $config->setLevel( $intf->path() );
+ foreach my $addr ( $config->returnOrigValues('address') ) {
+ return 1 if ( $addr && $addr ne 'dhcp' );
}
+
# return undefined (ie false)
}
# return dhclient related files for interface
sub generate_dhclient_intf_files {
- my $intf = shift;
+ my $intf = shift;
my $dhclient_dir = '/var/lib/dhcp3/';
$intf =~ s/\./_/g;
- my $intf_config_file = $dhclient_dir . 'dhclient_' . $intf . '.conf';
+ my $intf_config_file = $dhclient_dir . 'dhclient_' . $intf . '.conf';
my $intf_process_id_file = $dhclient_dir . 'dhclient_' . $intf . '.pid';
- my $intf_leases_file = $dhclient_dir . 'dhclient_' . $intf . '.leases';
- return ($intf_config_file, $intf_process_id_file, $intf_leases_file);
+ my $intf_leases_file = $dhclient_dir . 'dhclient_' . $intf . '.leases';
+ return ( $intf_config_file, $intf_process_id_file, $intf_leases_file );
}
sub getInterfaces {
- opendir (my $sys_class, '/sys/class/net')
- or die "can't open /sys/class/net: $!";
+ opendir( my $sys_class, '/sys/class/net' )
+ or die "can't open /sys/class/net: $!";
my @interfaces =
grep { ( !/^\./ ) && ( $_ ne 'bonding_masters' ) } readdir $sys_class;
closedir $sys_class;
@@ -98,33 +101,32 @@ sub getInterfaces {
}
sub getIP {
- my ($name, $type) = @_;
+ my ( $name, $type ) = @_;
my @addresses;
- open my $ipcmd, '-|'
- or exec qw(ip addr show dev), $name
- or die "ip addr command failed: $!";
+ open my $ipcmd, '-|'
+ or exec qw(ip addr show dev), $name
+ or die "ip addr command failed: $!";
<$ipcmd>;
while (<$ipcmd>) {
- my ($proto, $addr) = split;
- next unless ($proto =~ /inet/);
- if ($type) {
- next if ($proto eq 'inet6' && $type != 6);
- next if ($proto eq 'inet' && $type != 4);
- }
-
- push @addresses, $addr;
+ my ( $proto, $addr ) = split;
+ next unless ( $proto =~ /inet/ );
+ if ($type) {
+ next if ( $proto eq 'inet6' && $type != 6 );
+ next if ( $proto eq 'inet' && $type != 4 );
+ }
+
+ push @addresses, $addr;
}
close $ipcmd;
return @addresses;
}
-
my %type_hash = (
- 'broadcast' => 'is_broadcast',
- 'multicast' => 'is_multicast',
+ 'broadcast' => 'is_broadcast',
+ 'multicast' => 'is_multicast',
'pointtopoint' => 'is_pointtopoint',
'loopback' => 'is_loopback',
);
@@ -139,21 +141,21 @@ sub getInterfacesIPadresses {
$type or die "Interface type not defined";
- if ($type ne 'all') {
- $type_func = $type_hash{$type};
- die "Invalid type specified to retreive IP addresses for: $type"
- unless $type_func;
+ if ( $type ne 'all' ) {
+ $type_func = $type_hash{$type};
+ die "Invalid type specified to retreive IP addresses for: $type"
+ unless $type_func;
}
- foreach my $name (getInterfaces()) {
- my $intf = new Vyatta::Interface($name);
- next unless $intf;
- if (defined $type_func) {
- next unless $intf->$type_func();
- }
+ foreach my $name ( getInterfaces() ) {
+ my $intf = new Vyatta::Interface($name);
+ next unless $intf;
+ if ( defined $type_func ) {
+ next unless $intf->$type_func();
+ }
- my @addresses = $intf->address(4);
- push @ips, @addresses;
+ my @addresses = $intf->address(4);
+ push @ips, @addresses;
}
return @ips;
}
@@ -163,11 +165,12 @@ sub getNetAddrIP {
my $intf = new Vyatta::Interface($name);
$intf or return;
- foreach my $addr ($intf->addresses()) {
- my $ip = new NetAddr::IP $addr;
- next unless ($ip && ip->version() == 4);
- return $ip;
+ foreach my $addr ( $intf->addresses() ) {
+ my $ip = new NetAddr::IP $addr;
+ next unless ( $ip && ip->version() == 4 );
+ return $ip;
}
+
# default return of undefined (ie false)
}
@@ -178,79 +181,82 @@ sub is_ip_v4_or_v6 {
return unless defined $ip;
my $vers = $ip->version();
- if ($vers == 4) {
- #
- # NetAddr::IP will accept short forms 1.1 and hostnames
- # so check if all 4 octets are defined
- return 4 unless ($addr !~ /\d+\.\d+\.\d+\.\d+/); # undef
- } elsif ($vers == 6) {
- return 6;
+ if ( $vers == 4 ) {
+
+ #
+ # NetAddr::IP will accept short forms 1.1 and hostnames
+ # so check if all 4 octets are defined
+ return 4 unless ( $addr !~ /\d+\.\d+\.\d+\.\d+/ ); # undef
+ }
+ elsif ( $vers == 6 ) {
+ return 6;
}
# default return of undefined (ie false)
}
sub isIpAddress {
- my $ip = shift;
-
- return unless $ip =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/;
-
- return unless ($1 > 0 && $1 < 256);
- return unless ($2 >= 0 && $2 < 256);
- return unless ($3 >= 0 && $3 < 256);
- return unless ($4 >= 0 && $4 < 256);
- return 1;
+ my $ip = shift;
+
+ return unless $ip =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/;
+
+ return unless ( $1 > 0 && $1 < 256 );
+ return unless ( $2 >= 0 && $2 < 256 );
+ return unless ( $3 >= 0 && $3 < 256 );
+ return unless ( $4 >= 0 && $4 < 256 );
+ return 1;
}
sub isClusterIP {
- my ($vc, $ip) = @_;
-
- return unless $ip; # undef
-
+ my ( $vc, $ip ) = @_;
+
+ return unless $ip; # undef
+
my @cluster_groups = $vc->listNodes('cluster group');
foreach my $cluster_group (@cluster_groups) {
- my @services = $vc->returnValues("cluster group $cluster_group service");
- foreach my $service (@services) {
- if ($ip eq substr($service,0,index($service,'/'))) {
- return 1;
- }
- }
+ my @services =
+ $vc->returnValues("cluster group $cluster_group service");
+ foreach my $service (@services) {
+ if ( $ip eq substr( $service, 0, index( $service, '/' ) ) ) {
+ return 1;
+ }
+ }
}
-
+
return;
}
sub remove_ip_prefix {
my @addr_nets = @_;
- s/\/\d+$// for @addr_nets;
+ s/\/\d+$// for @addr_nets;
return @addr_nets;
}
sub is_ip_in_list {
- my ($ip, @list) = @_;
-
+ my ( $ip, @list ) = @_;
+
@list = remove_ip_prefix(@list);
my %list_hash = map { $_ => 1 } @list;
return $list_hash{$ip};
}
-
sub isIPinInterfaces {
- my ($vc, $ip_addr, @interfaces) = @_;
+ my ( $vc, $ip_addr, @interfaces ) = @_;
- return unless $ip_addr; # undef == false
+ return unless $ip_addr; # undef == false
foreach my $name (@interfaces) {
- return 1 if (is_ip_in_list($ip_addr, getIP($name)));
+ return 1 if ( is_ip_in_list( $ip_addr, getIP($name) ) );
}
+
# false (undef)
}
sub isClusteringEnabled {
my ($vc) = @_;
-
+
return $vc->exists('cluster');
}
@@ -259,12 +265,12 @@ sub isClusteringEnabled {
# $success: 1 if success. otherwise undef
# $err: error message if failure. otherwise undef
sub isValidPortNumber {
- my $str = shift;
- return (undef, "\"$str\" is not a valid port number")
- if (!($str =~ /^\d+$/));
- return (undef, "invalid port \"$str\" (must be between 1 and 65535)")
- if ($str < 1 || $str > 65535);
- return (1, undef);
+ my $str = shift;
+ return ( undef, "\"$str\" is not a valid port number" )
+ if ( !( $str =~ /^\d+$/ ) );
+ return ( undef, "invalid port \"$str\" (must be between 1 and 65535)" )
+ if ( $str < 1 || $str > 65535 );
+ return ( 1, undef );
}
# $str: string representing a port range
@@ -273,18 +279,18 @@ sub isValidPortNumber {
# $success: 1 if success. otherwise undef
# $err: error message if failure. otherwise undef
sub isValidPortRange {
- my $str = shift;
- my $sep = shift;
- return (undef, "\"$str\" is not a valid port range")
- if (!($str =~ /^(\d+)$sep(\d+)$/));
- my ($start, $end) = ($1, $2);
- my ($success, $err) = isValidPortNumber($start);
- return (undef, $err) if (!defined($success));
- ($success, $err) = isValidPortNumber($end);
- return (undef, $err) if (!defined($success));
- return (undef, "invalid port range ($end is not greater than $start)")
- if ($end <= $start);
- return (1, undef);
+ my $str = shift;
+ my $sep = shift;
+ return ( undef, "\"$str\" is not a valid port range" )
+ if ( !( $str =~ /^(\d+)$sep(\d+)$/ ) );
+ my ( $start, $end ) = ( $1, $2 );
+ my ( $success, $err ) = isValidPortNumber($start);
+ return ( undef, $err ) if ( !defined($success) );
+ ( $success, $err ) = isValidPortNumber($end);
+ return ( undef, $err ) if ( !defined($success) );
+ return ( undef, "invalid port range ($end is not greater than $start)" )
+ if ( $end <= $start );
+ return ( 1, undef );
}
# $str: string representing a port name
@@ -293,76 +299,83 @@ sub isValidPortRange {
# $success: 1 if success. otherwise undef
# $err: error message if failure. otherwise undef
sub isValidPortName {
- my $str = shift;
- my $proto = shift;
- return (undef, "\"\" is not a valid port name for protocol \"$proto\"")
- if ($str eq '');
+ my $str = shift;
+ my $proto = shift;
+ return ( undef, "\"\" is not a valid port name for protocol \"$proto\"" )
+ if ( $str eq '' );
- my $port = getservbyname($str, $proto);
- return (1, undef) if $port;
+ my $port = getservbyname( $str, $proto );
+ return ( 1, undef ) if $port;
- return (undef, "\"$str\" is not a valid port name for protocol \"$proto\"");
+ return ( undef,
+ "\"$str\" is not a valid port name for protocol \"$proto\"" );
}
sub getPortRuleString {
- my $port_str = shift;
- my $can_use_port = shift;
- my $prefix = shift;
- my $proto = shift;
- my $negate = '';
- if ($port_str =~ /^!(.*)$/) {
- $port_str = $1;
- $negate = '! ';
- }
- $port_str =~ s/(\d+)-(\d+)/$1:$2/g;
-
- my $num_ports = 0;
- my @port_specs = split /,/, $port_str;
- foreach my $port_spec (@port_specs) {
- my ($success, $err) = (undef, undef);
- if ($port_spec =~ /:/) {
- ($success, $err) = isValidPortRange($port_spec, ':');
- if (defined($success)) {
- $num_ports += 2;
- next;
- } else {
- return (undef, $err);
- }
+ my $port_str = shift;
+ my $can_use_port = shift;
+ my $prefix = shift;
+ my $proto = shift;
+ my $negate = '';
+ if ( $port_str =~ /^!(.*)$/ ) {
+ $port_str = $1;
+ $negate = '! ';
}
- if ($port_spec =~ /^\d/) {
- ($success, $err) = isValidPortNumber($port_spec);
- if (defined($success)) {
- $num_ports += 1;
- next;
- } else {
- return (undef, $err);
- }
+ $port_str =~ s/(\d+)-(\d+)/$1:$2/g;
+
+ my $num_ports = 0;
+ my @port_specs = split /,/, $port_str;
+ foreach my $port_spec (@port_specs) {
+ my ( $success, $err ) = ( undef, undef );
+ if ( $port_spec =~ /:/ ) {
+ ( $success, $err ) = isValidPortRange( $port_spec, ':' );
+ if ( defined($success) ) {
+ $num_ports += 2;
+ next;
+ }
+ else {
+ return ( undef, $err );
+ }
+ }
+ if ( $port_spec =~ /^\d/ ) {
+ ( $success, $err ) = isValidPortNumber($port_spec);
+ if ( defined($success) ) {
+ $num_ports += 1;
+ next;
+ }
+ else {
+ return ( undef, $err );
+ }
+ }
+ ( $success, $err ) = isValidPortName( $port_spec, $proto );
+ if ( defined($success) ) {
+ $num_ports += 1;
+ next;
+ }
+ else {
+ return ( undef, $err );
+ }
}
- ($success, $err) = isValidPortName($port_spec, $proto);
- if (defined($success)) {
- $num_ports += 1;
- next;
- } else {
- return (undef, $err);
+
+ my $rule_str = '';
+ if ( ( $num_ports > 0 ) && ( !$can_use_port ) ) {
+ return ( undef,
+ "ports can only be specified when protocol is \"tcp\" "
+ . "or \"udp\" (currently \"$proto\")" );
+ }
+ if ( $num_ports > 15 ) {
+ return ( undef,
+ "source/destination port specification only supports "
+ . "up to 15 ports (port range counts as 2)" );
+ }
+ if ( $num_ports > 1 ) {
+ $rule_str = " -m multiport --${prefix}ports ${negate}${port_str}";
}
- }
-
- my $rule_str = '';
- if (($num_ports > 0) && (!$can_use_port)) {
- return (undef, "ports can only be specified when protocol is \"tcp\" "
- . "or \"udp\" (currently \"$proto\")");
- }
- if ($num_ports > 15) {
- return (undef, "source/destination port specification only supports "
- . "up to 15 ports (port range counts as 2)");
- }
- if ($num_ports > 1) {
- $rule_str = " -m multiport --${prefix}ports ${negate}${port_str}";
- } elsif ($num_ports > 0) {
- $rule_str = " --${prefix}port ${negate}${port_str}";
- }
-
- return ($rule_str, undef);
+ elsif ( $num_ports > 0 ) {
+ $rule_str = " --${prefix}port ${negate}${port_str}";
+ }
+
+ return ( $rule_str, undef );
}
1;