+sub ruleset_add_group_rule {
+ my ($ruleset, $cluster_conf, $chain, $rule, $direction, $action) = @_;
+
+ my $group = $rule->{action};
+ my $group_chain = "GROUP-$group-$direction";
+ if(!ruleset_chain_exist($ruleset, $group_chain)){
+ generate_group_rules($ruleset, $cluster_conf, $group);
+ }
+
+ if ($direction eq 'OUT' && $rule->{iface_out}) {
+ ruleset_addrule($ruleset, $chain, "-o $rule->{iface_out} -j $group_chain");
+ } elsif ($direction eq 'IN' && $rule->{iface_in}) {
+ ruleset_addrule($ruleset, $chain, "-i $rule->{iface_in} -j $group_chain");
+ } else {
+ ruleset_addrule($ruleset, $chain, "-j $group_chain");
+ }
+
+ ruleset_addrule($ruleset, $chain, "-m mark --mark 1 -j $action");
+}
+