A few comments on top of Florian's.

On Wed, Jun 20, 2018 at 12:41:29PM +0200, Máté Eckl wrote:
[...]
> +#if IS_ENABLED(CONFIG_NF_TPROXY_IPV6)
> +static void nft_tproxy_eval_v6(const struct nft_expr *expr,
> +                         struct nft_regs *regs,
> +                         const struct nft_pktinfo *pkt)

Hm, better place IPv6 code in net/netfilter/nft_tproxy_ipv6.c ?

@Florian, do you prefer this monolitic style maybe?

I mean, I'll be fine either way.

[...]
> +static int nft_tproxy_init(const struct nft_ctx *ctx,
> +                        const struct nft_expr *expr,
> +                        const struct nlattr * const tb[])
> +{

I'm missing nf_defrag_ipv6_enable() calls from your _init() path.

> +     struct nft_tproxy *priv = nft_expr_priv(expr);
> +     unsigned int alen = 0, plen = 0;
> +     int err;
> +
> +     if (!tb[NFTA_TPROXY_FAMILY])
> +             return -EINVAL;
> +
> +     switch(ctx->family) {
> +     case NFPROTO_IPV4:
> +#if IS_ENABLED(CONFIG_NF_TPROXY_IPV6)
> +     case NFPROTO_IPV6:
> +#endif
> +     case NFPROTO_INET:
> +             break;
> +     default:
> +             return -EOPNOTSUPP;
> +     }
> +
> +     priv->family = ntohl(nla_get_be32(tb[NFTA_TPROXY_FAMILY]));
> +     if ((priv->family == NFPROTO_IPV4 && ctx->family == NFPROTO_IPV6) ||
> +         (priv->family == NFPROTO_IPV6 && ctx->family == NFPROTO_IPV4))
> +             return -EINVAL;
> +
> +     switch (priv->family) {
> +     case NFPROTO_IPV4:
> +             alen = FIELD_SIZEOF(union nf_inet_addr, in);
> +             break;
> +#if IS_ENABLED(CONFIG_NF_TPROXY_IPV6)
> +     case NFPROTO_IPV6:
> +             alen = FIELD_SIZEOF(union nf_inet_addr, in6);
> +             break;
> +#endif
> +     case NFPROTO_INET:
> +             /* No address is specified here */
> +             break;
> +     default:
> +             return -EOPNOTSUPP;
> +     }
> +
> +     if (tb[NFTA_TPROXY_REG_ADDR]) {
> +             priv->sreg_addr = nft_parse_register(tb[NFTA_TPROXY_REG_ADDR]);
> +             err = nft_validate_register_load(priv->sreg_addr, alen);
> +             if (err < 0)
> +                     return err;
> +     }
> +
> +     plen = sizeof(u16);
> +     if (tb[NFTA_TPROXY_REG_PORT]) {
> +             priv->sreg_port = nft_parse_register(tb[NFTA_TPROXY_REG_PORT]);
> +             err = nft_validate_register_load(priv->sreg_port, plen);
> +             if (err < 0)
> +                     return err;
> +     }

How does this work if neither if neither address nor port are set?
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to