From patchwork Fri Aug 9 11:14:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alvaro Neira X-Patchwork-Id: 266001 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 E55DD2C00A3 for ; Fri, 9 Aug 2013 21:14:28 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967723Ab3HILO2 (ORCPT ); Fri, 9 Aug 2013 07:14:28 -0400 Received: from mail-wi0-f179.google.com ([209.85.212.179]:62670 "EHLO mail-wi0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967573Ab3HILO1 (ORCPT ); Fri, 9 Aug 2013 07:14:27 -0400 Received: by mail-wi0-f179.google.com with SMTP id hr7so1513625wib.0 for ; Fri, 09 Aug 2013 04:14:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:from:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-type:content-transfer-encoding; bh=LXFOVNyKTZv34b+8X/mzLwo4zOk+Oabi7t7jOOz6fh0=; b=v938d4zXvp3jxUEImSAd3F3/MmgzQX/LYTZkcCPdZDJh7yp2oi27pfBD0GMoa3HtXy Hh8weGV0Kwba6GihNp09JjEoNTRe716NTPSnlL8KNXSD7Bg/dwGxFNjzPLyfizixZ/+X ZmY+cHYqF34YciBNtZdKRXRvtFJEnFA9lPwDpw7WtJeKImIbi8pjwC0YoHWDVdioWZer U4HFdx4JCsfErxk4Hd4ExKZpYwzS1TcdP6wyYjnH8AFlrwt8SxAfEvsN9hC3VEvh3gXd hmBrDqBW+8EDFf5AUqVUX7V3KBug7DIvSlY62sxnh6xpPii4pwRz7skBdpKFQXHFKAwQ 2Xsg== X-Received: by 10.194.23.196 with SMTP id o4mr148001wjf.62.1376046865991; Fri, 09 Aug 2013 04:14:25 -0700 (PDT) Received: from [127.0.1.1] ([90.174.0.186]) by mx.google.com with ESMTPSA id dt17sm2202422wic.1.2013.08.09.04.14.20 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 09 Aug 2013 04:14:25 -0700 (PDT) Subject: [libnftables PATCH 11/13] expr: payload: add nft_str2base function To: netfilter-devel@vger.kernel.org From: Alvaro Neira Cc: eric@regit.org Date: Fri, 09 Aug 2013 13:14:16 +0200 Message-ID: <20130809111415.29819.19869.stgit@Ph0enix> In-Reply-To: <20130809111148.29819.95689.stgit@Ph0enix> References: <20130809111148.29819.95689.stgit@Ph0enix> User-Agent: StGit/0.15 MIME-Version: 1.0 Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org From: Álvaro Neira Ayuso Add function that will be use in the JSON parser Signed-off-by: Alvaro Neira Ayuso --- src/expr/payload.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/src/expr/payload.c b/src/expr/payload.c index 34aee90..e32ae1b 100644 --- a/src/expr/payload.c +++ b/src/expr/payload.c @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -178,13 +179,27 @@ nft_rule_expr_payload_snprintf_json(char *buf, size_t len, uint32_t flags, return offset; } +static inline int nft_str2base(const char *base) +{ + if (strcmp(base, "link") == 0) + return NFT_PAYLOAD_LL_HEADER; + else if (strcmp(base, "network") == 0) + return NFT_PAYLOAD_NETWORK_HEADER; + else if (strcmp(base, "transport") == 0) + return NFT_PAYLOAD_TRANSPORT_HEADER; + else { + errno = EINVAL; + return -1; + } +} + static int nft_rule_expr_payload_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree) { #ifdef XML_PARSING struct nft_expr_payload *payload = nft_expr_data(e); const char *base_str; - int32_t reg; + int32_t reg, base; reg = nft_mxml_reg_parse(tree, "dreg", MXML_DESCEND_FIRST); if (reg < 0) @@ -197,14 +212,10 @@ nft_rule_expr_payload_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree) if (base_str == NULL) return -1; - if (strcmp(base_str, "link") == 0) - payload->base = NFT_PAYLOAD_LL_HEADER; - else if (strcmp(base_str, "network") == 0) - payload->base = NFT_PAYLOAD_NETWORK_HEADER; - else if (strcmp(base_str, "transport") == 0) - payload->base = NFT_PAYLOAD_TRANSPORT_HEADER; - else - goto err; + base = nft_str2base(base_str); + + if (base < 0) + return -1; e->flags |= (1 << NFT_EXPR_PAYLOAD_BASE); @@ -220,9 +231,6 @@ nft_rule_expr_payload_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree) e->flags |= (1 << NFT_EXPR_PAYLOAD_LEN); return 0; -err: - errno = EINVAL; - return -1; #else errno = EOPNOTSUPP; return -1;