|
|
6ef880 |
From d1b516014e4883f30ee2faf264dd89a6d7940e2c Mon Sep 17 00:00:00 2001
|
|
|
6ef880 |
From: Phil Sutter <phil@nwl.cc>
|
|
|
6ef880 |
Date: Sat, 3 Oct 2020 17:46:09 +0200
|
|
|
6ef880 |
Subject: [PATCH] nft: Make batch_add_chain() return the added batch object
|
|
|
6ef880 |
|
|
|
6ef880 |
Do this so in a later patch the 'skip' field can be adjusted.
|
|
|
6ef880 |
|
|
|
6ef880 |
While being at it, simplify a few callers and eliminate the need for a
|
|
|
6ef880 |
'ret' variable.
|
|
|
6ef880 |
|
|
|
6ef880 |
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
|
|
6ef880 |
Reviewed-by: Florian Westphal <fw@strlen.de>
|
|
|
6ef880 |
(cherry picked from commit 0d77e64e8d9b8a3984b01a4951524dc40f61f4b6)
|
|
|
6ef880 |
|
|
|
6ef880 |
Conflicts:
|
|
|
6ef880 |
iptables/nft.c
|
|
|
6ef880 |
-> Upstream changed good/bad return codes of nft_chain_restore()
|
|
|
6ef880 |
function.
|
|
|
6ef880 |
|
|
|
6ef880 |
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
|
|
6ef880 |
---
|
|
|
6ef880 |
iptables/nft.c | 35 +++++++++++++++++------------------
|
|
|
6ef880 |
1 file changed, 17 insertions(+), 18 deletions(-)
|
|
|
6ef880 |
|
|
|
6ef880 |
diff --git a/iptables/nft.c b/iptables/nft.c
|
|
|
6ef880 |
index e95e99f1d8d71..0efd18d57320f 100644
|
|
|
6ef880 |
--- a/iptables/nft.c
|
|
|
6ef880 |
+++ b/iptables/nft.c
|
|
|
6ef880 |
@@ -398,10 +398,11 @@ batch_set_add(struct nft_handle *h, enum obj_update_type type,
|
|
|
6ef880 |
return batch_add(h, type, s);
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
-static int batch_chain_add(struct nft_handle *h, enum obj_update_type type,
|
|
|
6ef880 |
+static struct obj_update *
|
|
|
6ef880 |
+batch_chain_add(struct nft_handle *h, enum obj_update_type type,
|
|
|
6ef880 |
struct nftnl_chain *c)
|
|
|
6ef880 |
{
|
|
|
6ef880 |
- return batch_add(h, type, c) ? 0 : -1;
|
|
|
6ef880 |
+ return batch_add(h, type, c);
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
static struct obj_update *
|
|
|
6ef880 |
@@ -910,7 +911,6 @@ int nft_chain_set(struct nft_handle *h, const char *table,
|
|
|
6ef880 |
const struct xt_counters *counters)
|
|
|
6ef880 |
{
|
|
|
6ef880 |
struct nftnl_chain *c = NULL;
|
|
|
6ef880 |
- int ret;
|
|
|
6ef880 |
|
|
|
6ef880 |
nft_fn = nft_chain_set;
|
|
|
6ef880 |
|
|
|
6ef880 |
@@ -924,10 +924,11 @@ int nft_chain_set(struct nft_handle *h, const char *table,
|
|
|
6ef880 |
if (c == NULL)
|
|
|
6ef880 |
return 0;
|
|
|
6ef880 |
|
|
|
6ef880 |
- ret = batch_chain_add(h, NFT_COMPAT_CHAIN_UPDATE, c);
|
|
|
6ef880 |
+ if (!batch_chain_add(h, NFT_COMPAT_CHAIN_UPDATE, c))
|
|
|
6ef880 |
+ return 0;
|
|
|
6ef880 |
|
|
|
6ef880 |
/* the core expects 1 for success and 0 for error */
|
|
|
6ef880 |
- return ret == 0 ? 1 : 0;
|
|
|
6ef880 |
+ return 1;
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
static int __add_match(struct nftnl_expr *e, struct xt_entry_match *m)
|
|
|
6ef880 |
@@ -1734,7 +1735,6 @@ int nft_chain_user_add(struct nft_handle *h, const char *chain, const char *tabl
|
|
|
6ef880 |
{
|
|
|
6ef880 |
struct nftnl_chain_list *list;
|
|
|
6ef880 |
struct nftnl_chain *c;
|
|
|
6ef880 |
- int ret;
|
|
|
6ef880 |
|
|
|
6ef880 |
nft_fn = nft_chain_user_add;
|
|
|
6ef880 |
|
|
|
6ef880 |
@@ -1754,14 +1754,15 @@ int nft_chain_user_add(struct nft_handle *h, const char *chain, const char *tabl
|
|
|
6ef880 |
if (h->family == NFPROTO_BRIDGE)
|
|
|
6ef880 |
nftnl_chain_set_u32(c, NFTNL_CHAIN_POLICY, NF_ACCEPT);
|
|
|
6ef880 |
|
|
|
6ef880 |
- ret = batch_chain_add(h, NFT_COMPAT_CHAIN_USER_ADD, c);
|
|
|
6ef880 |
+ if (!batch_chain_add(h, NFT_COMPAT_CHAIN_USER_ADD, c))
|
|
|
6ef880 |
+ return 0;
|
|
|
6ef880 |
|
|
|
6ef880 |
list = nft_chain_list_get(h, table, chain);
|
|
|
6ef880 |
if (list)
|
|
|
6ef880 |
nftnl_chain_list_add(c, list);
|
|
|
6ef880 |
|
|
|
6ef880 |
/* the core expects 1 for success and 0 for error */
|
|
|
6ef880 |
- return ret == 0 ? 1 : 0;
|
|
|
6ef880 |
+ return 1;
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
int nft_chain_restore(struct nft_handle *h, const char *chain, const char *table)
|
|
|
6ef880 |
@@ -1769,7 +1770,6 @@ int nft_chain_restore(struct nft_handle *h, const char *chain, const char *table
|
|
|
6ef880 |
struct nftnl_chain_list *list;
|
|
|
6ef880 |
struct nftnl_chain *c;
|
|
|
6ef880 |
bool created = false;
|
|
|
6ef880 |
- int ret;
|
|
|
6ef880 |
|
|
|
6ef880 |
c = nft_chain_find(h, table, chain);
|
|
|
6ef880 |
if (c) {
|
|
|
6ef880 |
@@ -1794,13 +1794,14 @@ int nft_chain_restore(struct nft_handle *h, const char *chain, const char *table
|
|
|
6ef880 |
if (!created)
|
|
|
6ef880 |
return 0;
|
|
|
6ef880 |
|
|
|
6ef880 |
- ret = batch_chain_add(h, NFT_COMPAT_CHAIN_USER_ADD, c);
|
|
|
6ef880 |
+ if (!batch_chain_add(h, NFT_COMPAT_CHAIN_USER_ADD, c))
|
|
|
6ef880 |
+ return -1;
|
|
|
6ef880 |
|
|
|
6ef880 |
list = nft_chain_list_get(h, table, chain);
|
|
|
6ef880 |
if (list)
|
|
|
6ef880 |
nftnl_chain_list_add(c, list);
|
|
|
6ef880 |
|
|
|
6ef880 |
- return ret;
|
|
|
6ef880 |
+ return 0;
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
/* From linux/netlink.h */
|
|
|
6ef880 |
@@ -1818,7 +1819,6 @@ static int __nft_chain_user_del(struct nftnl_chain *c, void *data)
|
|
|
6ef880 |
{
|
|
|
6ef880 |
struct chain_user_del_data *d = data;
|
|
|
6ef880 |
struct nft_handle *h = d->handle;
|
|
|
6ef880 |
- int ret;
|
|
|
6ef880 |
|
|
|
6ef880 |
/* don't delete built-in chain */
|
|
|
6ef880 |
if (nft_chain_builtin(c))
|
|
|
6ef880 |
@@ -1834,8 +1834,7 @@ static int __nft_chain_user_del(struct nftnl_chain *c, void *data)
|
|
|
6ef880 |
|
|
|
6ef880 |
/* XXX This triggers a fast lookup from the kernel. */
|
|
|
6ef880 |
nftnl_chain_unset(c, NFTNL_CHAIN_HANDLE);
|
|
|
6ef880 |
- ret = batch_chain_add(h, NFT_COMPAT_CHAIN_USER_DEL, c);
|
|
|
6ef880 |
- if (ret)
|
|
|
6ef880 |
+ if (!batch_chain_add(h, NFT_COMPAT_CHAIN_USER_DEL, c))
|
|
|
6ef880 |
return -1;
|
|
|
6ef880 |
|
|
|
6ef880 |
nftnl_chain_list_del(c);
|
|
|
6ef880 |
@@ -1910,7 +1909,6 @@ int nft_chain_user_rename(struct nft_handle *h,const char *chain,
|
|
|
6ef880 |
{
|
|
|
6ef880 |
struct nftnl_chain *c;
|
|
|
6ef880 |
uint64_t handle;
|
|
|
6ef880 |
- int ret;
|
|
|
6ef880 |
|
|
|
6ef880 |
nft_fn = nft_chain_user_rename;
|
|
|
6ef880 |
|
|
|
6ef880 |
@@ -1941,10 +1939,11 @@ int nft_chain_user_rename(struct nft_handle *h,const char *chain,
|
|
|
6ef880 |
nftnl_chain_set_str(c, NFTNL_CHAIN_NAME, newname);
|
|
|
6ef880 |
nftnl_chain_set_u64(c, NFTNL_CHAIN_HANDLE, handle);
|
|
|
6ef880 |
|
|
|
6ef880 |
- ret = batch_chain_add(h, NFT_COMPAT_CHAIN_RENAME, c);
|
|
|
6ef880 |
+ if (!batch_chain_add(h, NFT_COMPAT_CHAIN_RENAME, c))
|
|
|
6ef880 |
+ return 0;
|
|
|
6ef880 |
|
|
|
6ef880 |
/* the core expects 1 for success and 0 for error */
|
|
|
6ef880 |
- return ret == 0 ? 1 : 0;
|
|
|
6ef880 |
+ return 1;
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
bool nft_table_find(struct nft_handle *h, const char *tablename)
|
|
|
6ef880 |
@@ -3217,7 +3216,7 @@ static int __nft_chain_zero_counters(struct nftnl_chain *c, void *data)
|
|
|
6ef880 |
nftnl_chain_set_u64(c, NFTNL_CHAIN_PACKETS, 0);
|
|
|
6ef880 |
nftnl_chain_set_u64(c, NFTNL_CHAIN_BYTES, 0);
|
|
|
6ef880 |
nftnl_chain_unset(c, NFTNL_CHAIN_HANDLE);
|
|
|
6ef880 |
- if (batch_chain_add(h, NFT_COMPAT_CHAIN_ZERO, c))
|
|
|
6ef880 |
+ if (!batch_chain_add(h, NFT_COMPAT_CHAIN_ZERO, c))
|
|
|
6ef880 |
return -1;
|
|
|
6ef880 |
}
|
|
|
6ef880 |
|
|
|
6ef880 |
--
|
|
|
6ef880 |
2.28.0
|
|
|
6ef880 |
|