C(ANY, MANGLE, UNSPEC, "mssfix"),
C(ANY, MANGLE, UNSPEC, "fwmark"),
- C(ANY, RAW, UNSPEC, "notrack"),
+ C(ANY, RAW, UNSPEC, "delegate_notrack"),
{ }
};
{ FW3_TABLE_MANGLE, "FORWARD", "mssfix" },
{ FW3_TABLE_MANGLE, "PREROUTING", "fwmark" },
- { FW3_TABLE_RAW, "PREROUTING", "notrack" },
+ { FW3_TABLE_RAW, "PREROUTING", "delegate_notrack" },
{ 0, NULL },
};
r = fw3_ipt_rule_new(handle);
fw3_ipt_rule_target(r, tr->target);
- fw3_ipt_rule_append(r, tr->chain);
+ fw3_ipt_rule_replace(r, tr->chain);
}
switch (handle->table)
if (c->flag && !has(defs->flags, handle->family, c->flag))
continue;
- fw3_ipt_delete_rules(handle, c->format);
+ fw3_ipt_flush_chain(handle, c->format);
+
+ /* keep certain basic chains that do not depend on any settings to
+ avoid purging unrelated user rules pointing to them */
+ if (reload && !c->flag)
+ continue;
+
fw3_ipt_delete_chain(handle, c->format);
}