struct builtin_table *table)
{
int i;
- struct nftnl_chain_list *list = nft_chain_dump(h);
+ struct nftnl_chain_list *list = nft_chain_dump(h, NULL);
struct nftnl_chain *c;
/* Initialize built-in chains if they don't exist yet */
return MNL_CB_OK;
}
-static struct nftnl_chain_list *nftnl_chain_list_get(struct nft_handle *h)
+static struct nftnl_chain_list *nftnl_chain_list_get(struct nft_handle *h,
+ const char *tablename)
{
char buf[16536];
struct nlmsghdr *nlh;
nlh = nftnl_chain_nlmsg_build_hdr(buf, NFT_MSG_GETCHAIN, h->family,
NLM_F_DUMP, h->seq);
+ if (tablename) {
+ struct nftnl_chain *t = nftnl_chain_alloc();
+
+ if (t) {
+ nftnl_chain_set(t, NFTNL_CHAIN_TABLE, tablename);
+ nftnl_chain_nlmsg_build_payload(nlh, t);
+ nftnl_chain_free(t);
+ }
+ }
ret = mnl_talk(h, nlh, nftnl_chain_list_cb, list);
if (ret < 0 && errno == EINTR) {
return list;
}
-struct nftnl_chain_list *nft_chain_dump(struct nft_handle *h)
+struct nftnl_chain_list *nft_chain_dump(struct nft_handle *h, const char *tablename)
{
- return nftnl_chain_list_get(h);
+ return nftnl_chain_list_get(h, tablename);
}
static const char *policy_name[NF_ACCEPT+1] = {
nft_fn = nft_rule_flush;
- list = nftnl_chain_list_get(h);
+ list = nftnl_chain_list_get(h, table);
if (list == NULL) {
ret = 0;
goto err;
nft_fn = nft_chain_user_del;
- list = nftnl_chain_list_get(h);
+ list = nftnl_chain_list_get(h, table);
if (list == NULL)
goto err;
{
struct nftnl_chain_list *list;
- list = nftnl_chain_list_get(h);
+ list = nftnl_chain_list_get(h, table);
if (list == NULL)
return NULL;
return 1;
}
- list = nft_chain_dump(h);
+ list = nft_chain_dump(h, table);
iter = nftnl_chain_list_iter_create(list);
if (iter == NULL)
struct nftnl_chain *c;
int ret = 1;
- list = nft_chain_dump(h);
+ list = nft_chain_dump(h, table);
/* Dump policies and custom chains first */
if (!rulenum)
struct nftnl_chain *c;
int ret = 0;
- list = nftnl_chain_list_get(h);
+ list = nftnl_chain_list_get(h, table);
if (list == NULL)
goto err;
struct nftnl_chain *chain;
int ret = 0;
- list = nftnl_chain_list_get(h);
+ list = nftnl_chain_list_get(h, NULL);
if (list == NULL)
return -1;
struct nftnl_chain;
int nft_chain_set(struct nft_handle *h, const char *table, const char *chain, const char *policy, const struct xt_counters *counters);
-struct nftnl_chain_list *nft_chain_dump(struct nft_handle *h);
+struct nftnl_chain_list *nft_chain_dump(struct nft_handle *h, const char *table);
struct nftnl_chain *nft_chain_list_find(struct nftnl_chain_list *list, const char *table, const char *chain);
int nft_chain_save(struct nft_handle *h, struct nftnl_chain_list *list, const char *table);
int nft_chain_user_add(struct nft_handle *h, const char *chain, const char *table);