extern struct nft_set_type nft_set_rbtree_type;
 extern struct nft_set_type nft_set_bitmap_type;
 
+struct nft_expr;
+struct nft_regs;
+struct nft_pktinfo;
+void nft_meta_get_eval(const struct nft_expr *expr,
+                      struct nft_regs *regs, const struct nft_pktinfo *pkt);
+void nft_lookup_eval(const struct nft_expr *expr,
+                    struct nft_regs *regs, const struct nft_pktinfo *pkt);
 #endif /* _NET_NF_TABLES_CORE_H */
 
        struct nft_rule *const *rules;
 };
 
+static void expr_call_ops_eval(const struct nft_expr *expr,
+                              struct nft_regs *regs,
+                              struct nft_pktinfo *pkt)
+{
+       unsigned long e = (unsigned long)expr->ops->eval;
+
+       if (e == (unsigned long)nft_meta_get_eval)
+               nft_meta_get_eval(expr, regs, pkt);
+       else if (e == (unsigned long)nft_lookup_eval)
+               nft_lookup_eval(expr, regs, pkt);
+       else
+               expr->ops->eval(expr, regs, pkt);
+}
+
 unsigned int
 nft_do_chain(struct nft_pktinfo *pkt, void *priv)
 {
                                nft_cmp_fast_eval(expr, ®s);
                        else if (expr->ops != &nft_payload_fast_ops ||
                                 !nft_payload_fast_eval(expr, ®s, pkt))
-                               expr->ops->eval(expr, ®s, pkt);
+                               expr_call_ops_eval(expr, ®s, pkt);
 
                        if (regs.verdict.code != NFT_CONTINUE)
                                break;
 
        struct nft_set_binding          binding;
 };
 
-static void nft_lookup_eval(const struct nft_expr *expr,
-                           struct nft_regs *regs,
-                           const struct nft_pktinfo *pkt)
+void nft_lookup_eval(const struct nft_expr *expr,
+                    struct nft_regs *regs,
+                    const struct nft_pktinfo *pkt)
 {
        const struct nft_lookup *priv = nft_expr_priv(expr);
        const struct nft_set *set = priv->set;
 
 #include "../bridge/br_private.h"
 #endif
 
-static void nft_meta_get_eval(const struct nft_expr *expr,
-                             struct nft_regs *regs,
-                             const struct nft_pktinfo *pkt)
+void nft_meta_get_eval(const struct nft_expr *expr,
+                      struct nft_regs *regs,
+                      const struct nft_pktinfo *pkt)
 {
        const struct nft_meta *priv = nft_expr_priv(expr);
        const struct sk_buff *skb = pkt->skb;