From patchwork Sun Jan 14 16:43:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harsha Sharma X-Patchwork-Id: 860480 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="jaw3Zi/i"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zKMlC5Q13z9sR8 for ; Mon, 15 Jan 2018 03:44:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751759AbeANQoW (ORCPT ); Sun, 14 Jan 2018 11:44:22 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:38763 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751239AbeANQoV (ORCPT ); Sun, 14 Jan 2018 11:44:21 -0500 Received: by mail-pg0-f67.google.com with SMTP id y27so958386pgc.5 for ; Sun, 14 Jan 2018 08:44:21 -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=YM8CH9CpofR9BaykmMVZo6YCXoEIq4nsxPphP6vKjjI=; b=jaw3Zi/i3h9altMfd396nkE6gsiSa6+6VYaipm9mPYO48KCBB2FOSnOUlbnl/ymY8I /iB+BENYmNjh2yXUVpz6MMo86DLEyubBYBxvfXEEQwkvulIv0KFrNAxC6uhZI68Baylo v/SvdjvWvNAhr28hKNLXfwl4cdlK2l4/1fYxqqnYoeEN59zpizpmXbH23wo0J5BZwjav etNViHpmolXEzC6ETRxPqpiiL6p2St4okKx08QkfvpmxT/6AslnP6kpPvrW4JgvbJspU xMhvtKdT7xYhUzDLFOt7C6tsrmeAXEytkpId+M46Si/JKCcA/RKUTmLcyHr0EBA0VHEA yFsQ== 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=YM8CH9CpofR9BaykmMVZo6YCXoEIq4nsxPphP6vKjjI=; b=r8Le9S0tWGwmqpS8f2CIZBHgsolqs3By32yTqSkT4F5PkMNJ5Bvi5eCvKDWaZVdEei dDx+XWhK+o0ZRA3iR2OlBdd9m0vDDaA+DHgwt4YinTPjrWN8j/c3T02ElDHSHU2pxD67 LUmQXWxF7hKkhxI9NllRaVgVLYAz1wc3mWi1g2uV2VPvwO2T2P6oLzAJ+ka6T3PfD7/P 4avemrJX5j4xUv+G8KFHxBWYfyTgtSrwAITaLeLvNoqpW1UXDZv/Y7l1GeaDpbz8j7Sc KbRp6x+zwmpD18i40Lr2dliJpBbBc3MwtpAp3qM2s4jVhXAtP6+EvHSDsyVt6NoS7iSB 5v6g== X-Gm-Message-State: AKGB3mIRyC8+OxWpe/boJdI9yrxliW3Jhb65znVrGXAbHNZxjkEuxGAC sqxajBqmJAa+5UBYCZEXd3pmhg== X-Google-Smtp-Source: ACJfBovGsGeBCe04gVWglJjYhTCPcpvmkwi7+vxL5ez5WhO9tk4DW5+Sv8Abt9WVIhxPp+cy8aq53w== X-Received: by 10.101.66.12 with SMTP id c12mr26325779pgq.105.1515948261251; Sun, 14 Jan 2018 08:44:21 -0800 (PST) Received: from localhost.localdomain ([103.37.201.27]) by smtp.gmail.com with ESMTPSA id s14sm44277822pgf.16.2018.01.14.08.44.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 14 Jan 2018 08:44:20 -0800 (PST) From: Harsha Sharma To: pablo@netfilter.org, harshasharmaiitr@gmail.com Cc: netfilter-devel@vger.kernel.org Subject: [PATCH] src: parse new handle attribute for sets Date: Sun, 14 Jan 2018 22:13:52 +0530 Message-Id: <20180114164352.21777-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 adds code to allocate set handles and delete sets via set handle. Signed-off-by: Harsha Sharma --- include/libnftnl/set.h | 1 + include/linux/netfilter/nf_tables.h | 2 ++ include/set.h | 1 + src/set.c | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+) diff --git a/include/libnftnl/set.h b/include/libnftnl/set.h index e760d31..ecb4b5a 100644 --- a/include/libnftnl/set.h +++ b/include/libnftnl/set.h @@ -11,6 +11,7 @@ enum nftnl_set_attr { NFTNL_SET_TABLE, NFTNL_SET_NAME, + NFTNL_SET_HANDLE, NFTNL_SET_FLAGS, NFTNL_SET_KEY_TYPE, NFTNL_SET_KEY_LEN, diff --git a/include/linux/netfilter/nf_tables.h b/include/linux/netfilter/nf_tables.h index dbc4e38..120fa23 100644 --- a/include/linux/netfilter/nf_tables.h +++ b/include/linux/netfilter/nf_tables.h @@ -299,6 +299,7 @@ enum nft_set_desc_attributes { * * @NFTA_SET_TABLE: table name (NLA_STRING) * @NFTA_SET_NAME: set name (NLA_STRING) + * @NFTA_SET_HANDLE: numerical table handle (NLA_U64) * @NFTA_SET_FLAGS: bitmask of enum nft_set_flags (NLA_U32) * @NFTA_SET_KEY_TYPE: key data type, informational purpose only (NLA_U32) * @NFTA_SET_KEY_LEN: key data length (NLA_U32) @@ -316,6 +317,7 @@ enum nft_set_attributes { NFTA_SET_UNSPEC, NFTA_SET_TABLE, NFTA_SET_NAME, + NFTA_SET_HANDLE, NFTA_SET_FLAGS, NFTA_SET_KEY_TYPE, NFTA_SET_KEY_LEN, diff --git a/include/set.h b/include/set.h index c6deb73..3bcec7c 100644 --- a/include/set.h +++ b/include/set.h @@ -10,6 +10,7 @@ struct nftnl_set { uint32_t set_flags; const char *table; const char *name; + uint64_t handle; uint32_t key_type; uint32_t key_len; uint32_t data_type; diff --git a/src/set.c b/src/set.c index 592ea24..e27eed9 100644 --- a/src/set.c +++ b/src/set.c @@ -77,6 +77,7 @@ void nftnl_set_unset(struct nftnl_set *s, uint16_t attr) case NFTNL_SET_NAME: xfree(s->name); break; + case NFTNL_SET_HANDLE: case NFTNL_SET_FLAGS: case NFTNL_SET_KEY_TYPE: case NFTNL_SET_KEY_LEN: @@ -102,6 +103,7 @@ void nftnl_set_unset(struct nftnl_set *s, uint16_t attr) EXPORT_SYMBOL(nftnl_set_unset); static uint32_t nftnl_set_validate[NFTNL_SET_MAX + 1] = { + [NFTNL_SET_HANDLE] = sizeof(uint64_t), [NFTNL_SET_FLAGS] = sizeof(uint32_t), [NFTNL_SET_KEY_TYPE] = sizeof(uint32_t), [NFTNL_SET_KEY_LEN] = sizeof(uint32_t), @@ -138,6 +140,9 @@ int nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data, if (!s->name) return -1; break; + case NFTNL_SET_HANDLE: + s->handle = *((uint64_t *)data); + break; case NFTNL_SET_FLAGS: s->set_flags = *((uint32_t *)data); break; @@ -227,6 +232,9 @@ const void *nftnl_set_get_data(const struct nftnl_set *s, uint16_t attr, case NFTNL_SET_NAME: *data_len = strlen(s->name) + 1; return s->name; + case NFTNL_SET_HANDLE: + *data_len = sizeof(uint64_t); + return &s->handle; case NFTNL_SET_FLAGS: *data_len = sizeof(uint32_t); return &s->set_flags; @@ -359,6 +367,8 @@ void nftnl_set_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s) mnl_attr_put_strz(nlh, NFTA_SET_TABLE, s->table); if (s->flags & (1 << NFTNL_SET_NAME)) mnl_attr_put_strz(nlh, NFTA_SET_NAME, s->name); + if (s->handle & (1 << NFTNL_SET_HANDLE)) + mnl_attr_put_u64(nlh, NFTA_SET_HANDLE, htobe64(s->handle)); if (s->flags & (1 << NFTNL_SET_FLAGS)) mnl_attr_put_u32(nlh, NFTA_SET_FLAGS, htonl(s->set_flags)); if (s->flags & (1 << NFTNL_SET_KEY_TYPE)) @@ -401,6 +411,10 @@ static int nftnl_set_parse_attr_cb(const struct nlattr *attr, void *data) if (mnl_attr_validate(attr, MNL_TYPE_STRING) < 0) abi_breakage(); break; + case NFTA_SET_HANDLE: + if (mnl_attr_validate(attr, MNL_TYPE_U64) < 0) + abi_breakage(); + break; case NFTA_SET_FLAGS: case NFTA_SET_KEY_TYPE: case NFTA_SET_KEY_LEN: @@ -490,6 +504,10 @@ int nftnl_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s) return -1; s->flags |= (1 << NFTNL_SET_NAME); } + if (tb[NFTA_SET_HANDLE]) { + s->handle = be64toh(mnl_attr_get_u64(tb[NFTA_SET_HANDLE])); + s->flags |= (1 << NFTNL_SET_HANDLE); + } if (tb[NFTA_SET_FLAGS]) { s->set_flags = ntohl(mnl_attr_get_u32(tb[NFTA_SET_FLAGS])); s->flags |= (1 << NFTNL_SET_FLAGS);