mirror of
https://gitlab.com/shorewall/code.git
synced 2025-04-25 03:39:16 +02:00
Correct handling of optional shared providers
This commit is contained in:
parent
d7a3f90f65
commit
ec04636c86
@ -266,24 +266,26 @@ sub add_a_provider( $$$$$$$$ ) {
|
|||||||
|
|
||||||
my $provider = chain_base $table;
|
my $provider = chain_base $table;
|
||||||
my $base = uc chain_base $interface;
|
my $base = uc chain_base $interface;
|
||||||
|
my $gatewaycase = '';
|
||||||
|
|
||||||
if ( $gateway eq 'detect' ) {
|
if ( $gateway eq 'detect' ) {
|
||||||
fatal_error "Configuring multiple providers through one interface requires an explicit gateway" if $shared;
|
fatal_error "Configuring multiple providers through one interface requires an explicit gateway" if $shared;
|
||||||
$gateway = get_interface_gateway $interface;
|
$gateway = get_interface_gateway $interface;
|
||||||
start_provider( $table, $number, qq(if interface_is_usable $interface && [ -n "$gateway" ]; then) );
|
$gatewaycase = 'detect';
|
||||||
} else {
|
} else {
|
||||||
start_provider( $table, $number, "if interface_is_usable $interface; then" );
|
|
||||||
|
|
||||||
if ( $gateway && $gateway ne '-' ) {
|
if ( $gateway && $gateway ne '-' ) {
|
||||||
validate_address $gateway, 0;
|
validate_address $gateway, 0;
|
||||||
|
$gatewaycase = 'specified';
|
||||||
} else {
|
} else {
|
||||||
|
$gatewaycase = 'none';
|
||||||
fatal_error "Configuring multiple providers through one interface requires a gateway" if $shared;
|
fatal_error "Configuring multiple providers through one interface requires a gateway" if $shared;
|
||||||
$gateway = '';
|
$gateway = '';
|
||||||
emit "run_ip route add default dev $interface table $number";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my $val = 0;
|
my $val = 0;
|
||||||
|
my $pref;
|
||||||
|
|
||||||
if ( $mark ne '-' ) {
|
if ( $mark ne '-' ) {
|
||||||
|
|
||||||
@ -303,13 +305,8 @@ sub add_a_provider( $$$$$$$$ ) {
|
|||||||
fatal_error "Duplicate mark value ($mark)" if $providerref->{mark} == $val;
|
fatal_error "Duplicate mark value ($mark)" if $providerref->{mark} == $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $pref = 10000 + $number - 1;
|
$pref = 10000 + $number - 1;
|
||||||
|
|
||||||
emit ( "qt \$IP -$family rule del fwmark $mark" ) if $config{DELETE_THEN_ADD};
|
|
||||||
|
|
||||||
emit ( "run_ip rule add fwmark $mark pref $pref table $number",
|
|
||||||
"echo \"qt \$IP -$family rule del fwmark $mark\" >> \${VARDIR}/undo_routing"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
my ( $loose, $track, $balance , $default, $default_balance, $optional, $mtu ) = (0,0,0,0,$config{USE_DEFAULT_RT} ? 1 : 0,interface_is_optional( $interface ), '' );
|
my ( $loose, $track, $balance , $default, $default_balance, $optional, $mtu ) = (0,0,0,0,$config{USE_DEFAULT_RT} ? 1 : 0,interface_is_optional( $interface ), '' );
|
||||||
@ -384,8 +381,22 @@ sub add_a_provider( $$$$$$$$ ) {
|
|||||||
my $realm = '';
|
my $realm = '';
|
||||||
|
|
||||||
if ( $shared ) {
|
if ( $shared ) {
|
||||||
$providers{$table}{mac} = get_interface_mac( $gateway, $interface , $table );
|
my $variable = $providers{$table}{mac} = get_interface_mac( $gateway, $interface , $table );
|
||||||
$realm = "realm $number";
|
$realm = "realm $number";
|
||||||
|
start_provider( $table, $number, qq(if interface_is_usable $interface && [ -n "$variable" ]; then) );
|
||||||
|
} elsif ( $gatewaycase eq 'detect' ) {
|
||||||
|
start_provider( $table, $number, qq(if interface_is_usable $interface && [ -n "$gateway" ]; then) );
|
||||||
|
} else {
|
||||||
|
start_provider( $table, $number, "if interface_is_usable $interface; then" );
|
||||||
|
emit "run_ip route add default dev $interface table $number" if $gatewaycase eq 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $mark ne '-' ) {
|
||||||
|
emit ( "qt \$IP -$family rule del fwmark $mark" ) if $config{DELETE_THEN_ADD};
|
||||||
|
|
||||||
|
emit ( "run_ip rule add fwmark $mark pref $pref table $number",
|
||||||
|
"echo \"qt \$IP -$family rule del fwmark $mark\" >> \${VARDIR}/undo_routing"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $duplicate ne '-' ) {
|
if ( $duplicate ne '-' ) {
|
||||||
@ -461,11 +472,20 @@ sub add_a_provider( $$$$$$$$ ) {
|
|||||||
emit 'else';
|
emit 'else';
|
||||||
|
|
||||||
if ( $optional ) {
|
if ( $optional ) {
|
||||||
emit ( " error_message \"WARNING: Interface $interface is not usable -- Provider $table ($number) not Added\"",
|
if ( $shared ) {
|
||||||
" ${base}_IS_UP=" );
|
emit ( " error_message \"WARNING: Interface $interface is not usable -- Provider $table ($number) not Added\"" );
|
||||||
|
} else {
|
||||||
|
emit ( " error_message \"WARNING: Gateway $gateway is not reachable -- Provider $table ($number) not Added\"" );
|
||||||
|
}
|
||||||
|
|
||||||
|
emit( " ${base}_IS_UP=" );
|
||||||
|
} else {
|
||||||
|
if ( $shared ) {
|
||||||
|
emit( " fatal_error \"Gateway $gateway is not reachable -- Provider $table ($number) Cannot be Added\"" );
|
||||||
} else {
|
} else {
|
||||||
emit( " fatal_error \"Interface $interface is not usable -- Provider $table ($number) Cannot be Added\"" );
|
emit( " fatal_error \"Interface $interface is not usable -- Provider $table ($number) Cannot be Added\"" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
emit "fi\n";
|
emit "fi\n";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user