More perl newbie code rework and global initialization fixes

git-svn-id: https://shorewall.svn.sourceforge.net/svnroot/shorewall/trunk@6652 fbd18981-670d-0410-9b5c-8dc0c1a9a2bb
This commit is contained in:
teastep 2007-06-23 16:06:16 +00:00
parent a7c3d6a335
commit 3151db4561
5 changed files with 65 additions and 72 deletions

View File

@ -72,7 +72,7 @@ our %actions;
#
# Contains an entry for each used <action>:<level>[:<tag>] that maps to the associated chain.
#
my %logactionchains;
our %logactionchains;
#
# Initialize globals -- we take this novel approach to globals initialization to allow
# the compiler to run multiple times in the same process. The
@ -143,11 +143,7 @@ sub new_action( $ ) {
my $action = $_[0];
my %h;
$h{actchain} = '';
$h{requires} = {};
$actions{$action} = \%h;
$actions{$action} = { actchain => '', requires => {} };
}
#

View File

@ -198,6 +198,10 @@ our $exclseq;
our $iprangematch;
our $chainseq;
our %interfaceaddr;
our %interfaceaddrs;
our %interfacenets;
#
# Initialize globals -- we take this novel approach to globals initialization to allow
# the compiler to run multiple times in the same process. The
@ -277,6 +281,12 @@ sub initialize() {
# Sequence for naming temporary chains
#
$chainseq = undef;
#
# Keep track of which interfaces have active 'address', 'addresses' and 'networks' variables
#
%interfaceaddr = ();
%interfaceaddrs = ();
%interfacenets = ();
}
INIT {
@ -531,17 +541,14 @@ sub first_chains( $ ) #$1 = interface
sub new_chain($$)
{
my ($table, $chain) = @_;
my %ch;
$ch{name} = $chain;
$ch{log} = 1 if $globals{LOGRULENUMBERS};
$ch{rules} = [];
$ch{table} = $table;
$ch{loglevel} = '';
$ch{loopcount} = 0;
$ch{cmdcount} = 0;
$chain_table{$table}{$chain} = \%ch;
\%ch;
$chain_table{$table}{$chain} = { name => $chain,
rules => [],
table => $table,
loglevel => '',
log => 1,
loopcount => 0,
cmdcount => 0 };
}
#
@ -1328,13 +1335,6 @@ sub mysplit( $ ) {
@result;
}
#
# Keep track of which interfaces have active 'address', 'addresses' and 'networks' variables
#
my %interfaceaddr;
my %interfaceaddrs;
my %interfacenets;
#
# Returns the name of the shell variable holding the first address of the passed interface
#

View File

@ -134,14 +134,11 @@ sub add_group_to_zone($$$$$)
$zoneref->{options}{complex} = 1 if @$arrayref || ( @newnetworks > 1 ) || ( @exclusions );
my %h;
$h{options} = $options;
$h{hosts} = \@newnetworks;
$h{ipsec} = $type eq 'ipsec' ? 'ipsec' : 'none';
push @{$zoneref->{exclusions}}, @exclusions;
push @{$arrayref}, \%h;
push @{$arrayref}, { options => $options,
hosts => \@newnetworks,
ipsec => $type eq 'ipsec' ? 'ipsec' : 'none' };
}
#

View File

@ -123,6 +123,37 @@ our %classids;
our @deferred_rules;
#
# Perl version of Arn Bernin's 'tc4shorewall'.
#
# TCDevices Table
#
# %tcdevices { <interface> -> {in_bandwidth => <value> ,
# out_bandwidth => <value>
# number => <ordinal>
# default => <default class mark value> }
#
our @tcdevices;
our %tcdevices;
#
# TCClasses Table
#
# %tcclasses { device => <device> ,
# mark => <mark> ,
# rate => <rate> ,
# ceiling => <ceiling> ,
# priority => <priority> ,
# options => { tos => [ <value1> , <value2> , ... ];
# tcp_ack => 1 ,
# ...
#
our @tcclasses;
our %tcclasses;
our $prefix = '1';
#
# Initialize globals -- we take this novel approach to globals initialization to allow
# the compiler to run multiple times in the same process. The
@ -135,6 +166,10 @@ our @deferred_rules;
sub initialize() {
%classids = ();
@deferred_rules = ();
@tcdevices = ();
%tcdevices = ();
@tcclasses = ();
%tcclasses = ();
}
sub process_tc_rule( $$$$$$$$$$ ) {
@ -256,37 +291,6 @@ sub process_tc_rule( $$$$$$$$$$ ) {
}
#
# Perl version of Arn Bernin's 'tc4shorewall'.
#
# TCDevices Table
#
# %tcdevices { <interface> -> {in_bandwidth => <value> ,
# out_bandwidth => <value>
# number => <ordinal>
# default => <default class mark value> }
#
my @tcdevices;
my %tcdevices;
#
# TCClasses Table
#
# %tcclasses { device => <device> ,
# mark => <mark> ,
# rate => <rate> ,
# ceiling => <ceiling> ,
# priority => <priority> ,
# options => { tos => [ <value1> , <value2> , ... ];
# tcp_ack => 1 ,
# ...
#
my @tcclasses;
my %tcclasses;
my $prefix = '1';
sub rate_to_kbit( $ ) {
my $rate = $_[0];

View File

@ -247,22 +247,18 @@ sub determine_zones()
fatal_error "Invalid zone type ($type)" ;
}
my %zone_hash;
$options = '' if $options eq '-';
$in_options = '' if $in_options eq '-';
$out_options = '' if $out_options eq '-';
$zone_hash{in_out} = parse_zone_option_list( $options || '', $type );
$zone_hash{in} = parse_zone_option_list( $in_options || '', $type );
$zone_hash{out} = parse_zone_option_list( $out_options || '', $type );
$zone_hash{complex} = ($type eq 'ipsec4' || $options || $in_options || $out_options ? 1 : 0);
for ( $options, $in_options, $out_options ) {
$_ = '' if $_ eq '-';
}
$zones{$zone} = { type => $type,
parents => \@parents,
exclusions => [],
bridge => '',
options => \%zone_hash,
options => { in_out => parse_zone_option_list( $options || '', $type ) ,
in => parse_zone_option_list( $in_options || '', $type ) ,
out => parse_zone_option_list( $out_options || '', $type ) ,
complex => ($type eq 'ipsec4' || $options || $in_options || $out_options ? 1 : 0) } ,
interfaces => {} ,
children => [] ,
hosts => {}