mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-25 04:01:45 +02:00
More optimization of detect_configuration()
Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
parent
864dba2e62
commit
86e053be7a
@ -260,6 +260,7 @@ our %EXPORT_TAGS = (
|
|||||||
get_interface_gateway
|
get_interface_gateway
|
||||||
get_interface_mac
|
get_interface_mac
|
||||||
have_global_variables
|
have_global_variables
|
||||||
|
have_address_variables
|
||||||
set_global_variables
|
set_global_variables
|
||||||
save_dynamic_chains
|
save_dynamic_chains
|
||||||
load_ipsets
|
load_ipsets
|
||||||
@ -5604,6 +5605,8 @@ sub have_ipset_rules() {
|
|||||||
|
|
||||||
sub get_interface_address( $ );
|
sub get_interface_address( $ );
|
||||||
|
|
||||||
|
sub get_interface_gateway ( $;$ );
|
||||||
|
|
||||||
sub record_runtime_address( $$;$ ) {
|
sub record_runtime_address( $$;$ ) {
|
||||||
my ( $addrtype, $interface, $protect ) = @_;
|
my ( $addrtype, $interface, $protect ) = @_;
|
||||||
|
|
||||||
@ -6693,11 +6696,10 @@ sub get_interface_gateway ( $;$ ) {
|
|||||||
$global_variables |= ALL_COMMANDS;
|
$global_variables |= ALL_COMMANDS;
|
||||||
|
|
||||||
if ( interface_is_optional $logical ) {
|
if ( interface_is_optional $logical ) {
|
||||||
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$($routine $interface)\n);
|
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$($routine $interface));
|
||||||
} else {
|
} else {
|
||||||
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$($routine $interface)
|
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$($routine $interface)
|
||||||
[ -n "\$$variable" ] || startup_error "Unable to detect the gateway through interface $interface"
|
[ -n "\$$variable" ] || startup_error "Unable to detect the gateway through interface $interface");
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$protect ? "\${$variable:-" . NILIP . '}' : "\$$variable";
|
$protect ? "\${$variable:-" . NILIP . '}' : "\$$variable";
|
||||||
@ -6803,16 +6805,40 @@ sub have_global_variables() {
|
|||||||
have_capability( 'ADDRTYPE' ) ? $global_variables : $global_variables | NOT_RESTORE;
|
have_capability( 'ADDRTYPE' ) ? $global_variables : $global_variables | NOT_RESTORE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub have_address_variables() {
|
||||||
|
( keys %interfaceaddr || keys %interfacemacs || keys %interfacegateways );
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate setting of run-time global shell variables
|
# Generate setting of run-time global shell variables
|
||||||
#
|
#
|
||||||
sub set_global_variables( $ ) {
|
sub set_global_variables( $$ ) {
|
||||||
|
|
||||||
my $setall = shift;
|
my ( $setall, $conditional ) = @_;
|
||||||
|
|
||||||
emit $_ for values %interfaceaddr;
|
if ( $conditional ) {
|
||||||
emit $_ for values %interfacegateways;
|
my ( $interface, $code );
|
||||||
emit $_ for values %interfacemacs;
|
|
||||||
|
while ( ( $interface, $code ) = each %interfaceaddr ) {
|
||||||
|
emit( qq([ -z "\$interface" -o "\$interface" = "$interface" ] && $code) );
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( ( $interface, $code ) = each %interfacegateways ) {
|
||||||
|
emit( qq(if [ -z "\$interface" -o "\$interface" = "$interface" ]; then) );
|
||||||
|
push_indent;
|
||||||
|
emit( $code );
|
||||||
|
pop_indent;
|
||||||
|
emit( qq(fi\n) );
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( ( $interface, $code ) = each %interfacemacs ) {
|
||||||
|
emit( qq([ -z "\$interface" -o "\$interface" = "$interface" ] && $code) );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emit $_ for values %interfaceaddr;
|
||||||
|
emit "$_\n" for values %interfacegateways;
|
||||||
|
emit $_ for values %interfacemacs;
|
||||||
|
}
|
||||||
|
|
||||||
if ( $setall ) {
|
if ( $setall ) {
|
||||||
emit $_ for values %interfaceaddrs;
|
emit $_ for values %interfaceaddrs;
|
||||||
|
@ -274,10 +274,21 @@ sub generate_script_2() {
|
|||||||
'detect_configuration()',
|
'detect_configuration()',
|
||||||
'{' );
|
'{' );
|
||||||
|
|
||||||
my $global_variables = have_global_variables;
|
my $global_variables = have_global_variables;
|
||||||
|
my $optional_interfaces = find_interfaces_by_option( 'optional' );
|
||||||
|
|
||||||
push_indent;
|
push_indent;
|
||||||
|
|
||||||
|
if ( have_address_variables || @$optional_interfaces ) {
|
||||||
|
emit( 'local interface',
|
||||||
|
'',
|
||||||
|
'interface="$1"',
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
map_provider_to_interface if have_providers;
|
||||||
|
|
||||||
if ( $global_variables ) {
|
if ( $global_variables ) {
|
||||||
|
|
||||||
if ( $global_variables & NOT_RESTORE ) {
|
if ( $global_variables & NOT_RESTORE ) {
|
||||||
@ -292,7 +303,7 @@ sub generate_script_2() {
|
|||||||
|
|
||||||
if ( $global_variables == ( ALL_COMMANDS | NOT_RESTORE ) ) {
|
if ( $global_variables == ( ALL_COMMANDS | NOT_RESTORE ) ) {
|
||||||
|
|
||||||
set_global_variables(0);
|
set_global_variables(0, 0);
|
||||||
|
|
||||||
handle_optional_interfaces(0);
|
handle_optional_interfaces(0);
|
||||||
}
|
}
|
||||||
@ -306,7 +317,7 @@ sub generate_script_2() {
|
|||||||
push_indent;
|
push_indent;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_global_variables(1);
|
set_global_variables(1,1);
|
||||||
|
|
||||||
if ( $global_variables & NOT_RESTORE ) {
|
if ( $global_variables & NOT_RESTORE ) {
|
||||||
handle_optional_interfaces(0);
|
handle_optional_interfaces(0);
|
||||||
|
@ -44,6 +44,7 @@ our @EXPORT = qw( process_providers
|
|||||||
compile_updown
|
compile_updown
|
||||||
setup_load_distribution
|
setup_load_distribution
|
||||||
have_providers
|
have_providers
|
||||||
|
map_provider_to_interface
|
||||||
);
|
);
|
||||||
our @EXPORT_OK = qw( initialize provider_realm );
|
our @EXPORT_OK = qw( initialize provider_realm );
|
||||||
our $VERSION = '4.4_24';
|
our $VERSION = '4.4_24';
|
||||||
@ -1588,6 +1589,35 @@ sub have_providers() {
|
|||||||
return our $providers;
|
return our $providers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub map_provider_to_interface() {
|
||||||
|
|
||||||
|
my $haveoptional;
|
||||||
|
|
||||||
|
for my $providerref ( values %providers ) {
|
||||||
|
if ( $providerref->{optional} ) {
|
||||||
|
unless ( $haveoptional++ ) {
|
||||||
|
emit( 'if [ -n "$interface" ]; then',
|
||||||
|
' case $interface in' );
|
||||||
|
|
||||||
|
push_indent;
|
||||||
|
push_indent;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit( $providerref->{provider} . ')',
|
||||||
|
' interface=' . $providerref->{physical},
|
||||||
|
' ;;' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $haveoptional ) {
|
||||||
|
pop_indent;
|
||||||
|
pop_indent;
|
||||||
|
emit( ' esac',
|
||||||
|
"fi\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub setup_providers() {
|
sub setup_providers() {
|
||||||
our $providers;
|
our $providers;
|
||||||
|
|
||||||
@ -1945,12 +1975,12 @@ sub handle_optional_interfaces( $ ) {
|
|||||||
#
|
#
|
||||||
# Just an optional interface, or provider and interface are the same
|
# Just an optional interface, or provider and interface are the same
|
||||||
#
|
#
|
||||||
emit qq(if [ -z "\$1" -o "\$1" = "$physical" ]; then);
|
emit qq(if [ -z "\$interface" -o "\$interface" = "$physical" ]; then);
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
# Provider
|
# Provider
|
||||||
#
|
#
|
||||||
emit qq(if [ -z "\$1" -o "\$1" = "$physical" -o "\$1" = "$provider" ]; then);
|
emit qq(if [ -z "\$interface" -o "\$interface" = "$physical" ]; then);
|
||||||
}
|
}
|
||||||
|
|
||||||
push_indent;
|
push_indent;
|
||||||
@ -1967,7 +1997,7 @@ sub handle_optional_interfaces( $ ) {
|
|||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
|
|
||||||
emit( 'fi' );
|
emit( "fi\n" );
|
||||||
|
|
||||||
emit( ';;' ), pop_indent if $wildcards;
|
emit( ';;' ), pop_indent if $wildcards;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user