X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=forwards.c;h=6ea0497698a3a84349668fe375fadb882a8d5251;hb=78e134ba7cdc473e7cdf0422b863579ac700ac13;hp=9f658fc60da24819462ed7f5c2eba44e14b8b31e;hpb=5df8137ebc5db2bc9c6e71b2d154a5f77679d9d8;p=project%2Ffirewall3.git diff --git a/forwards.c b/forwards.c index 9f658fc..6ea0497 100644 --- a/forwards.c +++ b/forwards.c @@ -20,6 +20,8 @@ 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), @@ -53,8 +55,16 @@ fw3_load_forwards(struct fw3_state *state, struct uci_package *p) memset(forward, 0, sizeof(*forward)); + 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) { warn_elem(e, "must not have inverted 'src' or 'dest' options"); @@ -62,23 +72,25 @@ 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, false))) + !(forward->_src = fw3_lookup_zone(state, forward->src.name))) { 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, false))) + !(forward->_dest = fw3_lookup_zone(state, forward->dest.name))) { warn_elem(e, "refers to not existing zone '%s'", forward->dest.name); fw3_free_forward(forward); continue; } + /* NB: forward family... */ if (forward->_dest) { - setbit(forward->_dest->dst_flags, FW3_TARGET_ACCEPT); + setbit(forward->_dest->flags[0], FW3_FLAG_ACCEPT); + setbit(forward->_dest->flags[1], FW3_FLAG_ACCEPT); if (forward->_src && (forward->_src->conntrack || forward->_dest->conntrack)) @@ -111,8 +123,8 @@ static void print_target(struct fw3_forward *forward) } static void -print_forward(enum fw3_table table, enum fw3_family family, - struct fw3_forward *forward) +print_forward(struct fw3_forward *forward, enum fw3_family family, + enum fw3_table table) { const char *s, *d; @@ -125,10 +137,7 @@ print_forward(enum fw3_table table, enum fw3_family family, 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)) @@ -143,11 +152,11 @@ print_forward(enum fw3_table table, enum fw3_family family, } void -fw3_print_forwards(enum fw3_table table, enum fw3_family family, - struct fw3_state *state) +fw3_print_forwards(struct fw3_state *state, enum fw3_family family, + enum fw3_table table) { struct fw3_forward *forward; list_for_each_entry(forward, &state->forwards, list) - print_forward(table, family, forward); + print_forward(forward, family, table); }