X-Git-Url: https://git.archive.openwrt.org/?p=project%2Ffirewall3.git;a=blobdiff_plain;f=forwards.c;h=9f658fc60da24819462ed7f5c2eba44e14b8b31e;hp=c212c8cbeb084edc9390129ec58e3045cb9fb31a;hb=6a736bbffb88c44aa5b4780e5a94519a0b4e5523;hpb=8fee8f9c520c58d07772cc6bd8f65d9eb1776a56 diff --git a/forwards.c b/forwards.c index c212c8c..9f658fc 100644 --- a/forwards.c +++ b/forwards.c @@ -19,12 +19,14 @@ #include "forwards.h" -static struct fw3_option forward_opts[] = { +const struct fw3_option fw3_forward_opts[] = { FW3_OPT("name", string, forward, name), FW3_OPT("family", family, forward, family), FW3_OPT("src", device, forward, src), FW3_OPT("dest", device, forward, dest), + + { } }; @@ -51,7 +53,7 @@ fw3_load_forwards(struct fw3_state *state, struct uci_package *p) memset(forward, 0, sizeof(*forward)); - fw3_parse_options(forward, forward_opts, ARRAY_SIZE(forward_opts), s); + fw3_parse_options(forward, fw3_forward_opts, s); if (forward->src.invert || forward->dest.invert) { @@ -60,14 +62,14 @@ fw3_load_forwards(struct fw3_state *state, struct uci_package *p) 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); @@ -76,7 +78,7 @@ fw3_load_forwards(struct fw3_state *state, struct uci_package *p) if (forward->_dest) { - forward->_dest->has_dest_target[FW3_TARGET_ACCEPT] = true; + setbit(forward->_dest->dst_flags, FW3_TARGET_ACCEPT); if (forward->_src && (forward->_src->conntrack || forward->_dest->conntrack)) @@ -117,9 +119,7 @@ print_forward(enum fw3_table table, enum fw3_family family, 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 : "*"; @@ -130,6 +130,13 @@ print_forward(enum fw3_table table, enum fw3_family family, else 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); print_target(forward);