/* * Copyright (c) 2020 Red Hat GmbH. Author: Phil Sutter * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include #include #include "nft-chain.h" struct nft_chain *nft_chain_alloc(struct nftnl_chain *nftnl) { struct nft_chain *c = xtables_malloc(sizeof(*c)); INIT_LIST_HEAD(&c->head); c->nftnl = nftnl; return c; } void nft_chain_free(struct nft_chain *c) { if (c->nftnl) nftnl_chain_free(c->nftnl); free(c); } struct nft_chain_list *nft_chain_list_alloc(void) { struct nft_chain_list *list = xtables_malloc(sizeof(*list)); int i; INIT_LIST_HEAD(&list->list); for (i = 0; i < CHAIN_NAME_HSIZE; i++) INIT_HLIST_HEAD(&list->names[i]); return list; } void nft_chain_list_del(struct nft_chain *c) { list_del(&c->head); hlist_del(&c->hnode); } void nft_chain_list_free(struct nft_chain_list *list) { struct nft_chain *c, *c2; list_for_each_entry_safe(c, c2, &list->list, head) { nft_chain_list_del(c); nft_chain_free(c); } free(list); }