enum nft_registers      sreg_addr_max:8;
        enum nft_registers      sreg_proto_min:8;
        enum nft_registers      sreg_proto_max:8;
-       int                     family;
-       enum nf_nat_manip_type  type;
+       enum nf_nat_manip_type  type:8;
+       u8                      family;
 };
 
 static void nft_nat_eval(const struct nft_expr *expr,
                        const struct nlattr * const tb[])
 {
        struct nft_nat *priv = nft_expr_priv(expr);
+       u32 family;
        int err;
 
        if (tb[NFTA_NAT_TYPE] == NULL)
        if (tb[NFTA_NAT_FAMILY] == NULL)
                return -EINVAL;
 
-       priv->family = ntohl(nla_get_be32(tb[NFTA_NAT_FAMILY]));
-       if (priv->family != AF_INET && priv->family != AF_INET6)
-               return -EINVAL;
+       family = ntohl(nla_get_be32(tb[NFTA_NAT_FAMILY]));
+       if (family != AF_INET && family != AF_INET6)
+               return -EAFNOSUPPORT;
+       if (family != ctx->afi->family)
+               return -EOPNOTSUPP;
+       priv->family = family;
 
        if (tb[NFTA_NAT_REG_ADDR_MIN]) {
                priv->sreg_addr_min = ntohl(nla_get_be32(
 
 static int __init nft_nat_module_init(void)
 {
-       int err;
-
-       err = nft_register_expr(&nft_nat_type);
-       if (err < 0)
-               return err;
-
-       return 0;
+       return nft_register_expr(&nft_nat_type);
 }
 
 static void __exit nft_nat_module_exit(void)