- my $bridge_ext_zone = $zoneinfo->{$bridge_zone}->{bridge_ext_zone} || die "internal error";
- my $zoneref = $zoneinfo->{$bridge_ext_zone}->{zoneref} || die "internal error";
- if (!$rule->{source}) {
- # $source = "${zoneref}";
- $source = 'all';
- } else {
- # 'all' does not work
- $source = "${zoneref}:$rule->{source}";
+ my $zoneref = $zoneinfo->{$bridge_zone}->{zoneref} || die "internal error";
+
+ # using 'all' does not work, so we create one rule for
+ # each related zone on the same bridge
+ push @$sources, "${zoneref}:$rule->{source}";
+ foreach my $z (keys %$zoneinfo) {
+ next if $z eq $zone;
+ next if !$zoneinfo->{$z}->{bridge_zone};
+ next if $zoneinfo->{$z}->{bridge_zone} ne $bridge_zone;
+ $zoneref = $zoneinfo->{$z}->{zoneref} || die "internal error";
+ push @$sources, "${zoneref}:$rule->{source}";