#include "forwards.h"
-static struct fw3_option forward_opts[] = {
+const struct fw3_option fw3_forward_opts[] = {
+ FW3_OPT("enabled", bool, forward, enabled),
+
FW3_OPT("name", string, forward, name),
FW3_OPT("family", family, forward, family),
FW3_OPT("src", device, forward, src),
FW3_OPT("dest", device, forward, dest),
+
+ { }
};
memset(forward, 0, sizeof(*forward));
- fw3_parse_options(forward, forward_opts, ARRAY_SIZE(forward_opts), s);
+ forward->enabled = true;
+
+ fw3_parse_options(forward, fw3_forward_opts, s);
+
+ if (!forward->enabled)
+ {
+ fw3_free_forward(forward);
+ continue;
+ }
if (forward->src.invert || forward->dest.invert)
{
continue;
}
else if (forward->src.set && !forward->src.any &&
- !(forward->_src = fw3_lookup_zone(state, forward->src.name)))
+ !(forward->_src = fw3_lookup_zone(state, forward->src.name, false)))
{
warn_elem(e, "refers to not existing zone '%s'", forward->src.name);
fw3_free_forward(forward);
continue;
}
else if (forward->dest.set && !forward->dest.any &&
- !(forward->_dest = fw3_lookup_zone(state, forward->dest.name)))
+ !(forward->_dest = fw3_lookup_zone(state, forward->dest.name, false)))
{
warn_elem(e, "refers to not existing zone '%s'", forward->dest.name);
fw3_free_forward(forward);
if (table != FW3_TABLE_FILTER)
return;
- if (!fw3_is_family(forward, family) ||
- (forward->_src && !fw3_is_family(forward->_src, family)) ||
- (forward->_dest && !fw3_is_family(forward->_dest, family)))
+ if (!fw3_is_family(forward, family))
return;
s = forward->_src ? forward->_src->name : "*";
d = forward->_dest ? forward->_dest->name : "*";
- if (forward->name)
- info(" * Forward '%s'", forward->name);
- else
- info(" * Forward %s->%s", s, d);
+ info(" * Forward '%s' -> '%s'", s, d);
+
+ if (!fw3_is_family(forward->_src, family) ||
+ !fw3_is_family(forward->_dest, family))
+ {
+ info(" ! Skipping due to different family of zone");
+ return;
+ }
print_chain(forward);
fw3_format_comment("forwarding ", s, "->", d);