rework runtime state tracking
[project/firewall3.git] / forwards.c
index c212c8c..9abe4bf 100644 (file)
@@ -60,14 +60,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 +76,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 +117,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 +128,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);