From patchwork Mon Jan 8 17:58:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harsha Sharma X-Patchwork-Id: 856997 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="C36/ugv/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjgf71W8z9s7g for ; Tue, 9 Jan 2018 04:58:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754627AbeAHR6i (ORCPT ); Mon, 8 Jan 2018 12:58:38 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:41765 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754553AbeAHR6h (ORCPT ); Mon, 8 Jan 2018 12:58:37 -0500 Received: by mail-pf0-f195.google.com with SMTP id j3so2648469pfh.8 for ; Mon, 08 Jan 2018 09:58:37 -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=QoAwGFR8Bmq7C2PuceyBqzbMl5U0s1orhYWGI1RrCPw=; b=C36/ugv/eBfvQXV5yt8LDT9J34K3YuknMn6yNZTiv7gfOwlMG18fhXs6I5kTjfPS0l ngPrdGB5p1/J/BE9I1BkrALpICNVobuGEx+Uy0fuYnWOx28SXMA55aQwN3VPwbO0+zL5 PBiaWGlrYPj4OVG3lzGMpGg3eVfKBoCDaps0DcKv0l6oXopUQiW+ezTkmaGUCc6k+Pcj H2ngtOJndJcljZ94jfL4PU8+SRBaMDvesRwlde43515pv4Ube91fYKfG9qZSb8onBfG6 itIZUzqf/wJQdtsBSNluGgAcyLZWHN1I7EBhuxE9+JddGTAVQHoru8ar9PVAtwrkOq4x LKyg== 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=QoAwGFR8Bmq7C2PuceyBqzbMl5U0s1orhYWGI1RrCPw=; b=rP0gbg4AIWJSxna2qiViCgqSvpzGofL36uyEzkMuxSf42vPYc1bJ0fXe4cNAU15oQB k+nbSPhf1MEAWUa+thazIfwMJVlhM7dhTID/Dw4mnaLNpKWaI003JHDnHc4OCHnBommr 2S0Vf2Z1eGkROpJoYqpyoMmLJ7kg1vc1P954AEh7zTleIjWCdvzVlUEczgnB7aDKf3XQ 7R4fZ8kjtAoiL+2HWHUtE/B2nfB26JrjmaUqeof/zvT9HqPbIvM4AnDhEw8Izb/wllo4 SFkqlVMEG49q8gR0KJ1HbqP7OnqkrR5SvmKiZrH/be4K5nsYYIwCzPCI/FbC2d+D9Zzd r/NQ== X-Gm-Message-State: AKGB3mKN9D2nAW6F6Jop5O9vXet8SGB+mFZzbmswHsmEWT7/mgAuxonb f2UBueD+TMspFMTVjQ03ffU= X-Google-Smtp-Source: ACJfBou1uk2Wer8+Y46+IT1ZT8Nuav9i2fDeqjXgMZUctdYTHf04vvRbnlHI1sdR2WkpUVzm4yLWBg== X-Received: by 10.159.214.143 with SMTP id n15mr12870091plp.49.1515434316774; Mon, 08 Jan 2018 09:58:36 -0800 (PST) Received: from localhost.localdomain ([103.37.201.27]) by smtp.gmail.com with ESMTPSA id v186sm3625897pfb.5.2018.01.08.09.58.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 09:58:36 -0800 (PST) From: Harsha Sharma To: pablo@netfilter.org, harshasharmaiitr@gmail.com Cc: netfilter-devel@vger.kernel.org Subject: [PATCH v2] netfilter: nf_tables: delete table via table handle Date: Mon, 8 Jan 2018 23:28:18 +0530 Message-Id: <20180108175818.23100-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 v2: - Remove nf_tables_afinfo_lookup_byhandle - Change log message net/netfilter/nf_tables_api.c | 45 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index ba6065c39674..1f1f3be37034 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -400,6 +400,28 @@ 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, + u64 handle, u8 genmask) +{ + struct nft_table *table; + + list_for_each_entry(table, &afi->tables, list) { + if (handle == table->handle && + nft_active_genmask(table, genmask)) + return table; + } + return NULL; +} + +static struct nft_table *nft_table_lookup_byhandle(const struct nft_af_info *afi, + const struct nlattr *nla, + u8 genmask) +{ + return __nft_table_lookup_byhandle(afi, + be64_to_cpu(nla_get_be64(nla)), + genmask); +} + static struct nft_table *nf_tables_table_lookup(const struct nft_af_info *afi, const struct nlattr *nla, u8 genmask) @@ -416,6 +438,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; @@ -893,14 +931,17 @@ 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] == NULL && nla[NFTA_TABLE_HANDLE] == NULL)) 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);