From patchwork Tue Jan 9 08:53:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harsha Sharma X-Patchwork-Id: 857298 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netfilter-devel-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="DazRw8f6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zG5XY6rsqz9s7v for ; Tue, 9 Jan 2018 19:53:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752178AbeAIIxt (ORCPT ); Tue, 9 Jan 2018 03:53:49 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:45981 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751728AbeAIIxs (ORCPT ); Tue, 9 Jan 2018 03:53:48 -0500 Received: by mail-pf0-f196.google.com with SMTP id u19so8082087pfa.12 for ; Tue, 09 Jan 2018 00:53:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=tT3aXTw2eyOPHzCMOqRrgVy7QtGfrqY+FaDK+1URzJg=; b=DazRw8f672nOYsQgPSM0WjSXlKZHYhuCfLeSjleSOiHeM81Z6W0bZHc0Y3RiYaHdK4 /20dYSvcGlwzZep7oo0GJjO2NVaK6mAywP7UE+qyFUN7gWU9Rer990Im9YsoClAinOnA 7dFZ0pAI1h5K2CriJezkhn3LRO5Buz4m1tgJtZHcW+enSwySG5qALuLLvyXuFcviE/R/ xrd81HcqDfM5F3lVk/6uefGWnII4Jn2eETzNLMUsamyo6zl/WEK+/gUcC6ddTHNxxmdF kN1lI3kgpVs2dJLQ56keuMhMfq0OePLeXwNEvlH7Sbt5QyoPtiRKq7tbJzJQBOhF5rvq Zb1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=tT3aXTw2eyOPHzCMOqRrgVy7QtGfrqY+FaDK+1URzJg=; b=SkC3x+TR9szCwPXTCha2x0sNVvYYNtSXlDny2/abFo2YdGmHAFCgLJ9PCj3bswYV84 +ksRmfz1Kyb6y8CA90eUGddyLZlvoKfKbQ/wRl8+fMJxInAhMN5ukbmQi6L9iCjfB4ou K4GA6Qb6xZ+tjDG3VFXmDdoXK3nzyUtQBFWcWETPDVcMhg6y9JIRhxDjT/9Ge+G52Gz9 1/1Y+cq6mPKbh7PGL6j0nOnNWQWMjXzdsOfpCU9hwbfaIu4PqC8DCh0uyBcPTmkYc1Iy YSbHig+VxhX/yEUvn1avDCn2VNsPI8OqcpK27D1MxQq+Qf2CR2iZjHP4nXUSUFlGSZc+ juDA== X-Gm-Message-State: AKGB3mLGBHIIQ0WicRaLFGNl9zpKhTQf8bhSMqRLNZ3BXIbH7JYbF78M w2bdOypnocjxWB7DNNSUHT0= X-Google-Smtp-Source: ACJfBoscBuyjZORyuRZOgJv4f5mpB9kgKXoS89XRByDYDOqotvrUNmzK2e+VfCLzMK24PKAo/L0fRw== X-Received: by 10.98.74.9 with SMTP id x9mr8795856pfa.141.1515488027718; Tue, 09 Jan 2018 00:53:47 -0800 (PST) Received: from localhost.localdomain ([103.37.201.122]) by smtp.gmail.com with ESMTPSA id 84sm33304398pfp.180.2018.01.09.00.53.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jan 2018 00:53:47 -0800 (PST) From: Harsha Sharma To: pablo@netfilter.org, harshasharmaiitr@gmail.com Cc: netfilter-devel@vger.kernel.org Subject: [PATCH v3] netfilter: nf_tables: delete table via table handle Date: Tue, 9 Jan 2018 14:23:34 +0530 Message-Id: <20180109085334.3500-1-harshasharmaiitr@gmail.com> X-Mailer: git-send-email 2.11.0 Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org This patch add code to delete table via unique table handle and table family. Signed-off-by: Harsha Sharma --- Changes in v3: -Remove __nft_table_lookup_byhandle Changes in v2: - Remove nf_tables_afinfo_lookup_byhandle - Change log message net/netfilter/nf_tables_api.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index dabdd2ed66c8..f12671e0ec48 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -367,6 +367,20 @@ static struct nft_table *nft_table_lookup(const struct nft_af_info *afi, return NULL; } +static struct nft_table *nft_table_lookup_byhandle(const struct nft_af_info *afi, + const struct nlattr *nla, + u8 genmask) +{ + struct nft_table *table; + + list_for_each_entry(table, &afi->tables, list) { + if (be64_to_cpu(nla_get_be64(nla)) == table->handle && + nft_active_genmask(table, genmask)) + return table; + } + return NULL; +} + static struct nft_table *nf_tables_table_lookup(const struct nft_af_info *afi, const struct nlattr *nla, u8 genmask) @@ -383,6 +397,22 @@ static struct nft_table *nf_tables_table_lookup(const struct nft_af_info *afi, return ERR_PTR(-ENOENT); } +static struct nft_table *nf_tables_table_lookup_byhandle(const struct nft_af_info *afi, + const struct nlattr *nla, + u8 genmask) +{ + struct nft_table *table; + + if (nla == NULL) + return ERR_PTR(-EINVAL); + + table = nft_table_lookup_byhandle(afi, nla, genmask); + if (table != NULL) + return table; + + return ERR_PTR(-ENOENT); +} + static inline u64 nf_tables_alloc_handle(struct nft_table *table) { return ++table->hgenerator; @@ -854,14 +884,18 @@ static int nf_tables_deltable(struct net *net, struct sock *nlsk, struct nft_ctx ctx; nft_ctx_init(&ctx, net, skb, nlh, NULL, NULL, NULL, nla); - if (family == AF_UNSPEC || nla[NFTA_TABLE_NAME] == NULL) + if (family == AF_UNSPEC || + (!nla[NFTA_TABLE_NAME] && !nla[NFTA_TABLE_HANDLE])) return nft_flush(&ctx, family); afi = nf_tables_afinfo_lookup(net, family, false); if (IS_ERR(afi)) return PTR_ERR(afi); + if (nla[NFTA_TABLE_HANDLE]) + table = nf_tables_table_lookup_byhandle(afi, nla[NFTA_TABLE_HANDLE], genmask); + else + table = nf_tables_table_lookup(afi, nla[NFTA_TABLE_NAME], genmask); - table = nf_tables_table_lookup(afi, nla[NFTA_TABLE_NAME], genmask); if (IS_ERR(table)) return PTR_ERR(table);