diff --git a/Shorewall/Perl/Shorewall/Providers.pm b/Shorewall/Perl/Shorewall/Providers.pm index 49d81e4d0..d48bbd617 100644 --- a/Shorewall/Perl/Shorewall/Providers.pm +++ b/Shorewall/Perl/Shorewall/Providers.pm @@ -457,14 +457,30 @@ sub process_a_provider( $ ) { my $interfaceref = known_interface( $interface ); fatal_error "Unknown Interface ($interface)" unless $interfaceref; - # - # Switch to the logical name if a physical name was passed - # - $interface = $interfaceref->{name}; fatal_error "A bridge port ($interface) may not be configured as a provider interface" if port_to_bridge $interface; - my $physical = get_physical $interface; + # + # Switch to the logical name if a physical name was passed + # + my $physical; + + if ( $interface eq $interfaceref->{name} ) { + # + # The logical interface name was specified + # + $physical = get_physical $interface; + } else { + # + # A Physical name was specified + # + $physical = $interface; + # + # Switch to the logical name unless it is a wildcard + # + $interface = $interfaceref->{name} unless $interfaceref->{name} =~ /\+$/; + } + my $gatewaycase = ''; if ( $physical =~ /\+$/ ) {