From patchwork Tue Jul 12 20:04:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pablo M. Bermudo Garay" X-Patchwork-Id: 647605 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3rptKP4vznz9sCt for ; Wed, 13 Jul 2016 06:07:05 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=qZ8Hk4KH; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750887AbcGLUGQ (ORCPT ); Tue, 12 Jul 2016 16:06:16 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:36118 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751250AbcGLUGP (ORCPT ); Tue, 12 Jul 2016 16:06:15 -0400 Received: by mail-wm0-f66.google.com with SMTP id x83so3192393wma.3 for ; Tue, 12 Jul 2016 13:06:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kgEKFeIkKkmuCI1TN8NYGbp5qLu07dLgokV/ATuBd3Y=; b=qZ8Hk4KHsfxxYpQCCOTtJhFlsd+gJTMvfwZpsvpPKa2rZeyM+x1GBXuvA0cwjn8BGf GSS9z/i3RVMXuia2yCgsB716HIOer5+C0xMCtGPGl+3ZQwnBtN4yIo2lrNBP3LjfY0t/ ncfghNeklG53jhhzUizFnRThWgk+6kUpOVJjF59ssJecd+PMVofTvLNKCQafI9LcBA7q dv91qRRNSL6k6oD2ra3svRyyVZ7By7jao6ddR4+v4YZIrgLeIEOLRFuFJ08iVHB9/KNC EeFE20osVJJpFY+dW90gYDgMCSg8gErCQ5RmGuIp24Aqp6HqE0IdsMhz1lUnFLghbXro uy0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kgEKFeIkKkmuCI1TN8NYGbp5qLu07dLgokV/ATuBd3Y=; b=lSL3Eax7J0meG1FrqBnukBbWQaHjk2gVHojcuLYSsaofLDE4GgyA5AX6fQJ5ybrmRk FHAVvTjDavHiancsj5Xmu4G70deJ64Lir2YLRY7jvkhvOoKZKKAiELsYUTr/R8Bq3seG Nd1flWfu5i/pbItZBqHE50DkmdKxC30GAi156bgay2F3LUN7W/4sId3DKWzyVoOTuyQe C0eTGZUe50VJkM6F/Em1PiinUj6uuBWuuC5tTS/nFqisZNc/IhbZBjxn7/sNVXyAoLNb /gW7xt+nztM6JIPD5p9AodMoN6l2Z2vlElwByytQTfOcP9ovC3e/ZDDd+KBaw07zmV5J tlTw== X-Gm-Message-State: ALyK8tKEEB5Es0kFj54h2fF3yORczTb6e8VQhwWEPgc0vH9KqH8nHd5iOGYgYAxRF0Vfuw== X-Received: by 10.28.184.82 with SMTP id i79mr23501987wmf.26.1468353949467; Tue, 12 Jul 2016 13:05:49 -0700 (PDT) Received: from localhost.localdomain ([148.3.69.149]) by smtp.gmail.com with ESMTPSA id t67sm6838907wma.1.2016.07.12.13.05.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Jul 2016 13:05:48 -0700 (PDT) From: "Pablo M. Bermudo Garay" To: netfilter-devel@vger.kernel.org Cc: pablo@netfilter.org, Arturo Borrero Gonzalez Subject: [PATCH nft v5 2/3] src: expose delinearize/linearize structures and stmt_error() Date: Tue, 12 Jul 2016 22:04:16 +0200 Message-Id: <20160712200417.21890-2-pablombg@gmail.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160712200417.21890-1-pablombg@gmail.com> References: <20160712200417.21890-1-pablombg@gmail.com> Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org From: Pablo Neira Needed by the follow up xt compatibility layer patch. Signed-off-by: Arturo Borrero Gonzalez Signed-off-by: Pablo Neira Ayuso --- Resubmission of xt compat support preparatory patch. Changes in v5: - Discard __stmt_binary_error() rename. include/erec.h | 12 ++++++++++++ include/netlink.h | 14 ++++++++++++++ src/erec.c | 17 +++++++++++++++++ src/evaluate.c | 22 ---------------------- src/netlink_delinearize.c | 14 -------------- 5 files changed, 43 insertions(+), 36 deletions(-) diff --git a/include/erec.h b/include/erec.h index 25df1d0..36e0efa 100644 --- a/include/erec.h +++ b/include/erec.h @@ -61,4 +61,16 @@ static inline void erec_queue(struct error_record *erec, extern void erec_print(FILE *f, const struct error_record *erec); extern void erec_print_list(FILE *f, struct list_head *list); +struct eval_ctx; + +extern int __fmtstring(4, 5) __stmt_binary_error(struct eval_ctx *ctx, + const struct location *l1, + const struct location *l2, + const char *fmt, ...); + +#define stmt_error(ctx, s1, fmt, args...) \ + __stmt_binary_error(ctx, &(s1)->location, NULL, fmt, ## args) +#define stmt_binary_error(ctx, s1, s2, fmt, args...) \ + __stmt_binary_error(ctx, &(s1)->location, &(s2)->location, fmt, ## args) + #endif /* NFTABLES_EREC_H */ diff --git a/include/netlink.h b/include/netlink.h index 9f46560..76a9da4 100644 --- a/include/netlink.h +++ b/include/netlink.h @@ -12,6 +12,20 @@ #include +struct netlink_parse_ctx { + struct list_head *msgs; + struct table *table; + struct rule *rule; + struct stmt *stmt; + struct expr *registers[1 + NFT_REG32_15 - NFT_REG32_00 + 1]; +}; + +struct rule_pp_ctx { + struct proto_ctx pctx; + struct payload_dep_ctx pdctx; + struct stmt *stmt; +}; + extern const struct input_descriptor indesc_netlink; extern const struct location netlink_location; diff --git a/src/erec.c b/src/erec.c index d514230..0a1e6c7 100644 --- a/src/erec.c +++ b/src/erec.c @@ -176,3 +176,20 @@ void erec_print_list(FILE *f, struct list_head *list) erec_destroy(erec); } } + +int __fmtstring(4, 5) __stmt_binary_error(struct eval_ctx *ctx, + const struct location *l1, + const struct location *l2, + const char *fmt, ...) +{ + struct error_record *erec; + va_list ap; + + va_start(ap, fmt); + erec = erec_vcreate(EREC_ERROR, l1, fmt, ap); + if (l2 != NULL) + erec_add_location(erec, l2); + va_end(ap); + erec_queue(erec, ctx->msgs); + return -1; +} diff --git a/src/evaluate.c b/src/evaluate.c index f24e5f3..27deb15 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -37,28 +37,6 @@ static const char *byteorder_names[] = { [BYTEORDER_BIG_ENDIAN] = "big endian", }; -static int __fmtstring(4, 5) __stmt_binary_error(struct eval_ctx *ctx, - const struct location *l1, - const struct location *l2, - const char *fmt, ...) -{ - struct error_record *erec; - va_list ap; - - va_start(ap, fmt); - erec = erec_vcreate(EREC_ERROR, l1, fmt, ap); - if (l2 != NULL) - erec_add_location(erec, l2); - va_end(ap); - erec_queue(erec, ctx->msgs); - return -1; - -} - -#define stmt_error(ctx, s1, fmt, args...) \ - __stmt_binary_error(ctx, &(s1)->location, NULL, fmt, ## args) -#define stmt_binary_error(ctx, s1, s2, fmt, args...) \ - __stmt_binary_error(ctx, &(s1)->location, &(s2)->location, fmt, ## args) #define chain_error(ctx, s1, fmt, args...) \ __stmt_binary_error(ctx, &(s1)->location, NULL, fmt, ## args) #define monitor_error(ctx, s1, fmt, args...) \ diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 7735699..fffbe26 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -27,14 +27,6 @@ #include #include -struct netlink_parse_ctx { - struct list_head *msgs; - struct table *table; - struct rule *rule; - struct stmt *stmt; - struct expr *registers[1 + NFT_REG32_15 - NFT_REG32_00 + 1]; -}; - static int netlink_parse_expr(const struct nftnl_expr *nle, struct netlink_parse_ctx *ctx); @@ -1047,12 +1039,6 @@ struct stmt *netlink_parse_set_expr(const struct set *set, return pctx->stmt; } -struct rule_pp_ctx { - struct proto_ctx pctx; - struct payload_dep_ctx pdctx; - struct stmt *stmt; -}; - static void expr_postprocess(struct rule_pp_ctx *ctx, struct expr **exprp); static void integer_type_postprocess(struct expr *expr)