-sub generate_bridge_chains {
- my ($ruleset, $hostfw_conf, $bridge, $bridges_config) = @_;
-
- my $options = $hostfw_conf->{options} || {};
-
- if (!ruleset_chain_exist($ruleset, "$bridge-FW")) {
- ruleset_create_chain($ruleset, "$bridge-FW");
- ruleset_addrule($ruleset, "PVEFW-FORWARD", "-o $bridge -m physdev --physdev-is-out -j $bridge-FW");
- ruleset_addrule($ruleset, "PVEFW-FORWARD", "-i $bridge -m physdev --physdev-is-in -j $bridge-FW");
- }
-
- if (!ruleset_chain_exist($ruleset, "$bridge-OUT")) {
- ruleset_create_chain($ruleset, "$bridge-OUT");
-
- if($options->{optimize}){
- foreach my $interface (@{$bridges_config->{$bridge}}) {
- ruleset_addrule($ruleset, "$bridge-OUT", "-m physdev --physdev-is-bridged --physdev-in $interface -g PVEFW-SET-ACCEPT-MARK");
- }
- }
-
- ruleset_addrule($ruleset, "$bridge-FW", "-m physdev --physdev-is-in -j $bridge-OUT");
- ruleset_insertrule($ruleset, "PVEFW-INPUT", "-i $bridge -m physdev --physdev-is-in -j $bridge-OUT");
- }
-
- if (!ruleset_chain_exist($ruleset, "$bridge-IN")) {
- ruleset_create_chain($ruleset, "$bridge-IN");
-
- if($options->{optimize}){
- foreach my $interface (@{$bridges_config->{$bridge}}) {
- ruleset_addrule($ruleset, "$bridge-IN", "-m physdev --physdev-is-bridged --physdev-out $interface -j ACCEPT");
- }
- }
-
- ruleset_addrule($ruleset, "$bridge-FW", "-m physdev --physdev-is-out -j $bridge-IN");
- ruleset_addrule($ruleset, "$bridge-FW", "-m mark --mark 1 -j ACCEPT");
- # accept traffic to unmanaged bridge ports
- ruleset_addrule($ruleset, "$bridge-FW", "-m physdev --physdev-is-out -j ACCEPT ");
- }
-}
-