static int conntrack1_mt6_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_match **match) { struct xt_conntrack_mtinfo1 *info = (void *)(*match)->data; struct xt_conntrack_mtinfo2 up; cinfo_transform(&up, info); if (!conntrack_mt6_parse(c, invert, flags, &up)) return false; cinfo_transform(info, &up); return true; }
static void conntrack1_mt6_save(const void *ip, const struct xt_entry_match *match) { const struct xt_conntrack_mtinfo1 *info = (void *)match->data; struct xt_conntrack_mtinfo2 up; cinfo_transform(&up, info); conntrack_dump(&up, "--", NFPROTO_IPV6, true); }
static void conntrack1_mt6_print(const void *ip, const struct xt_entry_match *match, int numeric) { const struct xt_conntrack_mtinfo1 *info = (void *)match->data; struct xt_conntrack_mtinfo2 up; cinfo_transform(&up, info); conntrack_dump(&up, "", NFPROTO_IPV6, numeric); }
static void conntrack1_mt_parse(struct xt_option_call *cb) { struct xt_conntrack_mtinfo1 *info = cb->data; struct xt_conntrack_mtinfo3 up; memset(&up, 0, sizeof(up)); cinfo_transform(&up, info); up.origsrc_port_high = up.origsrc_port; up.origdst_port_high = up.origdst_port; up.replsrc_port_high = up.replsrc_port; up.repldst_port_high = up.repldst_port; cb->data = &up; conntrack_mt_parse(cb, 3); if (up.origsrc_port != up.origsrc_port_high || up.origdst_port != up.origdst_port_high || up.replsrc_port != up.replsrc_port_high || up.repldst_port != up.repldst_port_high) xtables_error(PARAMETER_PROBLEM, "conntrack rev 1 does not support port ranges"); cinfo_transform(info, &up); cb->data = info; }