- return sprintf($rule_format, $action, $rule->{source}, "$zid:$tap",
- $rule->{proto} || '-', $rule->{dport} || '-', $rule->{sport} || '-');
+ my $source;
+
+ if ($zoneinfo->{$zone}->{type} eq 'bport') {
+ my $bridge_zone = $zoneinfo->{$zone}->{bridge_zone} || die "internal error";
+ 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}";
+ } else {
+ $source = "${zoneref}:$rule->{source}";
+ }
+ } else {
+ $source = "any:$rule->{source}";
+ }
+
+ return sprintf($rule_format, $action, $source, $dest, $rule->{proto} || '-',
+ $rule->{dport} || '-', $rule->{sport} || '-');