From patchwork Tue Jun 24 07:15:38 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ana Rey X-Patchwork-Id: 363323 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 D0FD61400CF for ; Tue, 24 Jun 2014 17:16:21 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752190AbaFXHQD (ORCPT ); Tue, 24 Jun 2014 03:16:03 -0400 Received: from mail-we0-f179.google.com ([74.125.82.179]:50811 "EHLO mail-we0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751206AbaFXHQC (ORCPT ); Tue, 24 Jun 2014 03:16:02 -0400 Received: by mail-we0-f179.google.com with SMTP id w62so7958895wes.24 for ; Tue, 24 Jun 2014 00:16: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=AKYQevQPRVdFkYP+emqMF1pEwLB4JMf/y/6BBTC2cwI=; b=s/herp556ILCKi0laWI6P+eqlISnyVUFqsDA6JdJ5+7TyzEHhtOQweDyM1z/24qhx3 kPVMIFO12uRKVm8lNd0ENodTvUHM0c6oMuZiaSE0aPXGJn0A2eU4xtvPfe69M6ciPQT5 8lYkkdKBO3E43noT9jyHuMVdKkkUy2S3wx2gmlrY1vUVIHmr70EXWTmUP3QS5rJGvb2J 2NAEyLvYmz1mfcVeugerrBfwhu2JKNfJEGQWy/XdPVgA0rgE4ZgO2Kz+kSjXHtckU5lQ prWjGd1ypoySb9+sEqInr5Lh+9myJ9y7q2zcEjE3rNkbfukC6FIA+vYjiRbexGGwN9RD ++dw== X-Received: by 10.180.36.225 with SMTP id t1mr17571wij.38.1403594160610; Tue, 24 Jun 2014 00:16:00 -0700 (PDT) Received: from localhost.localdomain ([188.84.98.232]) by mx.google.com with ESMTPSA id gd5sm41429314wjb.40.2014.06.24.00.15.57 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 Jun 2014 00:15:59 -0700 (PDT) From: Ana Rey To: netfilter-devel@vger.kernel.org Cc: Ana Rey Subject: [libnftnl PATCH 4/4] expr: counter: Do not print unset values in json Date: Tue, 24 Jun 2014 09:15:38 +0200 Message-Id: <1403594138-6148-5-git-send-email-anarey@gmail.com> X-Mailer: git-send-email 2.0.0 In-Reply-To: <1403594138-6148-1-git-send-email-anarey@gmail.com> References: <1403594138-6148-1-git-send-email-anarey@gmail.com> Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org It changes the parse and the snprint functions to omit unset values. Signed-off-by: Ana Rey --- src/expr/counter.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/expr/counter.c b/src/expr/counter.c index 6f6a7ee..5ab9a5a 100644 --- a/src/expr/counter.c +++ b/src/expr/counter.c @@ -125,15 +125,13 @@ nft_rule_expr_counter_json_parse(struct nft_rule_expr *e, json_t *root, #ifdef JSON_PARSING uint64_t uval64; - if (nft_jansson_parse_val(root, "pkts", NFT_TYPE_U64, &uval64, err) < 0) - return -1; - - nft_rule_expr_set_u64(e, NFT_EXPR_CTR_PACKETS, uval64); - - if (nft_jansson_parse_val(root, "bytes", NFT_TYPE_U64, &uval64, err) < 0) - return -1; + if (nft_jansson_parse_val(root, "pkts", NFT_TYPE_U64, &uval64, + err) == 0) + nft_rule_expr_set_u64(e, NFT_EXPR_CTR_PACKETS, uval64); - nft_rule_expr_set_u64(e, NFT_EXPR_CTR_BYTES, uval64); + if (nft_jansson_parse_val(root, "bytes", NFT_TYPE_U64, &uval64, + err) == 0) + nft_rule_expr_set_u64(e, NFT_EXPR_CTR_BYTES, uval64); return 0; #else @@ -166,10 +164,23 @@ nft_rule_expr_counter_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree, static int nft_rule_expr_counter_snprintf_json(char *buf, size_t len, struct nft_rule_expr *e) { + int ret, size = len, offset = 0; struct nft_expr_counter *ctr = nft_expr_data(e); - return snprintf(buf, len, "\"pkts\":%"PRIu64",\"bytes\":%"PRIu64"", - ctr->pkts, ctr->bytes); + if (e->flags & (1 << NFT_EXPR_CTR_PACKETS)) { + ret = snprintf(buf, len,"\"pkts\":%"PRIu64",", ctr->pkts); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + if (e->flags & (1 << NFT_EXPR_CTR_BYTES)) { + ret = snprintf(buf + offset, len, "\"bytes\":%"PRIu64",", ctr->bytes); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + + /* Remove the last comma characther */ + if (offset > 0) + offset--; + + return offset; } static int nft_rule_expr_counter_snprintf_xml(char *buf, size_t len,