+#define C(f, tbl, def, name) \
+ { FW3_FAMILY_##f, FW3_TABLE_##tbl, FW3_DEFAULT_##def, name }
+
+struct chain {
+ enum fw3_family family;
+ enum fw3_table table;
+ enum fw3_default flag;
+ const char *name;
+};
+
+static const struct chain default_chains[] = {
+ C(ANY, FILTER, UNSPEC, "delegate_input"),
+ C(ANY, FILTER, UNSPEC, "delegate_output"),
+ C(ANY, FILTER, UNSPEC, "delegate_forward"),
+ C(ANY, FILTER, CUSTOM_CHAINS, "input_rule"),
+ C(ANY, FILTER, CUSTOM_CHAINS, "output_rule"),
+ C(ANY, FILTER, CUSTOM_CHAINS, "forwarding_rule"),
+ C(ANY, FILTER, UNSPEC, "reject"),
+ C(ANY, FILTER, SYN_FLOOD, "syn_flood"),
+
+ C(V4, NAT, UNSPEC, "delegate_prerouting"),
+ C(V4, NAT, UNSPEC, "delegate_postrouting"),
+ C(V4, NAT, CUSTOM_CHAINS, "prerouting_rule"),
+ C(V4, NAT, CUSTOM_CHAINS, "postrouting_rule"),
+
+ C(ANY, MANGLE, UNSPEC, "mssfix"),
+ C(ANY, RAW, UNSPEC, "notrack"),
+};
+
+static const struct chain toplevel_rules[] = {
+ C(ANY, FILTER, UNSPEC, "INPUT -j delegate_input"),
+ C(ANY, FILTER, UNSPEC, "OUTPUT -j delegate_output"),
+ C(ANY, FILTER, UNSPEC, "FORWARD -j delegate_forward"),
+
+ C(V4, NAT, UNSPEC, "PREROUTING -j delegate_prerouting"),
+ C(V4, NAT, UNSPEC, "POSTROUTING -j delegate_postrouting"),
+
+ C(ANY, MANGLE, UNSPEC, "FORWARD -j mssfix"),
+ C(ANY, RAW, UNSPEC, "PREROUTING -j notrack"),
+};
+
+const struct fw3_option fw3_default_opts[] = {