fw => { type => 'firewall' },
};
+ my $maclist = {};
+
my $register_bridge;
$register_bridge = sub {
my $vmzone = $conf->{zone} || "vm$vmid";
$net->{tap} = "tap${vmid}i${netnum}";
+ $maclist->{$net->{tap}} = $net->{macaddr} || die "internal error";
$net->{zone} = &$register_bridge_port($net->{bridge}, $net->{tag}, $vmzone, $net->{tap});
$netinfo->{$vmid}->{$opt} = $net;
}
my $out;
- my $format = "%-15s %-10s %s\n";
- $out = sprintf($format, '#ZONE', 'TYPE', 'OPTIONS');
+ my $format = "%-15s %-10s %-15s %s\n";
+ $out = sprintf($format, '#ZONE', 'TYPE', 'OPTIONS', '');
foreach my $z (sort keys %$zoneinfo) {
my $zid = $zoneinfo->{$z}->{id};
if ($zoneinfo->{$z}->{type} eq 'firewall') {
- $out .= sprintf($format, $zid, $zoneinfo->{$z}->{type}, '');
+ $out .= sprintf($format, $zid, $zoneinfo->{$z}->{type}, '' , "# $z");
} elsif ($zoneinfo->{$z}->{type} eq 'bridge') {
- $out .= sprintf($format, $zid, 'ipv4', '');
+ $out .= sprintf($format, $zid, 'ipv4', '', "# $z");
} elsif ($zoneinfo->{$z}->{type} eq 'bport') {
my $bridge_zone = $zoneinfo->{$z}->{bridge_zone} || die "internal error";
my $bzid = $zoneinfo->{$bridge_zone}->{id} || die "internal error";
- $out .= sprintf($format, "$zid:$bzid", 'bport', '');
+ $out .= sprintf($format, "$zid:$bzid", 'bport', '', "# $z");
} else {
die "internal error";
}
# dump interfaces
- $format = "%-15s %-20s %-10s %s\n";
- $out = sprintf($format, '#ZONE', 'INTERFACE', 'BROADCAST', 'OPTIONS');
+ $format = "%-15s %-20s %-10s %-15s %s\n";
+ $out = sprintf($format, '#ZONE', 'INTERFACE', 'BROADCAST', 'OPTIONS', '');
+
+ my $maclist_format = "%-15s %-15s %-15s\n";
+ my $macs = sprintf($maclist_format, '#DISPOSITION', 'INTERFACE', 'MACZONE');
foreach my $z (sort keys %$zoneinfo) {
my $zid = $zoneinfo->{$z}->{id};
# do nothing;
} elsif ($zoneinfo->{$z}->{type} eq 'bridge') {
my $bridge = $zoneinfo->{$z}->{bridge} || die "internal error";
- $out .= sprintf($format, $zid, $bridge, 'detect', 'bridge');
+ $out .= sprintf($format, $zid, $bridge, 'detect', 'bridge', "# $z");
} elsif ($zoneinfo->{$z}->{type} eq 'bport') {
my $ifaces = $zoneinfo->{$z}->{ifaces};
my $bridge_zone = $zoneinfo->{$z}->{bridge_zone} || die "internal error";
my $bridge = $zoneinfo->{$bridge_zone}->{bridge} || die "internal error";
my $iftxt = "$bridge:$iface";
- $out .= sprintf($format, $zid, $iftxt, '', '');
+ $out .= sprintf($format, $zid, $iftxt, '-', 'maclist', "# $z");
+ $macs .= sprintf($maclist_format, 'ACCEPT', $iface, $maclist->{$iface});
}
} else {
die "internal error";
PVE::Tools::file_set_contents("$targetdir/interfaces", $out);
+ # dump maclist
+ PVE::Tools::file_set_contents("$targetdir/maclist", $macs);
+
# dump policy
$format = "%-15s %-15s %-15s %s\n";