summaryrefslogtreecommitdiffstats
path: root/src/netlink.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2012-12-14 17:30:06 +0100
committerPatrick McHardy <kaber@trash.net>2012-12-14 17:30:06 +0100
commit1c494b5302b285d6674478a3555b63403bebdcb0 (patch)
tree4dfe756bb1aeb3473efb3553a508fc6a17acdc82 /src/netlink.c
parent4ddc2fd15d8bea177e0fb1c8b538e4ab30d1ec7f (diff)
netlink: fix query requests
The callback needs to be set before sending the query since nl_wait_for_ack() already does message reception. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src/netlink.c')
-rw-r--r--src/netlink.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/netlink.c b/src/netlink.c
index 912dfd5b..7e4f4906 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -372,9 +372,10 @@ int netlink_get_rule(struct netlink_ctx *ctx, const struct handle *h)
int err;
nlr = alloc_nft_rule(h);
- nfnl_nft_rule_query(nf_sock, nlr, 0);
netlink_set_callback(netlink_get_rule_cb, ctx);
- err = nl_recvmsgs_default(nf_sock);
+ err = nfnl_nft_rule_query(nf_sock, nlr, 0);
+ if (err == 0)
+ err = nl_recvmsgs_default(nf_sock);
nfnl_nft_rule_put(nlr);
if (err < 0)
@@ -504,9 +505,11 @@ int netlink_get_chain(struct netlink_ctx *ctx, const struct handle *h)
int err;
nlc = alloc_nft_chain(h);
- nfnl_nft_chain_query(nf_sock, nlc, 0);
netlink_set_callback(netlink_get_chain_cb, ctx);
- err = nl_recvmsgs_default(nf_sock);
+ err = nfnl_nft_chain_query(nf_sock, nlc, 0);
+ if (err == 0)
+ err = nl_recvmsgs_default(nf_sock);
+ netlink_set_callback(NULL, NULL);
nfnl_nft_chain_put(nlc);
if (err < 0)
@@ -606,9 +609,10 @@ int netlink_get_table(struct netlink_ctx *ctx, const struct handle *h)
int err;
nlt = alloc_nft_table(h);
- nfnl_nft_table_query(nf_sock, nlt, 0);
netlink_set_callback(netlink_get_table_cb, ctx);
- err = nl_recvmsgs_default(nf_sock);
+ err = nfnl_nft_table_query(nf_sock, nlt, 0);
+ if (err == 0)
+ err = nl_recvmsgs_default(nf_sock);
nfnl_nft_table_put(nlt);
if (err < 0)